use of io.atomix.protocols.raft.ReadConsistency in project atomix by atomix.
the class RaftServiceContext method installSnapshot.
/**
* Installs a snapshot.
*/
public void installSnapshot(SnapshotReader reader) {
log.debug("Installing snapshot {}", reader.snapshot().index());
// Skip the service ID
reader.skip(Bytes.LONG);
PrimitiveType primitiveType = raft.getPrimitiveTypes().get(reader.readString());
String serviceName = reader.readString();
int sessionCount = reader.readInt();
for (int i = 0; i < sessionCount; i++) {
SessionId sessionId = SessionId.from(reader.readLong());
NodeId node = NodeId.from(reader.readString());
ReadConsistency readConsistency = ReadConsistency.valueOf(reader.readString());
long minTimeout = reader.readLong();
long maxTimeout = reader.readLong();
long sessionTimestamp = reader.readLong();
// Only create a new session if one does not already exist. This is necessary to ensure only a single session
// is ever opened and exposed to the state machine.
RaftSession session = raft.getSessions().addSession(new RaftSession(sessionId, node, serviceName, primitiveType, readConsistency, minTimeout, maxTimeout, sessionTimestamp, this, raft, threadContextFactory));
session.setRequestSequence(reader.readLong());
session.setCommandSequence(reader.readLong());
session.setEventIndex(reader.readLong());
session.setLastCompleted(reader.readLong());
session.setLastApplied(reader.snapshot().index());
session.setLastUpdated(sessionTimestamp);
sessions.openSession(session);
}
currentIndex = reader.snapshot().index();
currentTimestamp = reader.snapshot().timestamp().unixTimestamp();
service.restore(reader);
}
Aggregations