X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fpersisted%2FAbstractVersionedShardDataTreeSnapshot.java;h=5e85434e4aa38bba477a3b64bc470a961be317f8;hb=1d5ca4009be6c61d7b61989799037ad8f1ab7a75;hp=c12403f81913f4b372c5e9ccfc533ebc7be5d6d6;hpb=aafb8cb044e992dd784d1f4f66508599cc4cd588;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/AbstractVersionedShardDataTreeSnapshot.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/AbstractVersionedShardDataTreeSnapshot.java index c12403f819..5e85434e4a 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/AbstractVersionedShardDataTreeSnapshot.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/AbstractVersionedShardDataTreeSnapshot.java @@ -7,14 +7,13 @@ */ package org.opendaylight.controller.cluster.datastore.persisted; -import com.google.common.base.Verify; -import java.io.DataInputStream; +import static com.google.common.base.Verify.verifyNotNull; + import java.io.IOException; import java.io.ObjectInput; -import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.util.Optional; -import javax.annotation.Nonnull; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,57 +28,35 @@ abstract class AbstractVersionedShardDataTreeSnapshot extends ShardDataTreeSnaps private static final Logger LOG = LoggerFactory.getLogger(AbstractVersionedShardDataTreeSnapshot.class); @SuppressWarnings("checkstyle:FallThrough") - @Deprecated - static ShardDataTreeSnapshot deserializePreCarbon(final DataInputStream is) throws IOException { - final PayloadVersion version = PayloadVersion.readFrom(is); + static @NonNull ShardSnapshotState versionedDeserialize(final ObjectInput in) throws IOException { + final PayloadVersion version = PayloadVersion.readFrom(in); switch (version) { - case BORON: - // Boron snapshots use Java Serialization - try (ObjectInputStream ois = new ObjectInputStream(is)) { - return (ShardDataTreeSnapshot) ois.readObject(); - } catch (ClassNotFoundException e) { - LOG.error("Failed to serialize data tree snapshot", e); - throw new IOException("Snapshot failed to deserialize", e); - } + case SODIUM_SR1: + return new ShardSnapshotState(readSnapshot(in), true); + case MAGNESIUM: + return new ShardSnapshotState(readSnapshot(in), false); case TEST_FUTURE_VERSION: case TEST_PAST_VERSION: // These versions are never returned and this code is effectively dead - break; default: - throw new IOException("Invalid payload version in snapshot"); + // Not included as default in above switch to ensure we get warnings when new versions are added + throw new IOException("Encountered unhandled version " + version); } - - // Not included as default in above switch to ensure we get warnings when new versions are added - throw new IOException("Encountered unhandled version" + version); } - @SuppressWarnings("checkstyle:FallThrough") - static ShardDataTreeSnapshot versionedDeserialize(final ObjectInput in) throws IOException { - final PayloadVersion version = PayloadVersion.readFrom(in); - switch (version) { - case BORON: - // Boron snapshots use Java Serialization - try { - return (ShardDataTreeSnapshot) in.readObject(); - } catch (ClassNotFoundException e) { - LOG.error("Failed to serialize data tree snapshot", e); - throw new IOException("Snapshot failed to deserialize", e); - } - case TEST_FUTURE_VERSION: - case TEST_PAST_VERSION: - // These versions are never returned and this code is effectively dead - break; - default: - throw new IOException("Invalid payload version in snapshot"); + // Boron and Sodium snapshots use Java Serialization, but differ in stream format + private static @NonNull ShardDataTreeSnapshot readSnapshot(final ObjectInput in) throws IOException { + try { + return (ShardDataTreeSnapshot) in.readObject(); + } catch (ClassNotFoundException e) { + LOG.error("Failed to serialize data tree snapshot", e); + throw new IOException("Snapshot failed to deserialize", e); } - - // Not included as default in above switch to ensure we get warnings when new versions are added - throw new IOException("Encountered unhandled version" + version); } @Override - public final Optional> getRootNode() { - return Optional.of(Verify.verifyNotNull(rootNode(), "Snapshot %s returned non-present root node", getClass())); + public final Optional getRootNode() { + return Optional.of(verifyNotNull(rootNode(), "Snapshot %s returned non-present root node", getClass())); } /** @@ -87,21 +64,20 @@ abstract class AbstractVersionedShardDataTreeSnapshot extends ShardDataTreeSnaps * * @return The root node. */ - @Nonnull - abstract NormalizedNode rootNode(); + abstract @NonNull NormalizedNode rootNode(); /** * Return the snapshot payload version. Implementations of this method should return a constant. * * @return Snapshot payload version */ - @Nonnull - abstract PayloadVersion version(); + abstract @NonNull PayloadVersion version(); private void versionedSerialize(final ObjectOutput out, final PayloadVersion version) throws IOException { switch (version) { - case BORON: - // Boron snapshots use Java Serialization + case SODIUM_SR1: + case MAGNESIUM: + // Sodium and Magnesium snapshots use Java Serialization, but differ in stream format out.writeObject(this); return; case TEST_FUTURE_VERSION: