/* * Copyright (c) 2015 Brocade Communications Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ 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 { private static final long serialVersionUID = 1L; public DatastoreSnapshotList() { } public DatastoreSnapshotList(List snapshots) { super(snapshots); } private Object readResolve() throws IOException, ClassNotFoundException { List 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 fromLegacy(List from) throws IOException, ClassNotFoundException { List 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()); } } }