From: Robert Varga Date: Wed, 29 May 2019 15:33:08 +0000 (+0200) Subject: Bump cds-access-api ABIVersion X-Git-Tag: release/sodium~70 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=b998131396132a7630f271f9baea225b45fde789;hp=5f540931c1f8972b59e51556b6cba14b2c8f3f40 Bump cds-access-api ABIVersion In order to take advantage of improvements to NormalizedNode stream, we need to declare a new ABI version, which will actually use the new stream version. JIRA: CONTROLLER-1888 Change-Id: I458a24586888e0b2fcc1c636e16d0b8e9e6e681f Signed-off-by: Robert Varga --- diff --git a/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/ABIVersion.java b/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/ABIVersion.java index 3eddf3eb56..bbea1a9655 100644 --- a/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/ABIVersion.java +++ b/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/ABIVersion.java @@ -15,6 +15,7 @@ import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeStreamVersion; import org.opendaylight.yangtools.concepts.WritableObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -32,19 +33,45 @@ public enum ABIVersion implements WritableObject { * Version which is older than any other version. This version exists purely for testing purposes. */ @VisibleForTesting - TEST_PAST_VERSION(0), + TEST_PAST_VERSION(0) { + @Override + public NormalizedNodeStreamVersion getStreamVersion() { + throw new UnsupportedOperationException(); + } + }, /** * Initial ABI version, as shipped with Boron Simultaneous release. */ // We seed the initial version to be the same as DataStoreVersions.BORON-VERSION for compatibility reasons. - BORON(5), + BORON(5) { + @Override + public NormalizedNodeStreamVersion getStreamVersion() { + return NormalizedNodeStreamVersion.LITHIUM; + } + }, + + /** + * Revised ABI version. The messages remain the same as {@link #BORON}, but messages bearing QNames in any shape + * are using {@link NormalizedNodeStreamVersion#SODIUM}, which improves encoding. + */ + SODIUM(6) { + @Override + public NormalizedNodeStreamVersion getStreamVersion() { + return NormalizedNodeStreamVersion.SODIUM; + } + }, /** * Version which is newer than any other version. This version exists purely for testing purposes. */ @VisibleForTesting - TEST_FUTURE_VERSION(65535); + TEST_FUTURE_VERSION(65535) { + @Override + public NormalizedNodeStreamVersion getStreamVersion() { + throw new UnsupportedOperationException(); + } + }; private static final Logger LOG = LoggerFactory.getLogger(ABIVersion.class); @@ -71,7 +98,7 @@ public enum ABIVersion implements WritableObject { * @return Current {@link ABIVersion} */ public static @NonNull ABIVersion current() { - return BORON; + return SODIUM; } /** @@ -93,8 +120,10 @@ public enum ABIVersion implements WritableObject { throw new PastVersionException(value, BORON); case 5: return BORON; + case 6: + return SODIUM; default: - throw new FutureVersionException(value, BORON); + throw new FutureVersionException(value, SODIUM); } } @@ -103,6 +132,13 @@ public enum ABIVersion implements WritableObject { out.writeShort(value); } + /** + * Return the NormalizedNode stream version corresponding to this particular ABI. + * + * @return Stream Version to use for this ABI version + */ + public abstract @NonNull NormalizedNodeStreamVersion getStreamVersion(); + /** * Read an {@link ABIVersion} from a {@link DataInput}. This method is provided for callers which do not have * a recovery strategy for dealing with unsupported versions. diff --git a/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/AbstractReadPathTransactionRequestProxyV1.java b/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/AbstractReadPathTransactionRequestProxyV1.java index bafa3d9083..16049fb9f1 100644 --- a/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/AbstractReadPathTransactionRequestProxyV1.java +++ b/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/AbstractReadPathTransactionRequestProxyV1.java @@ -14,6 +14,7 @@ import java.io.ObjectOutput; import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier; import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeDataOutput; import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeInputOutput; +import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeStreamVersion; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; /** @@ -27,7 +28,9 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; abstract class AbstractReadPathTransactionRequestProxyV1> extends AbstractReadTransactionRequestProxyV1 { private static final long serialVersionUID = 1L; + private YangInstanceIdentifier path; + private transient NormalizedNodeStreamVersion streamVersion; protected AbstractReadPathTransactionRequestProxyV1() { // For Externalizable @@ -36,12 +39,13 @@ abstract class AbstractReadPathTransactionRequestProxyV1 modifications; private Optional protocol; + private transient NormalizedNodeStreamVersion streamVersion; // checkstyle flags the public modifier as redundant however it is explicitly needed for Java serialization to // be able to create instances via reflection. @@ -41,8 +44,9 @@ final class ModifyTransactionRequestProxyV1 extends AbstractTransactionRequestPr ModifyTransactionRequestProxyV1(final ModifyTransactionRequest request) { super(request); - this.modifications = Preconditions.checkNotNull(request.getModifications()); + this.modifications = requireNonNull(request.getModifications()); this.protocol = request.getPersistenceProtocol(); + this.streamVersion = request.getVersion().getStreamVersion(); } @Override @@ -70,7 +74,7 @@ final class ModifyTransactionRequestProxyV1 extends AbstractTransactionRequestPr out.writeByte(PersistenceProtocol.byteValue(protocol.orElse(null))); out.writeInt(modifications.size()); if (!modifications.isEmpty()) { - try (NormalizedNodeDataOutput nnout = NormalizedNodeInputOutput.newDataOutput(out)) { + try (NormalizedNodeDataOutput nnout = NormalizedNodeInputOutput.newDataOutput(out, streamVersion)) { for (TransactionModification op : modifications) { op.writeTo(nnout); } diff --git a/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/ReadTransactionSuccessProxyV1.java b/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/ReadTransactionSuccessProxyV1.java index 24a305b31e..f755d3ef86 100644 --- a/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/ReadTransactionSuccessProxyV1.java +++ b/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/ReadTransactionSuccessProxyV1.java @@ -14,6 +14,7 @@ import java.util.Optional; import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier; import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeDataOutput; import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeInputOutput; +import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeStreamVersion; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; /** @@ -24,7 +25,9 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; */ final class ReadTransactionSuccessProxyV1 extends AbstractTransactionSuccessProxy { private static final long serialVersionUID = 1L; + private Optional> data; + private transient NormalizedNodeStreamVersion streamVersion; // checkstyle flags the public modifier as redundant however it is explicitly needed for Java serialization to // be able to create instances via reflection. @@ -36,6 +39,7 @@ final class ReadTransactionSuccessProxyV1 extends AbstractTransactionSuccessProx ReadTransactionSuccessProxyV1(final ReadTransactionSuccess request) { super(request); this.data = request.getData(); + this.streamVersion = request.getVersion().getStreamVersion(); } @Override @@ -44,7 +48,7 @@ final class ReadTransactionSuccessProxyV1 extends AbstractTransactionSuccessProx if (data.isPresent()) { out.writeBoolean(true); - try (NormalizedNodeDataOutput nnout = NormalizedNodeInputOutput.newDataOutput(out)) { + try (NormalizedNodeDataOutput nnout = NormalizedNodeInputOutput.newDataOutput(out, streamVersion)) { nnout.writeNormalizedNode(data.get()); } } else { diff --git a/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/Message.java b/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/Message.java index 2bc33cd1e4..252fe221d6 100644 --- a/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/Message.java +++ b/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/Message.java @@ -112,6 +112,7 @@ public abstract class Message { - - private static final LocalHistorySuccess OBJECT = new LocalHistorySuccess( - HISTORY_IDENTIFIER, 0); + private static final LocalHistorySuccess OBJECT = new LocalHistorySuccess(HISTORY_IDENTIFIER, 0); @Override protected LocalHistorySuccess object() { @@ -24,13 +24,13 @@ public class LocalHistorySuccessTest extends AbstractRequestSuccessTest { - private static final ModifyTransactionSuccess OBJECT = new ModifyTransactionSuccess( - TRANSACTION_IDENTIFIER, 0); + private static final ModifyTransactionSuccess OBJECT = new ModifyTransactionSuccess(TRANSACTION_IDENTIFIER, 0); @Override protected ModifyTransactionSuccess object() { @@ -23,13 +24,13 @@ public class ModifyTransactionSuccessTest extends AbstractTransactionSuccessTest @Test public void cloneAsVersionTest() { final ModifyTransactionSuccess clone = OBJECT.cloneAsVersion(ABIVersion.BORON); - Assert.assertEquals(OBJECT.getVersion(), clone.getVersion()); - Assert.assertEquals(OBJECT.getSequence(), clone.getSequence()); - Assert.assertEquals(OBJECT.getTarget(), clone.getTarget()); + assertEquals(ABIVersion.BORON, clone.getVersion()); + assertEquals(OBJECT.getSequence(), clone.getSequence()); + assertEquals(OBJECT.getTarget(), clone.getTarget()); } @Override protected void doAdditionalAssertions(final Object deserialize) { - Assert.assertTrue(deserialize instanceof ModifyTransactionSuccess); + assertTrue(deserialize instanceof ModifyTransactionSuccess); } } \ No newline at end of file