Improve segmented journal actor metrics
[controller.git] / opendaylight / md-sal / sal-remoterpc-connector / src / main / java / org / opendaylight / controller / remote / rpc / messages / ExecuteAction.java
index 7a2b85ff81582a262cf78d798aca5910c4a59d55..c462f7b5c0e141a3fca6ec64ae8ef49476ab81db 100644 (file)
@@ -13,30 +13,31 @@ import static java.util.Objects.requireNonNull;
 import com.google.common.base.MoreObjects.ToStringHelper;
 import java.io.Externalizable;
 import java.io.IOException;
+import java.io.InvalidObjectException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeDataOutput;
-import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeInputOutput;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.codec.binfmt.NormalizedNodeDataInput;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.data.codec.binfmt.NormalizedNodeStreamVersion;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
 
-public final class ExecuteAction extends AbstractExecute<@NonNull ContainerNode> {
+public final class ExecuteAction extends AbstractExecute<Absolute, @NonNull ContainerNode> {
     private static final long serialVersionUID = 1128904894827335676L;
 
     private final @NonNull DOMDataTreeIdentifier path;
 
-    private ExecuteAction(final @NonNull SchemaPath type, final @NonNull DOMDataTreeIdentifier path,
+    private ExecuteAction(final @NonNull Absolute type, final @NonNull DOMDataTreeIdentifier path,
             final @NonNull ContainerNode input) {
         super(type, requireNonNull(input));
         this.path = requireNonNull(path);
     }
 
-    public static @NonNull ExecuteAction from(final @NonNull SchemaPath type, @NonNull final DOMDataTreeIdentifier path,
+    public static @NonNull ExecuteAction from(final @NonNull Absolute type, @NonNull final DOMDataTreeIdentifier path,
             final @NonNull ContainerNode input) {
         return new ExecuteAction(type, path, input);
     }
@@ -73,10 +74,10 @@ public final class ExecuteAction extends AbstractExecute<@NonNull ContainerNode>
 
         @Override
         public void writeExternal(final ObjectOutput out) throws IOException {
-            try (NormalizedNodeDataOutput stream = NormalizedNodeInputOutput.newDataOutput(out)) {
-                stream.writeSchemaPath(executeAction.getType());
-                executeAction.getPath().getDatastoreType().writeTo(out);
-                stream.writeYangInstanceIdentifier(executeAction.getPath().getRootIdentifier());
+            try (var stream = NormalizedNodeStreamVersion.current().newDataOutput(out)) {
+                stream.writeSchemaNodeIdentifier(executeAction.getType());
+                executeAction.getPath().datastore().writeTo(out);
+                stream.writeYangInstanceIdentifier(executeAction.getPath().path());
                 stream.writeOptionalNormalizedNode(executeAction.getInput());
             }
         }
@@ -84,12 +85,16 @@ public final class ExecuteAction extends AbstractExecute<@NonNull ContainerNode>
         @Override
         public void readExternal(final ObjectInput in) throws IOException {
             final NormalizedNodeDataInput stream = NormalizedNodeDataInput.newDataInput(in);
-            final SchemaPath name = stream.readSchemaPath();
+            final SchemaNodeIdentifier sni = stream.readSchemaNodeIdentifier();
+            if (!(sni instanceof Absolute absolute)) {
+                throw new InvalidObjectException("Non-absolute type " + sni);
+            }
+
             final LogicalDatastoreType type = LogicalDatastoreType.readFrom(in);
             final YangInstanceIdentifier path = stream.readYangInstanceIdentifier();
             final ContainerNode input = (ContainerNode) stream.readOptionalNormalizedNode().orElse(null);
 
-            executeAction = new ExecuteAction(name, new DOMDataTreeIdentifier(type, path), input);
+            executeAction = new ExecuteAction(absolute, DOMDataTreeIdentifier.of(type, path), input);
         }
 
         private Object readResolve() {