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%2FShardSnapshotState.java;h=a8c7393b52f6804872e50a9db803aa279bf404d2;hp=f56d6ce01fb7804f597957758e8d7449209bcab8;hb=HEAD;hpb=5bbe45d0b189e706ed587e5e4a30c1205213c2f7 diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/ShardSnapshotState.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/ShardSnapshotState.java index f56d6ce01f..c06c5cf318 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/ShardSnapshotState.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/ShardSnapshotState.java @@ -7,15 +7,11 @@ */ package org.opendaylight.controller.cluster.datastore.persisted; -import com.google.common.base.Preconditions; +import static java.util.Objects.requireNonNull; + +import com.google.common.annotations.VisibleForTesting; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import java.io.Externalizable; -import java.io.IOException; -import java.io.InputStream; -import java.io.ObjectInput; -import java.io.ObjectOutput; -import java.io.OutputStream; -import javax.annotation.Nonnull; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.controller.cluster.raft.persisted.Snapshot; /** @@ -23,81 +19,37 @@ import org.opendaylight.controller.cluster.raft.persisted.Snapshot; * * @author Thomas Pantelis */ -public class ShardSnapshotState implements Snapshot.State { +public final class ShardSnapshotState implements Snapshot.State { + @java.io.Serial private static final long serialVersionUID = 1L; - private static final class Proxy implements Externalizable { - private static final long serialVersionUID = 1L; - - private ShardSnapshotState snapshotState; - - // checkstyle flags the public modifier as redundant which really doesn't make sense since it clearly isn't - // redundant. It is explicitly needed for Java serialization to be able to create instances via reflection. - @SuppressWarnings("checkstyle:RedundantModifier") - public Proxy() { - // For Externalizable - } - - Proxy(final ShardSnapshotState snapshotState) { - this.snapshotState = snapshotState; - } - - @Override - public void writeExternal(final ObjectOutput out) throws IOException { - snapshotState.snapshot.serialize(toOutputStream(out)); - } - - private static OutputStream toOutputStream(final ObjectOutput out) { - if (out instanceof OutputStream) { - return (OutputStream) out; - } - - return new OutputStream() { - @Override - public void write(final int value) throws IOException { - out.write(value); - } - }; - } - - @Override - public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException { - snapshotState = new ShardSnapshotState(ShardDataTreeSnapshot.deserialize(toInputStream(in))); - } - - private static InputStream toInputStream(final ObjectInput in) { - if (in instanceof InputStream) { - return (InputStream) in; - } - - return new InputStream() { - @Override - public int read() throws IOException { - return in.read(); - } - }; - } - - private Object readResolve() { - return snapshotState; - } - } - @SuppressFBWarnings(value = "SE_BAD_FIELD", justification = "This field is not Serializable but this class " + "implements writeReplace to delegate serialization to a Proxy class and thus instances of this class " + "aren't serialized. FindBugs does not recognize this.") - private final ShardDataTreeSnapshot snapshot; + private final @NonNull ShardDataTreeSnapshot snapshot; + private final boolean migrated; - public ShardSnapshotState(@Nonnull final ShardDataTreeSnapshot snapshot) { - this.snapshot = Preconditions.checkNotNull(snapshot); + @VisibleForTesting + public ShardSnapshotState(final @NonNull ShardDataTreeSnapshot snapshot, final boolean migrated) { + this.snapshot = requireNonNull(snapshot); + this.migrated = migrated; } - @Nonnull - public ShardDataTreeSnapshot getSnapshot() { + public ShardSnapshotState(final @NonNull ShardDataTreeSnapshot snapshot) { + this(snapshot, false); + } + + public @NonNull ShardDataTreeSnapshot getSnapshot() { return snapshot; } + @Override + public boolean needsMigration() { + return migrated; + } + + @java.io.Serial private Object writeReplace() { - return new Proxy(this); + return new SS(this); } }