From 0f88bd70a92ec2b536b0633a6ba4e6733cee475d Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Fri, 2 Dec 2022 13:05:36 +0100 Subject: [PATCH] Switch to use PayloadVersion.CHLORINE_SR2 PayloadVersion.CHLORINE_SR2 is more efficient format, switch to using it and deprecate old versions for removal. JIRA: CONTROLLER-2056 Change-Id: Id05a34a28e4d3e817fc6ff783669493ee80af3b7 Signed-off-by: Robert Varga --- .../cluster/datastore/persisted/AT.java | 1 + .../persisted/AbortTransactionPayload.java | 28 ++++++++----- .../AbstractIdentifiablePayload.java | 9 +++-- ...bstractVersionedShardDataTreeSnapshot.java | 2 +- .../cluster/datastore/persisted/CH.java | 1 + .../cluster/datastore/persisted/CT.java | 1 + .../persisted/CloseLocalHistoryPayload.java | 28 ++++++++----- .../persisted/CommitTransactionPayload.java | 40 +++++++++++++++---- .../persisted/CreateLocalHistoryPayload.java | 28 ++++++++----- .../cluster/datastore/persisted/DH.java | 1 + .../cluster/datastore/persisted/DS.java | 1 + .../cluster/datastore/persisted/DSS.java | 1 + .../cluster/datastore/persisted/DT.java | 1 + .../persisted/DisableTrackingPayload.java | 27 ++++++++----- .../cluster/datastore/persisted/FM.java | 2 + .../cluster/datastore/persisted/MS.java | 2 + .../cluster/datastore/persisted/PH.java | 1 + .../cluster/datastore/persisted/PT.java | 1 + .../datastore/persisted/PayloadVersion.java | 4 +- .../persisted/PurgeLocalHistoryPayload.java | 28 ++++++++----- .../persisted/PurgeTransactionPayload.java | 28 ++++++++----- .../cluster/datastore/persisted/SM.java | 2 +- .../cluster/datastore/persisted/SS.java | 1 + .../cluster/datastore/persisted/ST.java | 1 + .../persisted/ShardManagerSnapshot.java | 39 ++++++++++++------ .../persisted/ShardSnapshotState.java | 10 ++--- .../persisted/SkipTransactionsPayload.java | 28 ++++++++----- .../AbortTransactionPayloadTest.java | 2 +- .../CloseLocalHistoryPayloadTest.java | 2 +- .../CommitTransactionPayloadTest.java | 2 +- .../CreateLocalHistoryPayloadTest.java | 2 +- .../PurgeLocalHistoryPayloadTest.java | 2 +- .../PurgeTransactionPayloadTest.java | 2 +- .../SkipTransactionsPayloadTest.java | 2 +- 34 files changed, 230 insertions(+), 100 deletions(-) diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/AT.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/AT.java index ddb9dc93e0..8002815c4a 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/AT.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/AT.java @@ -19,6 +19,7 @@ import org.opendaylight.controller.cluster.datastore.persisted.AbstractIdentifia * Serialization proxy for {@link AbortTransactionPayload}. */ final class AT implements SerialForm { + @java.io.Serial private static final long serialVersionUID = 1L; private TransactionIdentifier identifier; diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/AbortTransactionPayload.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/AbortTransactionPayload.java index 793f2ea062..5f398853fe 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/AbortTransactionPayload.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/AbortTransactionPayload.java @@ -12,6 +12,7 @@ import com.google.common.io.ByteStreams; import java.io.DataInput; import java.io.IOException; import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier; +import org.opendaylight.controller.cluster.raft.persisted.LegacySerializable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -20,8 +21,20 @@ import org.slf4j.LoggerFactory; * * @author Robert Varga */ -public final class AbortTransactionPayload extends AbstractIdentifiablePayload { +public sealed class AbortTransactionPayload extends AbstractIdentifiablePayload { + @Deprecated(since = "7.0.0", forRemoval = true) + private static final class Magnesium extends AbortTransactionPayload implements LegacySerializable { + @java.io.Serial + private static final long serialVersionUID = 1L; + + Magnesium(final TransactionIdentifier transactionId, final byte[] serialized) { + super(transactionId, serialized); + } + } + + @Deprecated(since = "7.0.0", forRemoval = true) private static final class Proxy extends AbstractProxy { + @java.io.Serial private static final long serialVersionUID = 1L; // checkstyle flags the public modifier as redundant which really doesn't make sense since it clearly isn't @@ -31,10 +44,6 @@ public final class AbortTransactionPayload extends AbstractIdentifiablePayload extends * * @return A payload. */ + @java.io.Serial Object readResolve(); /** @@ -87,7 +88,9 @@ public abstract class AbstractIdentifiablePayload extends } } + @Deprecated(since = "7.0.0", forRemoval = true) protected abstract static class AbstractProxy implements SerialForm { + @java.io.Serial private static final long serialVersionUID = 1L; private byte[] serialized; @@ -162,15 +165,15 @@ public abstract class AbstractIdentifiablePayload extends } @Override - protected final Object writeReplace() { + public final Object writeReplace() { return verifyNotNull(externalizableProxy(serialized)); } - protected abstract @NonNull AbstractProxy externalizableProxy(byte @NonNull[] serialized); + protected abstract @NonNull SerialForm externalizableProxy(byte @NonNull[] serialized); protected abstract int externalizableProxySize(); - protected static final int externalizableProxySize(final Function> constructor) { + protected static final int externalizableProxySize(final Function constructor) { return SerializationUtils.serialize(constructor.apply(new byte[0])).length; } } 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 be38f29b44..2d36ead727 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 @@ -32,8 +32,8 @@ abstract class AbstractVersionedShardDataTreeSnapshot extends ShardDataTreeSnaps final PayloadVersion version = PayloadVersion.readFrom(in); switch (version) { case SODIUM_SR1: - return new ShardSnapshotState(readSnapshot(in), true); case MAGNESIUM: + return new ShardSnapshotState(readSnapshot(in), true); case CHLORINE_SR2: return new ShardSnapshotState(readSnapshot(in), false); case TEST_FUTURE_VERSION: diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/CH.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/CH.java index b4e827b403..a0af84139a 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/CH.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/CH.java @@ -19,6 +19,7 @@ import org.opendaylight.controller.cluster.datastore.persisted.AbstractIdentifia * Serialization proxy for {@link CreateLocalHistoryPayload}. */ final class CH implements SerialForm { + @java.io.Serial private static final long serialVersionUID = 1L; private LocalHistoryIdentifier identifier; diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/CT.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/CT.java index 98c2562f0b..972ba1d067 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/CT.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/CT.java @@ -23,6 +23,7 @@ import org.opendaylight.controller.cluster.io.ChunkedByteArray; * Serialization proxy for {@link CommitTransactionPayload}. */ final class CT implements Externalizable { + @java.io.Serial private static final long serialVersionUID = 1L; private CommitTransactionPayload payload; diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/CloseLocalHistoryPayload.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/CloseLocalHistoryPayload.java index c592513673..ada468f314 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/CloseLocalHistoryPayload.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/CloseLocalHistoryPayload.java @@ -12,6 +12,7 @@ import com.google.common.io.ByteStreams; import java.io.DataInput; import java.io.IOException; import org.opendaylight.controller.cluster.access.concepts.LocalHistoryIdentifier; +import org.opendaylight.controller.cluster.raft.persisted.LegacySerializable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -20,8 +21,20 @@ import org.slf4j.LoggerFactory; * * @author Robert Varga */ -public final class CloseLocalHistoryPayload extends AbstractIdentifiablePayload { +public sealed class CloseLocalHistoryPayload extends AbstractIdentifiablePayload { + @Deprecated(since = "7.0.0", forRemoval = true) + private static final class Magnesium extends CloseLocalHistoryPayload implements LegacySerializable { + @java.io.Serial + private static final long serialVersionUID = 1L; + + Magnesium(final LocalHistoryIdentifier historyId, final byte[] serialized) { + super(historyId, serialized); + } + } + + @Deprecated(since = "7.0.0", forRemoval = true) private static final class Proxy extends AbstractProxy { + @java.io.Serial private static final long serialVersionUID = 1L; // checkstyle flags the public modifier as redundant which really doesn't make sense since it clearly isn't @@ -31,10 +44,6 @@ public final class CloseLocalHistoryPayload extends AbstractIdentifiablePayload< // For Externalizable } - Proxy(final byte[] serialized) { - super(serialized); - } - @Override protected LocalHistoryIdentifier readIdentifier(final DataInput in) throws IOException { return LocalHistoryIdentifier.readFrom(in); @@ -43,13 +52,14 @@ public final class CloseLocalHistoryPayload extends AbstractIdentifiablePayload< @Override protected CloseLocalHistoryPayload createObject(final LocalHistoryIdentifier identifier, final byte[] serialized) { - return new CloseLocalHistoryPayload(identifier, serialized); + return new Magnesium(identifier, serialized); } } private static final Logger LOG = LoggerFactory.getLogger(CloseLocalHistoryPayload.class); + @java.io.Serial private static final long serialVersionUID = 1L; - private static final int PROXY_SIZE = externalizableProxySize(Proxy::new); + private static final int PROXY_SIZE = externalizableProxySize(CH::new); CloseLocalHistoryPayload(final LocalHistoryIdentifier historyId, final byte[] serialized) { super(historyId, serialized); @@ -69,8 +79,8 @@ public final class CloseLocalHistoryPayload extends AbstractIdentifiablePayload< } @Override - protected Proxy externalizableProxy(final byte[] serialized) { - return new Proxy(serialized); + protected DH externalizableProxy(final byte[] serialized) { + return new DH(serialized); } @Override diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/CommitTransactionPayload.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/CommitTransactionPayload.java index cb261a2b19..4cbe151a6d 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/CommitTransactionPayload.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/CommitTransactionPayload.java @@ -34,6 +34,7 @@ import org.opendaylight.controller.cluster.datastore.persisted.DataTreeCandidate import org.opendaylight.controller.cluster.io.ChunkedByteArray; import org.opendaylight.controller.cluster.io.ChunkedOutputStream; import org.opendaylight.controller.cluster.raft.messages.IdentifiablePayload; +import org.opendaylight.controller.cluster.raft.persisted.LegacySerializable; import org.opendaylight.yangtools.concepts.Either; import org.opendaylight.yangtools.yang.data.api.schema.stream.ReusableStreamReceiver; import org.opendaylight.yangtools.yang.data.impl.schema.ReusableImmutableNormalizedNodeStreamWriter; @@ -149,11 +150,12 @@ public abstract sealed class CommitTransactionPayload extends IdentifiablePayloa abstract DataInput newDataInput(); @Override - protected final Object writeReplace() { - return new Proxy(this); + public final Object writeReplace() { + return new CT(this); } - static final class Simple extends CommitTransactionPayload { + static sealed class Simple extends CommitTransactionPayload { + @java.io.Serial private static final long serialVersionUID = 1L; private final byte[] serialized; @@ -178,7 +180,8 @@ public abstract sealed class CommitTransactionPayload extends IdentifiablePayloa } } - static final class Chunked extends CommitTransactionPayload { + static sealed class Chunked extends CommitTransactionPayload { + @java.io.Serial private static final long serialVersionUID = 1L; @SuppressFBWarnings(value = "SE_BAD_FIELD", justification = "Handled via serialization proxy") @@ -206,14 +209,36 @@ public abstract sealed class CommitTransactionPayload extends IdentifiablePayloa // Exists to break initialization dependency between CommitTransactionPayload/Simple/Proxy private static final class ProxySizeHolder { - static final int PROXY_SIZE = SerializationUtils.serialize(new Proxy(new Simple(new byte[0]))).length; + static final int PROXY_SIZE = SerializationUtils.serialize(new CT(new Simple(new byte[0]))).length; private ProxySizeHolder() { // Hidden on purpose } } + @Deprecated(since = "7.0.0", forRemoval = true) + private static final class SimpleMagnesium extends Simple implements LegacySerializable { + @java.io.Serial + private static final long serialVersionUID = 1L; + + SimpleMagnesium(final byte[] serialized) { + super(serialized); + } + } + + @Deprecated(since = "7.0.0", forRemoval = true) + private static final class ChunkedMagnesium extends Chunked implements LegacySerializable { + @java.io.Serial + private static final long serialVersionUID = 1L; + + ChunkedMagnesium(final ChunkedByteArray source) { + super(source); + } + } + + @Deprecated(since = "7.0.0", forRemoval = true) private static final class Proxy implements Externalizable { + @java.io.Serial private static final long serialVersionUID = 1L; private CommitTransactionPayload payload; @@ -243,12 +268,13 @@ public abstract sealed class CommitTransactionPayload extends IdentifiablePayloa } else if (length < MAX_ARRAY_SIZE) { final byte[] serialized = new byte[length]; in.readFully(serialized); - payload = new Simple(serialized); + payload = new SimpleMagnesium(serialized); } else { - payload = new Chunked(ChunkedByteArray.readFrom(in, length, MAX_ARRAY_SIZE)); + payload = new ChunkedMagnesium(ChunkedByteArray.readFrom(in, length, MAX_ARRAY_SIZE)); } } + @java.io.Serial private Object readResolve() { return verifyNotNull(payload); } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/CreateLocalHistoryPayload.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/CreateLocalHistoryPayload.java index 65f0e5d098..c0be946408 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/CreateLocalHistoryPayload.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/CreateLocalHistoryPayload.java @@ -12,6 +12,7 @@ import com.google.common.io.ByteStreams; import java.io.DataInput; import java.io.IOException; import org.opendaylight.controller.cluster.access.concepts.LocalHistoryIdentifier; +import org.opendaylight.controller.cluster.raft.persisted.LegacySerializable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -20,8 +21,20 @@ import org.slf4j.LoggerFactory; * * @author Robert Varga */ -public final class CreateLocalHistoryPayload extends AbstractIdentifiablePayload { +public sealed class CreateLocalHistoryPayload extends AbstractIdentifiablePayload { + @Deprecated(since = "7.0.0", forRemoval = true) + private static final class Magnesium extends CreateLocalHistoryPayload implements LegacySerializable { + @java.io.Serial + private static final long serialVersionUID = 1L; + + Magnesium(final LocalHistoryIdentifier historyId, final byte[] serialized) { + super(historyId, serialized); + } + } + + @Deprecated(since = "7.0.0", forRemoval = true) private static final class Proxy extends AbstractProxy { + @java.io.Serial private static final long serialVersionUID = 1L; // checkstyle flags the public modifier as redundant which really doesn't make sense since it clearly isn't @@ -31,10 +44,6 @@ public final class CreateLocalHistoryPayload extends AbstractIdentifiablePayload // For Externalizable } - Proxy(final byte[] serialized) { - super(serialized); - } - @Override protected LocalHistoryIdentifier readIdentifier(final DataInput in) throws IOException { return LocalHistoryIdentifier.readFrom(in); @@ -43,13 +52,14 @@ public final class CreateLocalHistoryPayload extends AbstractIdentifiablePayload @Override protected CreateLocalHistoryPayload createObject(final LocalHistoryIdentifier identifier, final byte[] serialized) { - return new CreateLocalHistoryPayload(identifier, serialized); + return new Magnesium(identifier, serialized); } } private static final Logger LOG = LoggerFactory.getLogger(CreateLocalHistoryPayload.class); + @java.io.Serial private static final long serialVersionUID = 1L; - private static final int PROXY_SIZE = externalizableProxySize(Proxy::new); + private static final int PROXY_SIZE = externalizableProxySize(CH::new); CreateLocalHistoryPayload(final LocalHistoryIdentifier historyId, final byte[] serialized) { super(historyId, serialized); @@ -69,8 +79,8 @@ public final class CreateLocalHistoryPayload extends AbstractIdentifiablePayload } @Override - protected Proxy externalizableProxy(final byte[] serialized) { - return new Proxy(serialized); + protected CH externalizableProxy(final byte[] serialized) { + return new CH(serialized); } @Override diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DH.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DH.java index a9c6c63491..4ce29b1042 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DH.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DH.java @@ -19,6 +19,7 @@ import org.opendaylight.controller.cluster.datastore.persisted.AbstractIdentifia * Serialization proxy for {@link CloseLocalHistoryPayload}. */ final class DH implements SerialForm { + @java.io.Serial private static final long serialVersionUID = 1L; private LocalHistoryIdentifier identifier; diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DS.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DS.java index 5dc365483b..894600adf1 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DS.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DS.java @@ -14,6 +14,7 @@ import static java.util.Objects.requireNonNull; * Serialization proxy for {@link DatastoreSnapshot}. */ final class DS implements DatastoreSnapshot.SerialForm { + @java.io.Serial private static final long serialVersionUID = 1L; private DatastoreSnapshot datastoreSnapshot; diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DSS.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DSS.java index 074706b1ff..5d6ea922cc 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DSS.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DSS.java @@ -17,6 +17,7 @@ import org.opendaylight.controller.cluster.raft.persisted.Snapshot; * Serialization proxy for {@link ShardDataTreeSnapshot}. */ final class DSS implements ShardSnapshot.SerialForm { + @java.io.Serial private static final long serialVersionUID = 1L; private ShardSnapshot shardSnapshot; diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DT.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DT.java index 8a619f64fa..cc1a9487ef 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DT.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DT.java @@ -19,6 +19,7 @@ import org.opendaylight.controller.cluster.datastore.persisted.AbstractIdentifia * Serialization proxy for {@link DisableTrackingPayload}. */ final class DT implements SerialForm { + @java.io.Serial private static final long serialVersionUID = 1L; private ClientIdentifier identifier; diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DisableTrackingPayload.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DisableTrackingPayload.java index 318df05d92..b531174576 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DisableTrackingPayload.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DisableTrackingPayload.java @@ -12,10 +12,22 @@ import com.google.common.io.ByteStreams; import java.io.DataInput; import java.io.IOException; import org.opendaylight.controller.cluster.access.concepts.ClientIdentifier; +import org.opendaylight.controller.cluster.raft.persisted.LegacySerializable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public final class DisableTrackingPayload extends AbstractIdentifiablePayload { +public sealed class DisableTrackingPayload extends AbstractIdentifiablePayload { + @Deprecated(since = "7.0.0", forRemoval = true) + private static final class Magnesium extends DisableTrackingPayload implements LegacySerializable { + @java.io.Serial + private static final long serialVersionUID = 1L; + + Magnesium(final ClientIdentifier clientId, final byte[] serialized) { + super(clientId, serialized); + } + } + + @Deprecated(since = "7.0.0", forRemoval = true) private static final class Proxy extends AbstractProxy { @java.io.Serial private static final long serialVersionUID = -5490519942445085251L; @@ -25,10 +37,6 @@ public final class DisableTrackingPayload extends AbstractIdentifiablePayload clients; @@ -49,6 +50,7 @@ final class FM implements Externalizable { clients = builder.build(); } + @java.io.Serial private Object readResolve() { return new FrontendShardDataTreeSnapshotMetadata(clients); } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/MS.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/MS.java index 7246e503db..94cd695c5c 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/MS.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/MS.java @@ -26,6 +26,7 @@ import org.slf4j.LoggerFactory; */ final class MS implements Externalizable { private static final Logger LOG = LoggerFactory.getLogger(MS.class); + @java.io.Serial private static final long serialVersionUID = 1L; private Map>, ShardDataTreeSnapshotMetadata> metadata; @@ -77,6 +78,7 @@ final class MS implements Externalizable { rootNode = stream.readNormalizedNode(); } + @java.io.Serial private Object readResolve() { return new MetadataShardDataTreeSnapshot(rootNode, metadata); } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/PH.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/PH.java index 028d1508da..dc95e31a4e 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/PH.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/PH.java @@ -19,6 +19,7 @@ import org.opendaylight.controller.cluster.datastore.persisted.AbstractIdentifia * Serialization proxy for {@link PurgeLocalHistoryPayload}. */ final class PH implements SerialForm { + @java.io.Serial private static final long serialVersionUID = 1L; private LocalHistoryIdentifier identifier; diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/PT.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/PT.java index 23bd12b1fa..8ea773fb48 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/PT.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/PT.java @@ -19,6 +19,7 @@ import org.opendaylight.controller.cluster.datastore.persisted.AbstractIdentifia * Serialization proxy for {@link PurgeTransactionPayload}. */ final class PT implements SerialForm { + @java.io.Serial private static final long serialVersionUID = 1L; private TransactionIdentifier identifier; diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/PayloadVersion.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/PayloadVersion.java index 4eb5ad6c37..14b8951806 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/PayloadVersion.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/PayloadVersion.java @@ -53,6 +53,7 @@ public enum PayloadVersion implements WritableObject { * ABI version as shipped in Sodium SR1 Simultaneous Release. QName-bearing messages are using * {@link NormalizedNodeStreamVersion#SODIUM_SR1}, which improves encoding. */ + @Deprecated(since = "7.0.0", forRemoval = true) SODIUM_SR1(7) { @Override public NormalizedNodeStreamVersion getStreamVersion() { @@ -64,6 +65,7 @@ public enum PayloadVersion implements WritableObject { * Revised payload version. Payloads remain the same as {@link #SODIUM_SR1}, but messages bearing QNames in any * shape are using {@link NormalizedNodeStreamVersion#MAGNESIUM}, which improves encoding. */ + @Deprecated(since = "7.0.0", forRemoval = true) MAGNESIUM(8) { @Override public NormalizedNodeStreamVersion getStreamVersion() { @@ -123,7 +125,7 @@ public enum PayloadVersion implements WritableObject { * @return Current {@link PayloadVersion} */ public static @NonNull PayloadVersion current() { - return MAGNESIUM; + return CHLORINE_SR2; } /** diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/PurgeLocalHistoryPayload.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/PurgeLocalHistoryPayload.java index d440910943..a9e4557ece 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/PurgeLocalHistoryPayload.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/PurgeLocalHistoryPayload.java @@ -12,6 +12,7 @@ import com.google.common.io.ByteStreams; import java.io.DataInput; import java.io.IOException; import org.opendaylight.controller.cluster.access.concepts.LocalHistoryIdentifier; +import org.opendaylight.controller.cluster.raft.persisted.LegacySerializable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,8 +22,20 @@ import org.slf4j.LoggerFactory; * * @author Robert Varga */ -public final class PurgeLocalHistoryPayload extends AbstractIdentifiablePayload { +public sealed class PurgeLocalHistoryPayload extends AbstractIdentifiablePayload { + @Deprecated(since = "7.0.0", forRemoval = true) + private static final class Magnesium extends PurgeLocalHistoryPayload implements LegacySerializable { + @java.io.Serial + private static final long serialVersionUID = 1L; + + Magnesium(final LocalHistoryIdentifier historyId, final byte[] serialized) { + super(historyId, serialized); + } + } + + @Deprecated(since = "7.0.0", forRemoval = true) private static final class Proxy extends AbstractProxy { + @java.io.Serial private static final long serialVersionUID = 1L; // checkstyle flags the public modifier as redundant which really doesn't make sense since it clearly isn't @@ -32,10 +45,6 @@ public final class PurgeLocalHistoryPayload extends AbstractIdentifiablePayload< // For Externalizable } - Proxy(final byte[] serialized) { - super(serialized); - } - @Override protected LocalHistoryIdentifier readIdentifier(final DataInput in) throws IOException { return LocalHistoryIdentifier.readFrom(in); @@ -44,13 +53,14 @@ public final class PurgeLocalHistoryPayload extends AbstractIdentifiablePayload< @Override protected PurgeLocalHistoryPayload createObject(final LocalHistoryIdentifier identifier, final byte[] serialized) { - return new PurgeLocalHistoryPayload(identifier, serialized); + return new Magnesium(identifier, serialized); } } private static final Logger LOG = LoggerFactory.getLogger(PurgeLocalHistoryPayload.class); + @java.io.Serial private static final long serialVersionUID = 1L; - private static final int PROXY_SIZE = externalizableProxySize(Proxy::new); + private static final int PROXY_SIZE = externalizableProxySize(PH::new); PurgeLocalHistoryPayload(final LocalHistoryIdentifier historyId, final byte[] serialized) { super(historyId, serialized); @@ -70,8 +80,8 @@ public final class PurgeLocalHistoryPayload extends AbstractIdentifiablePayload< } @Override - protected Proxy externalizableProxy(final byte[] serialized) { - return new Proxy(serialized); + protected PH externalizableProxy(final byte[] serialized) { + return new PH(serialized); } @Override diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/PurgeTransactionPayload.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/PurgeTransactionPayload.java index f3c094c0dd..4d5d2d742c 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/PurgeTransactionPayload.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/PurgeTransactionPayload.java @@ -12,6 +12,7 @@ import com.google.common.io.ByteStreams; import java.io.DataInput; import java.io.IOException; import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier; +import org.opendaylight.controller.cluster.raft.persisted.LegacySerializable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -20,8 +21,20 @@ import org.slf4j.LoggerFactory; * * @author Robert Varga */ -public final class PurgeTransactionPayload extends AbstractIdentifiablePayload { +public sealed class PurgeTransactionPayload extends AbstractIdentifiablePayload { + @Deprecated(since = "7.0.0", forRemoval = true) + private static final class Magnesium extends PurgeTransactionPayload implements LegacySerializable { + @java.io.Serial + private static final long serialVersionUID = 1L; + + Magnesium(final TransactionIdentifier transactionId, final byte[] serialized) { + super(transactionId, serialized); + } + } + + @Deprecated(since = "7.0.0", forRemoval = true) private static final class Proxy extends AbstractProxy { + @java.io.Serial private static final long serialVersionUID = 1L; // checkstyle flags the public modifier as redundant which really doesn't make sense since it clearly isn't @@ -31,10 +44,6 @@ public final class PurgeTransactionPayload extends AbstractIdentifiablePayload shardList) { + super(shardList); + } + + @Override + public boolean isMigrated() { + return true; + } + } + + @Deprecated(since = "7.0.0", forRemoval = true) private static final class Proxy implements SerializedForm { + @java.io.Serial private static final long serialVersionUID = 1L; - private ShardManagerSnapshot snapshot; + private ShardManagerSnapshot snapshot = null; // 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. @@ -81,10 +98,6 @@ public final class ShardManagerSnapshot implements Serializable { // For Externalizable } - Proxy(final ShardManagerSnapshot snapshot) { - this.snapshot = snapshot; - } - @Override public List shardNames() { return snapshot.getShardList(); @@ -97,10 +110,11 @@ public final class ShardManagerSnapshot implements Serializable { @Override public Object readResolve() { - return verifyNotNull(snapshot); + return new Magnesium(snapshot.getShardList()); } } + @java.io.Serial private static final long serialVersionUID = 1L; private final List shardList; @@ -109,16 +123,17 @@ public final class ShardManagerSnapshot implements Serializable { this.shardList = ImmutableList.copyOf(shardList); } - public List getShardList() { + public final List getShardList() { return shardList; } - private Object writeReplace() { - return new Proxy(this); + @java.io.Serial + public final Object writeReplace() { + return new SM(this); } @Override - public String toString() { + public final String toString() { return "ShardManagerSnapshot [ShardList = " + shardList + " ]"; } } 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 3f0b748676..90275c19a6 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 @@ -44,7 +44,9 @@ public final class ShardSnapshotState implements Snapshot.State { } } + @Deprecated(since = "7.0.0", forRemoval = true) private static final class Proxy implements SerialForm { + @java.io.Serial private static final long serialVersionUID = 1L; private ShardSnapshotState snapshotState; @@ -56,10 +58,6 @@ public final class ShardSnapshotState implements Snapshot.State { // For Externalizable } - Proxy(final ShardSnapshotState snapshotState) { - this.snapshotState = snapshotState; - } - @Override public ShardSnapshotState snapshotState() { return snapshotState; @@ -76,6 +74,7 @@ public final class ShardSnapshotState implements Snapshot.State { } } + @java.io.Serial private static final long serialVersionUID = 1L; @SuppressFBWarnings(value = "SE_BAD_FIELD", justification = "This field is not Serializable but this class " @@ -103,7 +102,8 @@ public final class ShardSnapshotState implements Snapshot.State { return migrated; } + @java.io.Serial private Object writeReplace() { - return new Proxy(this); + return new SS(this); } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/SkipTransactionsPayload.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/SkipTransactionsPayload.java index a3f7af99f0..085774592b 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/SkipTransactionsPayload.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/SkipTransactionsPayload.java @@ -17,6 +17,7 @@ import java.io.IOException; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.controller.cluster.access.concepts.LocalHistoryIdentifier; import org.opendaylight.controller.cluster.datastore.utils.ImmutableUnsignedLongSet; +import org.opendaylight.controller.cluster.raft.persisted.LegacySerializable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,8 +26,20 @@ import org.slf4j.LoggerFactory; * for other purposes. It contains a {@link LocalHistoryIdentifier} and a list of transaction identifiers within that * local history. */ -public final class SkipTransactionsPayload extends AbstractIdentifiablePayload { +public sealed class SkipTransactionsPayload extends AbstractIdentifiablePayload { + private static final class Magnesium extends SkipTransactionsPayload implements LegacySerializable { + @java.io.Serial + private static final long serialVersionUID = 1L; + + Magnesium(final LocalHistoryIdentifier historyId, final byte[] serialized, + final ImmutableUnsignedLongSet transactionIds) { + super(historyId, serialized, transactionIds); + } + } + + @Deprecated(since = "7.0.0", forRemoval = true) private static final class Proxy extends AbstractProxy { + @java.io.Serial private static final long serialVersionUID = 1L; private ImmutableUnsignedLongSet transactionIds; @@ -38,10 +51,6 @@ public final class SkipTransactionsPayload extends AbstractIdentifiablePayload { public AbortTransactionPayloadTest() { - super(AbortTransactionPayload.create(newTransactionId(0), 512), 264); + super(AbortTransactionPayload.create(newTransactionId(0), 512), 125); } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/CloseLocalHistoryPayloadTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/CloseLocalHistoryPayloadTest.java index d816979088..071914bfc9 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/CloseLocalHistoryPayloadTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/CloseLocalHistoryPayloadTest.java @@ -9,6 +9,6 @@ package org.opendaylight.controller.cluster.datastore.persisted; public class CloseLocalHistoryPayloadTest extends AbstractIdentifiablePayloadTest { public CloseLocalHistoryPayloadTest() { - super(CloseLocalHistoryPayload.create(newHistoryId(0), 512), 264); + super(CloseLocalHistoryPayload.create(newHistoryId(0), 512), 124); } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/CommitTransactionPayloadTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/CommitTransactionPayloadTest.java index c5b8bab068..6b2367458f 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/CommitTransactionPayloadTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/CommitTransactionPayloadTest.java @@ -108,7 +108,7 @@ public class CommitTransactionPayloadTest extends AbstractTest { public void testCandidateSerialization() throws IOException { final CommitTransactionPayload payload = CommitTransactionPayload.create(nextTransactionId(), candidate); assertEquals("payload size", 156, payload.size()); - assertEquals("serialized size", 270, SerializationUtils.serialize(payload).length); + assertEquals("serialized size", 242, SerializationUtils.serialize(payload).length); } @Test diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/CreateLocalHistoryPayloadTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/CreateLocalHistoryPayloadTest.java index 7c0891e6f5..8394181229 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/CreateLocalHistoryPayloadTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/CreateLocalHistoryPayloadTest.java @@ -9,6 +9,6 @@ package org.opendaylight.controller.cluster.datastore.persisted; public class CreateLocalHistoryPayloadTest extends AbstractIdentifiablePayloadTest { public CreateLocalHistoryPayloadTest() { - super(CreateLocalHistoryPayload.create(newHistoryId(0), 512), 265); + super(CreateLocalHistoryPayload.create(newHistoryId(0), 512), 124); } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/PurgeLocalHistoryPayloadTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/PurgeLocalHistoryPayloadTest.java index 99c188ddd8..cca2220413 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/PurgeLocalHistoryPayloadTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/PurgeLocalHistoryPayloadTest.java @@ -9,6 +9,6 @@ package org.opendaylight.controller.cluster.datastore.persisted; public class PurgeLocalHistoryPayloadTest extends AbstractIdentifiablePayloadTest { public PurgeLocalHistoryPayloadTest() { - super(PurgeLocalHistoryPayload.create(newHistoryId(0), 512), 264); + super(PurgeLocalHistoryPayload.create(newHistoryId(0), 512), 124); } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/PurgeTransactionPayloadTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/PurgeTransactionPayloadTest.java index fad6205e16..cfae341829 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/PurgeTransactionPayloadTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/PurgeTransactionPayloadTest.java @@ -9,6 +9,6 @@ package org.opendaylight.controller.cluster.datastore.persisted; public class PurgeTransactionPayloadTest extends AbstractIdentifiablePayloadTest { public PurgeTransactionPayloadTest() { - super(PurgeTransactionPayload.create(newTransactionId(0), 512), 264); + super(PurgeTransactionPayload.create(newTransactionId(0), 512), 125); } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/SkipTransactionsPayloadTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/SkipTransactionsPayloadTest.java index 39df133c8a..818c18908d 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/SkipTransactionsPayloadTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/SkipTransactionsPayloadTest.java @@ -11,6 +11,6 @@ import org.opendaylight.controller.cluster.datastore.utils.MutableUnsignedLongSe public class SkipTransactionsPayloadTest extends AbstractIdentifiablePayloadTest { public SkipTransactionsPayloadTest() { - super(SkipTransactionsPayload.create(newHistoryId(0), MutableUnsignedLongSet.of(42).immutableCopy(), 512), 270); + super(SkipTransactionsPayload.create(newHistoryId(0), MutableUnsignedLongSet.of(42).immutableCopy(), 512), 131); } } -- 2.36.6