X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fpersisted%2FShardManagerSnapshot.java;fp=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fpersisted%2FShardManagerSnapshot.java;h=2e0320bbcd7785d3cdb5546d3098280cce9180f0;hp=03ffa9af793a2778c07fb119a4360e1b6819bb3d;hb=2dedb8231e13abe55d6b75eb532d23dbe536e168;hpb=04502b115693e22d215716feef7b34b6d3c37f6a diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/ShardManagerSnapshot.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/ShardManagerSnapshot.java index 03ffa9af79..2e0320bbcd 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/ShardManagerSnapshot.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/ShardManagerSnapshot.java @@ -7,6 +7,9 @@ */ package org.opendaylight.controller.cluster.datastore.persisted; +import static com.google.common.base.Verify.verifyNotNull; +import static java.util.Objects.requireNonNull; + import com.google.common.collect.ImmutableList; import java.io.Externalizable; import java.io.IOException; @@ -23,7 +26,50 @@ import org.eclipse.jdt.annotation.NonNull; * @author Thomas Pantelis */ public final class ShardManagerSnapshot implements Serializable { - private static final class Proxy implements Externalizable { + interface SerializedForm extends Externalizable { + /** + * Return the serial form of this object contents, corresponding to {@link ShardManagerSnapshot#shardList}. + * + * @return List of shards names. + */ + List shardNames(); + + /** + * Resolve this proxy to an actual {@link ShardManagerSnapshot}. Implementations can rely on the object to be + * set via {@link #resolveTo(ShardManagerSnapshot)}. + * + * @return A snapshot + */ + Object readResolve(); + + /** + * Set this proxy to return {@code snapshot} on next {@link #readResolve()}. + * + * @param newSnapshot Snapshot to set + */ + void resolveTo(@NonNull ShardManagerSnapshot newSnapshot); + + @Override + default void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException { + final int size = in.readInt(); + final var shardList = new ArrayList(size); + for (int i = 0; i < size; i++) { + shardList.add((String) in.readObject()); + } + resolveTo(new ShardManagerSnapshot(shardList)); + } + + @Override + default void writeExternal(final ObjectOutput out) throws IOException { + final var shardList = shardNames(); + out.writeInt(shardList.size()); + for (var shardName : shardList) { + out.writeObject(shardName); + } + } + } + + private static final class Proxy implements SerializedForm { private static final long serialVersionUID = 1L; private ShardManagerSnapshot snapshot; @@ -40,26 +86,18 @@ public final class ShardManagerSnapshot implements Serializable { } @Override - public void writeExternal(final ObjectOutput out) throws IOException { - out.writeInt(snapshot.shardList.size()); - for (String shard: snapshot.shardList) { - out.writeObject(shard); - } + public List shardNames() { + return snapshot.getShardList(); } @Override - public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException { - int size = in.readInt(); - List localShardList = new ArrayList<>(size); - for (int i = 0; i < size; i++) { - localShardList.add((String) in.readObject()); - } - - snapshot = new ShardManagerSnapshot(localShardList); + public void resolveTo(final ShardManagerSnapshot newSnapshot) { + snapshot = requireNonNull(newSnapshot); } - private Object readResolve() { - return snapshot; + @Override + public Object readResolve() { + return verifyNotNull(snapshot); } }