View Javadoc
1   /*
2    * Copyright (C) 2016, Google Inc. and others
3    *
4    * This program and the accompanying materials are made available under the
5    * terms of the Eclipse Distribution License v. 1.0 which is available at
6    * https://www.eclipse.org/org/documents/edl-v10.php.
7    *
8    * SPDX-License-Identifier: BSD-3-Clause
9    */
10  
11  package org.eclipse.jgit.internal.ketch;
12  
13  import java.util.Date;
14  
15  import org.eclipse.jgit.annotations.Nullable;
16  import org.eclipse.jgit.lib.ObjectId;
17  
18  /**
19   * A snapshot of a replica.
20   *
21   * @see LeaderSnapshot
22   */
23  public class ReplicaSnapshot {
24  	final KetchReplica replica;
25  	ObjectId accepted;
26  	ObjectId committed;
27  	KetchReplica.State state;
28  	String error;
29  	long retryAtMillis;
30  
31  	ReplicaSnapshot(KetchReplica replica) {
32  		this.replica = replica;
33  	}
34  
35  	/**
36  	 * Get the replica this snapshot describes the state of
37  	 *
38  	 * @return the replica this snapshot describes the state of
39  	 */
40  	public KetchReplica getReplica() {
41  		return replica;
42  	}
43  
44  	/**
45  	 * Get current state of the replica
46  	 *
47  	 * @return current state of the replica
48  	 */
49  	public KetchReplica.State getState() {
50  		return state;
51  	}
52  
53  	/**
54  	 * Get last known Git commit at {@code refs/txn/accepted}
55  	 *
56  	 * @return last known Git commit at {@code refs/txn/accepted}
57  	 */
58  	@Nullable
59  	public ObjectId getAccepted() {
60  		return accepted;
61  	}
62  
63  	/**
64  	 * Get last known Git commit at {@code refs/txn/committed}
65  	 *
66  	 * @return last known Git commit at {@code refs/txn/committed}
67  	 */
68  	@Nullable
69  	public ObjectId getCommitted() {
70  		return committed;
71  	}
72  
73  	/**
74  	 * Get error message
75  	 *
76  	 * @return if {@link #getState()} ==
77  	 *         {@link org.eclipse.jgit.internal.ketch.KetchReplica.State#OFFLINE}
78  	 *         an optional human-readable message from the transport system
79  	 *         explaining the failure.
80  	 */
81  	@Nullable
82  	public String getErrorMessage() {
83  		return error;
84  	}
85  
86  	/**
87  	 * Get when the leader will retry communication with the offline or lagging
88  	 * replica
89  	 *
90  	 * @return time (usually in the future) when the leader will retry
91  	 *         communication with the offline or lagging replica; null if no
92  	 *         retry is scheduled or necessary.
93  	 */
94  	@Nullable
95  	public Date getRetryAt() {
96  		return retryAtMillis > 0 ? new Date(retryAtMillis) : null;
97  	}
98  }