Switch default output stream version 13/82313/27
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 29 May 2019 16:17:13 +0000 (18:17 +0200)
committerTom Pantelis <tompantelis@gmail.com>
Sat, 8 Jun 2019 01:16:35 +0000 (01:16 +0000)
All versioned callers have been converted to use appropriate
stream versions, this patch bumps the default unversioned stream
to Sodium version.

Since we're changing the serialization format for ExecuteRpc,
make sure we fully embrace writer/reader, so that we get better
instantiation.

JIRA: CONTROLLER-1888
Change-Id: I17deeda1a49394600a5b0f93bd46d3b2c812123c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/AbstractNormalizedNodeDataOutput.java
opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/ForwardingNormalizedNodeDataInput.java
opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/LithiumNormalizedNodeInputStreamReader.java
opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/LithiumNormalizedNodeOutputStreamWriter.java
opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeDataInput.java
opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeDataOutput.java
opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeOutputStreamWriter.java
opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/SodiumNormalizedNodeInputStreamReader.java
opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/SodiumNormalizedNodeOutputStreamWriter.java
opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/messages/ExecuteRpc.java

index 002781a9b3e783bf07ec3a566223962cb8958d16..447a588a10239f1b33a8665664829e1d4d92951d 100755 (executable)
@@ -60,8 +60,6 @@ abstract class AbstractNormalizedNodeDataOutput implements NormalizedNodeDataOut
 
     protected abstract short streamVersion();
 
 
     protected abstract short streamVersion();
 
-    protected abstract void writeQName(QName qname) throws IOException;
-
     protected abstract void writeString(String string) throws IOException;
 
     @Override
     protected abstract void writeString(String string) throws IOException;
 
     @Override
index 97beda38aa945abc2c5d079db34c23663e0aa054..cc28b03e65dab969738caf9cda854396fd577c74 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.controller.cluster.datastore.node.utils.stream;
 
 import java.io.IOException;
 import org.eclipse.jdt.annotation.NonNull;
 
 import java.io.IOException;
 import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -29,6 +30,11 @@ abstract class ForwardingNormalizedNodeDataInput extends ForwardingDataInput imp
         return delegate().readYangInstanceIdentifier();
     }
 
         return delegate().readYangInstanceIdentifier();
     }
 
+    @Override
+    public final QName readQName() throws IOException {
+        return delegate().readQName();
+    }
+
     @Override
     public final PathArgument readPathArgument() throws IOException {
         return delegate().readPathArgument();
     @Override
     public final PathArgument readPathArgument() throws IOException {
         return delegate().readPathArgument();
index 1484f735d03c71539b11a61e641d3e78b96fc1f4..1a0d6dd94bcb13a65549137bfca16b8a1c7cdf83 100755 (executable)
@@ -208,7 +208,8 @@ class LithiumNormalizedNodeInputStreamReader extends ForwardingDataInput impleme
         }
     }
 
         }
     }
 
-    QName readQName() throws IOException {
+    @Override
+    public QName readQName() throws IOException {
         // Read in the same sequence of writing
         String localName = readCodedString();
         String namespace = readCodedString();
         // Read in the same sequence of writing
         String localName = readCodedString();
         String namespace = readCodedString();
index a0aa813f64dd90cc0cceea7608f1c9aae5e950e8..493d35c9fec41636f81d73bddfad0942ed5f761d 100644 (file)
@@ -42,7 +42,7 @@ class LithiumNormalizedNodeOutputStreamWriter extends AbstractNormalizedNodeData
     }
 
     @Override
     }
 
     @Override
-    protected void writeQName(final QName qname) throws IOException {
+    public void writeQName(final QName qname) throws IOException {
         writeString(qname.getLocalName());
         writeModule(qname.getModule());
     }
         writeString(qname.getLocalName());
         writeModule(qname.getModule());
     }
index 93eb55cc8e07b388a3865c9ae39cd8e966d0e25e..37152f32e9c0c723251e78ea3b29f0a1f078f20c 100644 (file)
@@ -10,6 +10,9 @@ package org.opendaylight.controller.cluster.datastore.node.utils.stream;
 import com.google.common.annotations.Beta;
 import java.io.DataInput;
 import java.io.IOException;
 import com.google.common.annotations.Beta;
 import java.io.DataInput;
 import java.io.IOException;
+import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -32,6 +35,8 @@ public interface NormalizedNodeDataInput extends DataInput {
 
     YangInstanceIdentifier readYangInstanceIdentifier() throws IOException;
 
 
     YangInstanceIdentifier readYangInstanceIdentifier() throws IOException;
 
+    @NonNull QName readQName() throws IOException;
+
     PathArgument readPathArgument() throws IOException;
 
     SchemaPath readSchemaPath() throws IOException;
     PathArgument readPathArgument() throws IOException;
 
     SchemaPath readSchemaPath() throws IOException;
@@ -43,4 +48,8 @@ public interface NormalizedNodeDataInput extends DataInput {
      * @throws IOException if the version cannot be ascertained
      */
     NormalizedNodeStreamVersion getVersion() throws IOException;
      * @throws IOException if the version cannot be ascertained
      */
     NormalizedNodeStreamVersion getVersion() throws IOException;
+
+    default Optional<NormalizedNode<?, ?>> readOptionalNormalizedNode() throws IOException {
+        return readBoolean() ? Optional.of(readNormalizedNode()) : Optional.empty();
+    }
 }
 }
index dd267a0bfaca15b34c77c1fb8d85b559bedc186a..681553eb587825e83d28b1522f76ab3959067cda 100644 (file)
@@ -12,6 +12,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import java.io.IOException;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -23,6 +24,8 @@ import org.opendaylight.yangtools.yang.model.api.SchemaPath;
  */
 @Beta
 public interface NormalizedNodeDataOutput extends AutoCloseable, DataOutput {
  */
 @Beta
 public interface NormalizedNodeDataOutput extends AutoCloseable, DataOutput {
+    void writeQName(@NonNull QName qname) throws IOException;
+
     void writeNormalizedNode(@NonNull NormalizedNode<?, ?> normalizedNode) throws IOException;
 
     void writePathArgument(PathArgument pathArgument) throws IOException;
     void writeNormalizedNode(@NonNull NormalizedNode<?, ?> normalizedNode) throws IOException;
 
     void writePathArgument(PathArgument pathArgument) throws IOException;
index a9515d29ff73b9e7d262d519068ad729b8a2e35d..3857634e8b384ab01f427d090176f335b1872578 100644 (file)
@@ -23,8 +23,7 @@ import java.io.DataOutput;
  * <p>Based on the each node, the node type is also written to the stream, that helps in reconstructing the object,
  * while reading.
  */
  * <p>Based on the each node, the node type is also written to the stream, that helps in reconstructing the object,
  * while reading.
  */
-// FIXME: CONTROLLER-1888: switch this to Sodium once we have a corresponding datastore version
-class NormalizedNodeOutputStreamWriter extends LithiumNormalizedNodeOutputStreamWriter {
+class NormalizedNodeOutputStreamWriter extends SodiumNormalizedNodeOutputStreamWriter {
     NormalizedNodeOutputStreamWriter(final DataOutput output) {
         super(output);
     }
     NormalizedNodeOutputStreamWriter(final DataOutput output) {
         super(output);
     }
index fdc6adf225ec477a17ef801593ebdc15cb936221..ac5d9fdd787f259b0b5c062a14810c2d72779c4a 100644 (file)
@@ -35,7 +35,7 @@ final class SodiumNormalizedNodeInputStreamReader extends LithiumNormalizedNodeI
     }
 
     @Override
     }
 
     @Override
-    QName readQName() throws IOException {
+    public QName readQName() throws IOException {
         final byte valueType = readByte();
         switch (valueType) {
             case TokenTypes.IS_QNAME_CODE:
         final byte valueType = readByte();
         switch (valueType) {
             case TokenTypes.IS_QNAME_CODE:
index 5f5c0a01fd7fd5a3a9de020a6aa50795776140bb..26a6613fdc7b5acb4cb33d6cc78ddbdf3a6c10bc 100644 (file)
@@ -44,7 +44,7 @@ class SodiumNormalizedNodeOutputStreamWriter extends LithiumNormalizedNodeOutput
     }
 
     @Override
     }
 
     @Override
-    protected final void writeQName(final QName qname) throws IOException {
+    public final void writeQName(final QName qname) throws IOException {
         final Integer value = qnameCodeMap.get(qname);
         if (value == null) {
             // Fresh QName, remember it and emit as three strings
         final Integer value = qnameCodeMap.get(qname);
         if (value == null) {
             // Fresh QName, remember it and emit as three strings
index 23fdfdc6795ba6b27dd9fce08cd443b2b9de8d9c..c9fb52b6065daf841659e161868cd92b8a579726 100644 (file)
@@ -18,7 +18,9 @@ import java.io.ObjectOutput;
 import java.io.Serializable;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import java.io.Serializable;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
-import org.opendaylight.controller.cluster.datastore.node.utils.stream.SerializationUtils;
+import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeDataInput;
+import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeDataOutput;
+import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeInputOutput;
 import org.opendaylight.mdsal.dom.api.DOMRpcIdentifier;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.mdsal.dom.api.DOMRpcIdentifier;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -78,16 +80,17 @@ public final class ExecuteRpc implements Serializable {
 
         @Override
         public void writeExternal(final ObjectOutput out) throws IOException {
 
         @Override
         public void writeExternal(final ObjectOutput out) throws IOException {
-            // FIXME: QName is a WritableObject
-            out.writeObject(executeRpc.getRpc());
-            SerializationUtils.writeNormalizedNode(out, executeRpc.getInputNormalizedNode());
+            try (NormalizedNodeDataOutput stream = NormalizedNodeInputOutput.newDataOutput(out)) {
+                stream.writeQName(executeRpc.getRpc());
+                stream.writeOptionalNormalizedNode(executeRpc.getInputNormalizedNode());
+            }
         }
 
         @Override
         public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException {
         }
 
         @Override
         public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException {
-            // FIXME: QName is a WritableObject
-            QName qname = (QName) in.readObject();
-            executeRpc = new ExecuteRpc(SerializationUtils.readNormalizedNode(in).orElse(null), qname);
+            final NormalizedNodeDataInput stream = NormalizedNodeInputOutput.newDataInput(in);
+            final QName qname = stream.readQName();
+            executeRpc = new ExecuteRpc(stream.readOptionalNormalizedNode().orElse(null), qname);
         }
 
         private Object readResolve() {
         }
 
         private Object readResolve() {