+ @Override
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ long term = in.readLong();
+ String leaderId = (String) in.readObject();
+ long lastIncludedIndex = in.readLong();
+ long lastIncludedTerm = in.readLong();
+ int chunkIndex = in.readInt();
+ int totalChunks = in.readInt();
+
+ Optional<Integer> lastChunkHashCode = Optional.absent();
+ boolean chunkHashCodePresent = in.readByte() == 1;
+ if (chunkHashCodePresent) {
+ lastChunkHashCode = Optional.of(in.readInt());
+ }
+
+ Optional<ServerConfigurationPayload> serverConfig = Optional.absent();
+ boolean serverConfigPresent = in.readByte() == 1;
+ if (serverConfigPresent) {
+ serverConfig = Optional.of((ServerConfigurationPayload)in.readObject());
+ }
+
+ byte[] data = (byte[])in.readObject();
+
+ installSnapshot = new InstallSnapshot(term, leaderId, lastIncludedIndex, lastIncludedTerm, data,
+ chunkIndex, totalChunks, lastChunkHashCode, serverConfig);
+ }
+
+ private Object readResolve() {
+ return installSnapshot;
+ }