import com.google.common.util.concurrent.FluentFuture;
import com.google.common.util.concurrent.SettableFuture;
import java.util.Collection;
-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.spi.SimpleDOMActionResult;
+import org.opendaylight.mdsal.dom.api.DOMRpcResult;
+import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult;
import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceId;
import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceServices.Actions;
import org.opendaylight.netconf.topology.singleton.impl.utils.ClusteringActionException;
/**
* Implementation of {@link DOMActionService} provided by device in Odl-Cluster environment to invoke action.
* Communicates action message {@link InvokeActionMessage} to {@link ActorSystem} using {@link ActorRef} and transforms
- * replied NETCONF message to action result, using {@link SimpleDOMActionResult}.
+ * replied NETCONF message to action result, using {@link DefaultDOMRpcResult}.
*/
public class ProxyDOMActionService implements Actions.Normalized {
private static final Logger LOG = LoggerFactory.getLogger(ProxyDOMActionService.class);
}
@Override
- public FluentFuture<DOMActionResult> invokeAction(final Absolute type,
+ public FluentFuture<DOMRpcResult> invokeAction(final Absolute type,
final DOMDataTreeIdentifier domDataTreeIdentifier, final ContainerNode input) {
requireNonNull(type);
requireNonNull(input);
final Future<Object> scalaFuture = Patterns.ask(masterActorRef, new InvokeActionMessage(
new SchemaPathMessage(type), containerNodeMessage, domDataTreeIdentifier), actorResponseWaitTime);
- final SettableFuture<DOMActionResult> settableFuture = SettableFuture.create();
+ final SettableFuture<DOMRpcResult> settableFuture = SettableFuture.create();
scalaFuture.onComplete(new OnComplete<>() {
@Override
final ContainerNodeMessage containerNodeMessage =
((InvokeActionMessageReply) response).getContainerNodeMessage();
- final DOMActionResult result;
-
+ final DOMRpcResult result;
if (containerNodeMessage == null) {
- result = new SimpleDOMActionResult(ImmutableList.copyOf(errors));
+ result = new DefaultDOMRpcResult(ImmutableList.copyOf(errors));
} else {
- result = new SimpleDOMActionResult(containerNodeMessage.getNode(), ImmutableList.copyOf(errors));
+ result = new DefaultDOMRpcResult(containerNodeMessage.getNode(), ImmutableList.copyOf(errors));
}
settableFuture.set(result);
}
import org.opendaylight.controller.cluster.common.actor.AbstractUntypedActor;
import org.opendaylight.controller.cluster.schema.provider.impl.RemoteSchemaProvider;
import org.opendaylight.controller.cluster.schema.provider.impl.YangTextSchemaSourceSerializationProxy;
-import org.opendaylight.mdsal.dom.api.DOMActionResult;
import org.opendaylight.mdsal.dom.api.DOMActionService;
import org.opendaylight.mdsal.dom.api.DOMDataBroker;
import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
LOG.info("{}: invokeSlaveAction for {}, input: {}, identifier: {} on action service {}", id, schemaPath,
containerNodeMessage, domDataTreeIdentifier, deviceAction);
- final ListenableFuture<? extends DOMActionResult> actionResult = deviceAction.invokeAction(schemaPath,
+ final var actionResult = deviceAction.invokeAction(schemaPath,
domDataTreeIdentifier, containerNodeMessage != null ? containerNodeMessage.getNode() : null);
- Futures.addCallback(actionResult, new FutureCallback<DOMActionResult>() {
-
+ Futures.addCallback(actionResult, new FutureCallback<DOMRpcResult>() {
@Override
- public void onSuccess(final DOMActionResult domActionResult) {
+ public void onSuccess(final DOMRpcResult domActionResult) {
LOG.debug("{}: invokeSlaveAction for {}, domActionResult: {}", id, schemaPath, domActionResult);
if (domActionResult == null) {
recipient.tell(new EmptyResultResponse(), getSender());
}
//Check DomActionResult containing Ok onSuccess pass empty nodeMessageReply
- ContainerNodeMessage nodeMessageReply = domActionResult.getOutput().map(ContainerNodeMessage::new)
- .orElse(null);
- recipient.tell(new InvokeActionMessageReply(nodeMessageReply, domActionResult.getErrors()), getSelf());
+ final var value = domActionResult.value();
+ final var nodeMessageReply = value != null ? new ContainerNodeMessage(value) : null;
+ recipient.tell(new InvokeActionMessageReply(nodeMessageReply, domActionResult.errors()), getSelf());
}
@Override
import org.mockito.junit.MockitoJUnitRunner;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.mdsal.dom.api.DOMActionException;
-import org.opendaylight.mdsal.dom.api.DOMActionResult;
import org.opendaylight.mdsal.dom.api.DOMActionService;
import org.opendaylight.mdsal.dom.api.DOMDataBroker;
import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
import org.opendaylight.mdsal.dom.api.DOMRpcService;
import org.opendaylight.mdsal.dom.api.DOMSchemaService;
import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult;
-import org.opendaylight.mdsal.dom.spi.SimpleDOMActionResult;
import org.opendaylight.netconf.client.mdsal.api.DeviceNetconfSchemaProvider;
import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceId;
import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceServices;
initializeMaster(List.of(new SourceIdentifier("testActionID")));
registerSlaveMountPoint();
- ArgumentCaptor<DOMActionService> domActionServiceCaptor = ArgumentCaptor.forClass(DOMActionService.class);
+ final var domActionServiceCaptor = ArgumentCaptor.forClass(DOMActionService.class);
verify(mockMountPointBuilder).addService(eq(DOMActionService.class), domActionServiceCaptor.capture());
final DOMActionService slaveDomActionService = domActionServiceCaptor.getValue();
final YangInstanceIdentifier yangIIdPath = YangInstanceIdentifier.of(testQName);
- final DOMDataTreeIdentifier domDataTreeIdentifier = new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL,
+ final DOMDataTreeIdentifier domDataTreeIdentifier = DOMDataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL,
yangIIdPath);
final ContainerNode outputNode = ImmutableNodes.newContainerBuilder()
// Action with no response output.
doReturn(FluentFutures.immediateNullFluentFuture()).when(mockDOMActionService)
.invokeAction(any(), any(), any());
- DOMActionResult result = slaveDomActionService.invokeAction(schemaPath, domDataTreeIdentifier, outputNode)
+ var result = slaveDomActionService.invokeAction(schemaPath, domDataTreeIdentifier, outputNode)
.get(2, TimeUnit.SECONDS);
assertEquals(null, result);
// Action with response output.
- doReturn(FluentFutures.immediateFluentFuture(new SimpleDOMActionResult(outputNode))).when(mockDOMActionService)
+ doReturn(FluentFutures.immediateFluentFuture(new DefaultDOMRpcResult(outputNode))).when(mockDOMActionService)
.invokeAction(any(), any(), any());
result = slaveDomActionService.invokeAction(schemaPath, domDataTreeIdentifier, outputNode)
.get(2, TimeUnit.SECONDS);
- assertEquals(Optional.of(outputNode), result.getOutput());
- assertTrue(result.getErrors().isEmpty());
+ assertEquals(outputNode, result.value());
+ assertTrue(result.errors().isEmpty());
// Action failure.
doReturn(FluentFutures.immediateFailedFluentFuture(new ClusteringActionException("mock")))
.when(mockDOMActionService).invokeAction(any(), any(), any());
- final ListenableFuture<? extends DOMActionResult> future = slaveDomActionService.invokeAction(schemaPath,
- domDataTreeIdentifier, outputNode);
+ final var future = slaveDomActionService.invokeAction(schemaPath, domDataTreeIdentifier, outputNode);
final ExecutionException e = assertThrows(ExecutionException.class, () -> future.get(2, TimeUnit.SECONDS));
final Throwable cause = e.getCause();
<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>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>single-feature-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>karaf-dist-static</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>
<groupId>org.opendaylight.netconf</groupId>
<dependency>
<groupId>org.opendaylight.infrautils</groupId>
<artifactId>infrautils-artifacts</artifactId>
- <version>6.0.6</version>
+ <version>6.0.8</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.opendaylight.controller</groupId>
<artifactId>controller-artifacts</artifactId>
- <version>9.0.2</version>
+ <version>9.0.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<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>
<parent>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>binding-parent</artifactId>
- <version>13.0.1</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<dependency>
<groupId>org.opendaylight.infrautils</groupId>
<artifactId>infrautils-artifacts</artifactId>
- <version>6.0.6</version>
+ <version>6.0.8</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.opendaylight.aaa</groupId>
<artifactId>aaa-artifacts</artifactId>
- <version>0.19.3</version>
+ <version>0.19.4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.opendaylight.controller</groupId>
<artifactId>bundle-parent</artifactId>
- <version>9.0.2</version>
+ <version>9.0.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
*/
package org.opendaylight.netconf.client.mdsal.api;
-import org.opendaylight.mdsal.dom.api.DOMActionResult;
import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
+import org.opendaylight.mdsal.dom.api.DOMRpcResult;
import org.opendaylight.netconf.api.messages.NetconfMessage;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
*
* @param action - action schema path
* @param message - message to parsing
- * @return {@link DOMActionResult}
+ * @return {@link DOMRpcResult}
*/
- DOMActionResult toActionResult(Absolute action, NetconfMessage message);
+ DOMRpcResult toActionResult(Absolute action, NetconfMessage message);
}
import org.checkerframework.checker.lock.qual.GuardedBy;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.dom.api.DOMActionResult;
import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
import org.opendaylight.mdsal.dom.api.DOMEvent;
import org.opendaylight.mdsal.dom.api.DOMNotification;
import org.opendaylight.mdsal.dom.api.DOMRpcResult;
import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult;
-import org.opendaylight.mdsal.dom.spi.SimpleDOMActionResult;
import org.opendaylight.netconf.api.messages.NetconfMessage;
import org.opendaylight.netconf.api.xml.MissingNameSpaceException;
import org.opendaylight.netconf.api.xml.XmlElement;
}
@Override
- public DOMActionResult toActionResult(final Absolute action, final NetconfMessage message) {
+ public DOMRpcResult toActionResult(final Absolute action, final NetconfMessage message) {
final ActionDefinition actionDefinition = actions.get(action);
checkArgument(actionDefinition != null, "Action does not exist: %s", action);
final ContainerNode normalizedNode = parseResult(message, action, actionDefinition);
if (normalizedNode == null) {
- return new SimpleDOMActionResult(List.of());
+ return new DefaultDOMRpcResult(List.of());
} else {
- return new SimpleDOMActionResult(normalizedNode, List.of());
+ return new DefaultDOMRpcResult(normalizedNode, List.of());
}
}
</rpc-reply>"""));
final var actionResult = actionNetconfMessageTransformer.toActionResult(RESET_SERVER_PATH, message);
assertNotNull(actionResult);
- final var containerNode = actionResult.getOutput().orElseThrow();
+ final var containerNode = actionResult.value();
assertNotNull(containerNode);
assertEquals("now", containerNode.body().iterator().next().body());
}
final var actionResult =
actionNetconfMessageTransformer.toActionResult(CHECK_WITH_OUTPUT_INTERFACE_PATH, message);
assertNotNull(actionResult);
- assertTrue(actionResult.getOutput().isEmpty());
+ assertNull(actionResult.value());
}
@Test
final var actionResult =
actionNetconfMessageTransformer.toActionResult(CHECK_WITHOUT_OUTPUT_INTERFACE_PATH, message);
assertNotNull(actionResult);
- assertTrue(actionResult.getOutput().isEmpty());
+ assertNull(actionResult.value());
}
@Test
<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>
import org.opendaylight.mdsal.common.api.CommitInfo;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.mdsal.dom.api.DOMActionException;
-import org.opendaylight.mdsal.dom.api.DOMActionResult;
import org.opendaylight.mdsal.dom.api.DOMActionService;
import org.opendaylight.mdsal.dom.api.DOMDataBroker;
import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
import org.opendaylight.mdsal.dom.api.DOMSchemaService;
import org.opendaylight.mdsal.dom.api.DOMSchemaService.YangTextSourceExtension;
import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
-import org.opendaylight.mdsal.dom.spi.SimpleDOMActionResult;
+import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult;
import org.opendaylight.netconf.dom.api.NetconfDataTreeService;
import org.opendaylight.restconf.api.ApiPath;
import org.opendaylight.restconf.api.FormattableBody;
}
return dataInvokePOST(actionService, path, input)
- .transform(result -> outputToInvokeResult(path, result.getOutput().orElse(null)));
+ .transform(result -> outputToInvokeResult(path, result.value()));
}
/**
* @param yangIId invocation context
* @param schemaPath schema path of data
* @param actionService action service to invoke action
- * @return {@link DOMActionResult}
+ * @return {@link DOMRpcResult}
*/
- private static RestconfFuture<DOMActionResult> dataInvokePOST(final DOMActionService actionService,
+ private static RestconfFuture<DOMRpcResult> dataInvokePOST(final DOMActionService actionService,
final Action path, final @NonNull ContainerNode input) {
- final var ret = new SettableRestconfFuture<DOMActionResult>();
+ final var ret = new SettableRestconfFuture<DOMRpcResult>();
Futures.addCallback(actionService.invokeAction(
path.inference().toSchemaInferenceStack().toSchemaNodeIdentifier(),
DOMDataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, path.instance()), input),
- new FutureCallback<DOMActionResult>() {
+ new FutureCallback<DOMRpcResult>() {
@Override
- public void onSuccess(final DOMActionResult result) {
- final var errors = result.getErrors();
+ public void onSuccess(final DOMRpcResult result) {
+ final var errors = result.errors();
LOG.debug("InvokeAction Error Message {}", errors);
if (errors.isEmpty()) {
ret.set(result);
@Override
public void onFailure(final Throwable cause) {
if (cause instanceof DOMActionException) {
- ret.set(new SimpleDOMActionResult(List.of(RpcResultBuilder.newError(
+ ret.set(new DefaultDOMRpcResult(List.of(RpcResultBuilder.newError(
ErrorType.RPC, ErrorTag.OPERATION_FAILED, cause.getMessage()))));
} else if (cause instanceof RestconfDocumentedException e) {
ret.setFailure(e);
import org.opendaylight.mdsal.dom.api.DOMDataBroker;
import org.opendaylight.mdsal.dom.api.DOMMountPointService;
import org.opendaylight.mdsal.dom.api.DOMRpcService;
+import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult;
import org.opendaylight.mdsal.dom.spi.FixedDOMSchemaService;
-import org.opendaylight.mdsal.dom.spi.SimpleDOMActionResult;
import org.opendaylight.restconf.api.ApiPath;
import org.opendaylight.restconf.api.query.PrettyPrintParam;
import org.opendaylight.restconf.nb.rfc8040.AbstractInstanceIdentifierTest;
@Test
void testInvokeAction() throws Exception {
- doReturn(Futures.immediateFuture(new SimpleDOMActionResult(ImmutableNodes.newContainerBuilder()
+ doReturn(Futures.immediateFuture(new DefaultDOMRpcResult(ImmutableNodes.newContainerBuilder()
.withNodeIdentifier(NodeIdentifier.create(OUTPUT_QNAME))
.build())))
.when(actionService).invokeAction(eq(RESET_PATH), any(), any());
@Test
void testInvokeActionOutput() throws Exception {
- doReturn(Futures.immediateFuture(new SimpleDOMActionResult(ImmutableNodes.newContainerBuilder()
+ doReturn(Futures.immediateFuture(new DefaultDOMRpcResult(ImmutableNodes.newContainerBuilder()
.withNodeIdentifier(NodeIdentifier.create(OUTPUT_QNAME))
.withChild(ImmutableNodes.leafNode(QName.create(OUTPUT_QNAME, "timestamp"), "somevalue"))
.build())))
<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</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>
<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>bundle-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>odlparent-lite</artifactId>
- <version>13.0.11</version>
+ <version>13.1.2</version>
<relativePath/>
</parent>