Improve segmented journal actor metrics
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / main / java / org / opendaylight / controller / cluster / raft / persisted / Snapshot.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.controller.cluster.raft.persisted;
9
10 import java.io.Serializable;
11 import java.util.List;
12 import org.opendaylight.controller.cluster.raft.ReplicatedLogEntry;
13
14 /**
15  * Represents a snapshot of the raft data.
16  *
17  * @author Thomas Pantelis
18  */
19 public final class Snapshot implements Serializable {
20     /**
21      * Implementations of this interface are used as the state payload for a snapshot.
22      *
23      * @author Thomas Pantelis
24      */
25     public interface State extends Serializable {
26         /**
27          * Indicate whether the snapshot requires migration, i.e. a new snapshot should be created after recovery.
28          * Default implementation returns false, i.e. do not re-snapshot.
29          *
30          * @return True if complete recovery based upon this snapshot should trigger a new snapshot.
31          */
32         default boolean needsMigration() {
33             return false;
34         }
35     }
36
37     @java.io.Serial
38     private static final long serialVersionUID = 1L;
39
40     private final State state;
41     private final List<ReplicatedLogEntry> unAppliedEntries;
42     private final long lastIndex;
43     private final long lastTerm;
44     private final long lastAppliedIndex;
45     private final long lastAppliedTerm;
46     private final long electionTerm;
47     private final String electionVotedFor;
48     private final ServerConfigurationPayload serverConfig;
49
50     private Snapshot(final State state, final List<ReplicatedLogEntry> unAppliedEntries, final long lastIndex,
51             final long lastTerm, final long lastAppliedIndex, final long lastAppliedTerm, final long electionTerm,
52             final String electionVotedFor, final ServerConfigurationPayload serverConfig) {
53         this.state = state;
54         this.unAppliedEntries = unAppliedEntries;
55         this.lastIndex = lastIndex;
56         this.lastTerm = lastTerm;
57         this.lastAppliedIndex = lastAppliedIndex;
58         this.lastAppliedTerm = lastAppliedTerm;
59         this.electionTerm = electionTerm;
60         this.electionVotedFor = electionVotedFor;
61         this.serverConfig = serverConfig;
62     }
63
64     public static Snapshot create(final State state, final List<ReplicatedLogEntry> entries, final long lastIndex,
65             final long lastTerm, final long lastAppliedIndex, final long lastAppliedTerm, final long electionTerm,
66             final String electionVotedFor, final ServerConfigurationPayload serverConfig) {
67         return new Snapshot(state, entries, lastIndex, lastTerm, lastAppliedIndex, lastAppliedTerm,
68                 electionTerm, electionVotedFor, serverConfig);
69     }
70
71     public State getState() {
72         return state;
73     }
74
75     public List<ReplicatedLogEntry> getUnAppliedEntries() {
76         return unAppliedEntries;
77     }
78
79     public long getLastTerm() {
80         return lastTerm;
81     }
82
83     public long getLastAppliedIndex() {
84         return lastAppliedIndex;
85     }
86
87     public long getLastAppliedTerm() {
88         return lastAppliedTerm;
89     }
90
91     public long getLastIndex() {
92         return lastIndex;
93     }
94
95     public long getElectionTerm() {
96         return electionTerm;
97     }
98
99     public String getElectionVotedFor() {
100         return electionVotedFor;
101     }
102
103     public ServerConfigurationPayload getServerConfiguration() {
104         return serverConfig;
105     }
106
107     @Override
108     public String toString() {
109         return "Snapshot [lastIndex=" + lastIndex + ", lastTerm=" + lastTerm + ", lastAppliedIndex=" + lastAppliedIndex
110                 + ", lastAppliedTerm=" + lastAppliedTerm + ", unAppliedEntries size=" + unAppliedEntries.size()
111                 + ", state=" + state + ", electionTerm=" + electionTerm + ", electionVotedFor="
112                 + electionVotedFor + ", ServerConfigPayload="  + serverConfig + "]";
113     }
114
115     @java.io.Serial
116     private Object writeReplace() {
117         return new SS(this);
118     }
119 }