*/
package org.opendaylight.controller.cluster.datastore.messages;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
import java.util.ArrayList;
import java.util.List;
+import org.opendaylight.controller.cluster.datastore.persisted.ShardDataTreeSnapshot;
+import org.opendaylight.controller.cluster.datastore.persisted.ShardManagerSnapshot;
+import org.opendaylight.controller.cluster.datastore.persisted.ShardSnapshotState;
+import org.opendaylight.controller.cluster.raft.Snapshot;
+import org.opendaylight.controller.cluster.raft.persisted.EmptyState;
/**
* Stores a list of DatastoreSnapshot instances.
+ *
+ * @deprecated Use {@link org.opendaylight.controller.cluster.datastore.persisted.DatastoreSnapshotList} instead.
*/
+@Deprecated
public class DatastoreSnapshotList extends ArrayList<DatastoreSnapshot> {
private static final long serialVersionUID = 1L;
public DatastoreSnapshotList(List<DatastoreSnapshot> snapshots) {
super(snapshots);
}
+
+ private Object readResolve() throws IOException, ClassNotFoundException {
+ List<org.opendaylight.controller.cluster.datastore.persisted.DatastoreSnapshot> snapshots =
+ new ArrayList<>(size());
+ for (DatastoreSnapshot legacy: this) {
+ snapshots.add(new org.opendaylight.controller.cluster.datastore.persisted.DatastoreSnapshot(
+ legacy.getType(), deserializeShardManagerSnapshot(legacy.getShardManagerSnapshot()),
+ fromLegacy(legacy.getShardSnapshots())));
+ }
+
+ return new org.opendaylight.controller.cluster.datastore.persisted.DatastoreSnapshotList(snapshots);
+ }
+
+ private static org.opendaylight.controller.cluster.datastore.persisted.ShardManagerSnapshot
+ deserializeShardManagerSnapshot(byte [] bytes) throws IOException, ClassNotFoundException {
+ if (bytes == null) {
+ return null;
+ }
+
+ try (ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bytes))) {
+ return (ShardManagerSnapshot) ois.readObject();
+ }
+ }
+
+ private static List<org.opendaylight.controller.cluster.datastore.persisted.DatastoreSnapshot.ShardSnapshot>
+ fromLegacy(List<DatastoreSnapshot.ShardSnapshot> from) throws IOException, ClassNotFoundException {
+ List<org.opendaylight.controller.cluster.datastore.persisted.DatastoreSnapshot.ShardSnapshot> snapshots =
+ new ArrayList<>(from.size());
+ for (DatastoreSnapshot.ShardSnapshot legacy: from) {
+ snapshots.add(new org.opendaylight.controller.cluster.datastore.persisted.DatastoreSnapshot.ShardSnapshot(
+ legacy.getName(), deserializeShardSnapshot(legacy.getSnapshot())));
+ }
+
+ return snapshots;
+ }
+
+ private static org.opendaylight.controller.cluster.raft.persisted.Snapshot deserializeShardSnapshot(byte[] bytes)
+ throws IOException, ClassNotFoundException {
+ try (ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bytes))) {
+ Snapshot legacy = (Snapshot) ois.readObject();
+
+ org.opendaylight.controller.cluster.raft.persisted.Snapshot.State state = EmptyState.INSTANCE;
+ if (legacy.getState().length > 0) {
+ state = new ShardSnapshotState(ShardDataTreeSnapshot.deserializePreCarbon(legacy.getState()));
+ }
+
+ return org.opendaylight.controller.cluster.raft.persisted.Snapshot.create(
+ state, legacy.getUnAppliedEntries(), legacy.getLastIndex(),
+ legacy.getLastTerm(), legacy.getLastAppliedIndex(), legacy.getLastAppliedTerm(),
+ legacy.getElectionTerm(), legacy.getElectionVotedFor(), legacy.getServerConfiguration());
+ }
+ }
}