<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>13.0.11</version>
+ <version>13.1.2</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent</artifactId>
- <version>13.0.11</version>
+ <version>13.1.2</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>13.0.11</version>
+ <version>13.1.2</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>13.0.11</version>
+ <version>13.1.2</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>bundle-parent</artifactId>
- <version>13.0.1</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent</artifactId>
- <version>13.0.11</version>
+ <version>13.1.2</version>
<relativePath/>
</parent>
<link>https://netty.io/4.1/api/</link>
<link>https://commons.apache.org/proper/commons-lang/javadocs/api-release/</link>
- <link>https://www.javadoc.io/doc/org.opendaylight.odlparent/odlparent-docs/13.0.11/</link>
- <link>https://www.javadoc.io/doc/org.opendaylight.yangtools/yangtools-docs/13.0.2/</link>
- <link>https://www.javadoc.io/doc/org.opendaylight.mdsal/mdsal-docs/13.0.1/</link>
+ <link>https://www.javadoc.io/doc/org.opendaylight.odlparent/odlparent-docs/13.1.2/</link>
+ <link>https://www.javadoc.io/doc/org.opendaylight.yangtools/yangtools-docs/13.0.5/</link>
+ <link>https://www.javadoc.io/doc/org.opendaylight.mdsal/mdsal-docs/13.0.3/</link>
</links>
<groups>
<group>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>feature-repo-parent</artifactId>
- <version>13.0.11</version>
+ <version>13.1.2</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>feature-repo-parent</artifactId>
- <version>13.0.11</version>
+ <version>13.1.2</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>feature-repo-parent</artifactId>
- <version>13.0.11</version>
+ <version>13.1.2</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>13.0.11</version>
+ <version>13.1.2</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>single-feature-parent</artifactId>
- <version>13.0.11</version>
+ <version>13.1.2</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent</artifactId>
- <version>13.0.11</version>
+ <version>13.1.2</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>karaf4-parent</artifactId>
- <version>13.0.11</version>
+ <version>13.1.2</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>bundle-parent</artifactId>
- <version>13.0.11</version>
+ <version>13.1.2</version>
<relativePath/>
</parent>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yangtools-artifacts</artifactId>
- <version>13.0.2</version>
+ <version>13.0.5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-artifacts</artifactId>
- <version>13.0.1</version>
+ <version>13.0.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>bundle-parent</artifactId>
- <version>13.0.11</version>
+ <version>13.1.2</version>
<relativePath/>
</parent>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-artifacts</artifactId>
- <version>13.0.1</version>
+ <version>13.0.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>bundle-parent</artifactId>
- <version>13.0.11</version>
+ <version>13.1.2</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>binding-parent</artifactId>
- <version>13.0.1</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>13.0.11</version>
+ <version>13.1.2</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>13.0.11</version>
+ <version>13.1.2</version>
<relativePath/>
</parent>
import org.opendaylight.controller.remote.rpc.messages.ExecuteAction;
import org.opendaylight.controller.remote.rpc.messages.ExecuteRpc;
import org.opendaylight.controller.remote.rpc.messages.RpcResponse;
-import org.opendaylight.mdsal.dom.api.DOMActionResult;
import org.opendaylight.mdsal.dom.api.DOMActionService;
import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
import org.opendaylight.mdsal.dom.api.DOMRpcResult;
final ActorRef sender = getSender();
- final ListenableFuture<? extends DOMActionResult> future;
+ final ListenableFuture<? extends DOMRpcResult> future;
try {
future = actionService.invokeAction(msg.getType(), msg.getPath(), msg.getInput());
} catch (final RuntimeException e) {
return;
}
- Futures.addCallback(future, new AbstractCallback<Absolute, DOMActionResult>(getSender(), msg.getType()) {
+ Futures.addCallback(future, new AbstractCallback<Absolute, DOMRpcResult>(getSender(), msg.getType()) {
@Override
Object nullResponse(final Absolute type) {
throw new IllegalStateException("Null invocation result of action " + type);
}
@Override
- Object response(final Absolute type, final DOMActionResult result) {
- final Collection<? extends RpcError> errors = result.getErrors();
- return errors.isEmpty() ? new ActionResponse(result.getOutput(), result.getErrors())
+ Object response(final Absolute type, final DOMRpcResult result) {
+ final var errors = result.errors();
+ return errors.isEmpty() ? new ActionResponse(result.value(), errors)
// This is legacy (wrong) behavior, which ignores the fact that errors may be just warnings,
// discarding any output
: new Failure(new RpcErrorsException(String.format("Execution of action %s failed", type),
import com.google.common.util.concurrent.ListenableFuture;
import org.opendaylight.controller.remote.rpc.messages.ExecuteAction;
import org.opendaylight.mdsal.dom.api.DOMActionImplementation;
-import org.opendaylight.mdsal.dom.api.DOMActionResult;
import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
+import org.opendaylight.mdsal.dom.api.DOMRpcResult;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
import org.slf4j.Logger;
* Routes action request to a remote invoker, which will execute the action and return with result.
*/
@Override
- public ListenableFuture<DOMActionResult> invokeAction(final Absolute type, final DOMDataTreeIdentifier path,
- final ContainerNode input) {
+ public ListenableFuture<DOMRpcResult> invokeAction(final Absolute type, final DOMDataTreeIdentifier path,
+ final ContainerNode input) {
LOG.debug("invoking action {} with path {}", type, path);
return new RemoteDOMActionFuture(type, ask(ExecuteAction.from(type, path, input)));
}
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.controller.remote.rpc.messages.ActionResponse;
import org.opendaylight.mdsal.dom.api.DOMActionException;
-import org.opendaylight.mdsal.dom.api.DOMActionResult;
-import org.opendaylight.mdsal.dom.spi.SimpleDOMActionResult;
+import org.opendaylight.mdsal.dom.api.DOMRpcResult;
+import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
import scala.concurrent.Future;
-final class RemoteDOMActionFuture extends AbstractRemoteFuture<Absolute, DOMActionResult, DOMActionException> {
+final class RemoteDOMActionFuture extends AbstractRemoteFuture<Absolute, DOMRpcResult, DOMActionException> {
RemoteDOMActionFuture(final @NonNull Absolute type, final @NonNull Future<Object> requestFuture) {
super(type, requestFuture);
}
@Override
- DOMActionResult processReply(final Object reply) {
+ DOMRpcResult processReply(final Object reply) {
if (reply instanceof ActionResponse actionReply) {
final ContainerNode output = actionReply.getOutput();
- return output == null ? new SimpleDOMActionResult(actionReply.getErrors())
- : new SimpleDOMActionResult(output, actionReply.getErrors());
+ return output == null ? new DefaultDOMRpcResult(actionReply.getErrors())
+ : new DefaultDOMRpcResult(output, actionReply.getErrors());
}
return null;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.Collection;
-import java.util.Optional;
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.yangtools.yang.common.RpcError;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@SuppressFBWarnings({"SE_TRANSIENT_FIELD_NOT_RESTORED", "DMI_NONSERIALIZABLE_OBJECT_WRITTEN"})
public class ActionResponse extends AbstractResponse<ContainerNode> {
+ @java.io.Serial
private static final long serialVersionUID = 1L;
private final transient @NonNull ImmutableList<@NonNull RpcError> errors;
- public ActionResponse(final @NonNull Optional<ContainerNode> output, @NonNull final Collection<RpcError> errors) {
- super(output.orElse(null));
+ public ActionResponse(final @Nullable ContainerNode output, @NonNull final Collection<? extends RpcError> errors) {
+ super(output);
this.errors = ImmutableList.copyOf(errors);
}
@Override
public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException {
@SuppressWarnings("unchecked")
- final ImmutableList<RpcError> errors = (ImmutableList<RpcError>) in.readObject();
- final Optional<NormalizedNode> output = SerializationUtils.readNormalizedNode(in);
- actionResponse = new ActionResponse(output.map(ContainerNode.class::cast), errors);
+ final var errors = (ImmutableList<RpcError>) in.readObject();
+ final var output = SerializationUtils.readNormalizedNode(in);
+ actionResponse = new ActionResponse(output.map(ContainerNode.class::cast).orElse(null), errors);
}
private Object readResolve() {
import com.google.common.util.concurrent.ListenableFuture;
import java.util.Collections;
-import java.util.Optional;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import org.junit.Ignore;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.opendaylight.mdsal.dom.api.DOMActionException;
-import org.opendaylight.mdsal.dom.api.DOMActionResult;
import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
import org.opendaylight.mdsal.dom.api.DOMRpcException;
import org.opendaylight.mdsal.dom.api.DOMRpcResult;
import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult;
-import org.opendaylight.mdsal.dom.spi.SimpleDOMActionResult;
import org.opendaylight.yangtools.util.concurrent.FluentFutures;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
@Test
public void testInvokeAction() throws Exception {
final ContainerNode actionOutput = makeRPCOutput("bar");
- final DOMActionResult actionResult = new SimpleDOMActionResult(actionOutput, Collections.emptyList());
+ final DOMRpcResult actionResult = new DefaultDOMRpcResult(actionOutput, Collections.emptyList());
final NormalizedNode invokeActionInput = makeRPCInput("foo");
final ArgumentCaptor<ContainerNode> inputCaptor =
ArgumentCaptor.forClass(ContainerNode.class);
doReturn(FluentFutures.immediateFluentFuture(actionResult)).when(domActionService2).invokeAction(
eq(TEST_RPC_TYPE), eq(TEST_DATA_TREE_ID), inputCaptor.capture());
- final ListenableFuture<DOMActionResult> frontEndFuture = remoteActionImpl1.invokeAction(TEST_RPC_TYPE,
+ final ListenableFuture<DOMRpcResult> frontEndFuture = remoteActionImpl1.invokeAction(TEST_RPC_TYPE,
TEST_DATA_TREE_ID, (ContainerNode) invokeActionInput);
assertThat(frontEndFuture, instanceOf(RemoteDOMActionFuture.class));
- final DOMActionResult result = frontEndFuture.get(5, TimeUnit.SECONDS);
- assertEquals(Optional.of(actionOutput), result.getOutput());
+ final DOMRpcResult result = frontEndFuture.get(5, TimeUnit.SECONDS);
+ assertEquals(actionOutput, result.value());
}
/**
@Test
public void testInvokeActionWithNullInput() throws Exception {
final ContainerNode actionOutput = makeRPCOutput("bar");
- final DOMActionResult actionResult = new SimpleDOMActionResult(actionOutput);
+ final DOMRpcResult actionResult = new DefaultDOMRpcResult(actionOutput);
final ArgumentCaptor<ContainerNode> inputCaptor = ArgumentCaptor.forClass(ContainerNode.class);
doReturn(FluentFutures.immediateFluentFuture(actionResult)).when(domActionService2).invokeAction(
eq(TEST_RPC_TYPE), eq(TEST_DATA_TREE_ID), inputCaptor.capture());
- ListenableFuture<DOMActionResult> frontEndFuture = remoteActionImpl1.invokeAction(TEST_RPC_TYPE,
+ ListenableFuture<DOMRpcResult> frontEndFuture = remoteActionImpl1.invokeAction(TEST_RPC_TYPE,
TEST_DATA_TREE_ID, actionOutput);
assertThat(frontEndFuture, instanceOf(RemoteDOMActionFuture.class));
- final DOMActionResult result = frontEndFuture.get(5, TimeUnit.SECONDS);
- assertEquals(Optional.of(actionOutput), result.getOutput());
+ final DOMRpcResult result = frontEndFuture.get(5, TimeUnit.SECONDS);
+ assertEquals(actionOutput, result.value());
}
/**
doReturn(FluentFutures.immediateFailedFluentFuture(new RemoteDOMRpcException("Test Exception", null)))
.when(domActionService2).invokeAction(eq(TEST_RPC_TYPE), eq(TEST_DATA_TREE_ID), inputCaptor.capture());
- final ListenableFuture<DOMActionResult> frontEndFuture = remoteActionImpl1.invokeAction(TEST_RPC_TYPE,
+ final ListenableFuture<DOMRpcResult> frontEndFuture = remoteActionImpl1.invokeAction(TEST_RPC_TYPE,
TEST_DATA_TREE_ID, invokeActionInput);
assertThat(frontEndFuture, instanceOf(RemoteDOMActionFuture.class));
doThrow(new RuntimeException("test")).when(domActionService2).invokeAction(any(Absolute.class),
any(DOMDataTreeIdentifier.class), any(ContainerNode.class));
- final ListenableFuture<DOMActionResult> frontEndFuture = remoteActionImpl1.invokeAction(TEST_RPC_TYPE,
+ final ListenableFuture<DOMRpcResult> frontEndFuture = remoteActionImpl1.invokeAction(TEST_RPC_TYPE,
TEST_DATA_TREE_ID, invokeRpcInput);
assertThat(frontEndFuture, instanceOf(RemoteDOMActionFuture.class));
import static org.junit.Assert.assertEquals;
-import java.util.Collections;
-import java.util.Optional;
+import java.util.List;
import org.apache.commons.lang3.SerializationUtils;
import org.junit.Test;
import org.opendaylight.controller.remote.rpc.AbstractOpsTest;
public void testSerialization() {
RpcResponse expectedRpc = new RpcResponse(AbstractOpsTest.makeRPCOutput("serialization-test"));
- ActionResponse expectedAction = new ActionResponse(
- Optional.of(AbstractOpsTest.makeRPCOutput("serialization-test")), Collections.emptyList());
+ ActionResponse expectedAction = new ActionResponse(AbstractOpsTest.makeRPCOutput("serialization-test"),
+ List.of());
RpcResponse actualRpc = SerializationUtils.clone(expectedRpc);
ActionResponse actualAction = SerializationUtils.clone(expectedAction);
- assertEquals("getResultNormalizedNode", expectedRpc.getOutput(),
- actualRpc.getOutput());
+ assertEquals("getResultNormalizedNode", expectedRpc.getOutput(), actualRpc.getOutput());
- assertEquals("getResultNormalizedNode", expectedAction.getOutput(),
- actualAction.getOutput());
+ assertEquals("getResultNormalizedNode", expectedAction.getOutput(), actualAction.getOutput());
}
}
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>13.0.11</version>
+ <version>13.1.2</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>13.0.11</version>
+ <version>13.1.2</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>13.0.11</version>
+ <version>13.1.2</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>13.0.11</version>
+ <version>13.1.2</version>
<relativePath/>
</parent>