<dependency>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-artifacts</artifactId>
- <version>3.0.6</version>
+ <version>4.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-artifacts</artifactId>
- <version>3.0.6</version>
+ <version>4.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-artifacts</artifactId>
- <version>3.0.6</version>
+ <version>4.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-artifacts</artifactId>
- <version>3.0.6</version>
+ <version>4.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-artifacts</artifactId>
- <version>3.0.6</version>
+ <version>4.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.changed.by.parms.changed.by.server.or.user.ServerBuilder;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.Empty;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private void publishNotification(final Set<Uri> added, final Set<Uri> removed) {
final NetconfCapabilityChangeBuilder netconfCapabilityChangeBuilder = new NetconfCapabilityChangeBuilder();
netconfCapabilityChangeBuilder.setChangedBy(new ChangedByBuilder().setServerOrUser(new ServerBuilder()
- .setServer(true).build()).build());
+ .setServer(Empty.getInstance()).build()).build());
netconfCapabilityChangeBuilder.setAddedCapability(ImmutableList.copyOf(added));
netconfCapabilityChangeBuilder.setDeletedCapability(ImmutableList.copyOf(removed));
// TODO modified should be computed ... but why ?
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.Empty;
public class CapabilityChangeNotificationProducerTest {
private static NetconfCapabilityChange changedCapabilitesFrom(final List<Uri> added, final List<Uri> deleted) {
NetconfCapabilityChangeBuilder netconfCapabilityChangeBuilder = new NetconfCapabilityChangeBuilder();
netconfCapabilityChangeBuilder.setChangedBy(new ChangedByBuilder().setServerOrUser(
- new ServerBuilder().setServer(true).build()).build());
+ new ServerBuilder().setServer(Empty.getInstance()).build()).build());
netconfCapabilityChangeBuilder.setModifiedCapability(Collections.emptyList());
netconfCapabilityChangeBuilder.setAddedCapability(added);
import com.google.common.base.Preconditions;
import com.google.common.util.concurrent.FluentFuture;
+import com.google.common.util.concurrent.ListenableFuture;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
* @param lastEventTime last event time
* @return rpc result
*/
- FluentFuture<DOMRpcResult> invokeCreateSubscription(final Stream stream, final Optional<Instant> lastEventTime) {
+ ListenableFuture<DOMRpcResult> invokeCreateSubscription(final Stream stream,
+ final Optional<Instant> lastEventTime) {
final CreateSubscriptionInputBuilder inputBuilder = new CreateSubscriptionInputBuilder()
.setStream(stream.getName());
if (lastEventTime.isPresent() && stream.isReplaySupport()) {
* @param stream stream
* @return rpc result
*/
- FluentFuture<DOMRpcResult> invokeCreateSubscription(final Stream stream) {
+ ListenableFuture<DOMRpcResult> invokeCreateSubscription(final Stream stream) {
return invokeCreateSubscription(stream, Optional.empty());
}
*/
package org.opendaylight.netconf.messagebus.eventsources.netconf;
-import com.google.common.util.concurrent.FluentFuture;
+import com.google.common.util.concurrent.ListenableFuture;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
void activateNotificationSource() {
if (!isActive()) {
LOG.info("Stream {} is not active on node {}. Will subscribe.", this.getStreamName(), this.nodeId);
- final FluentFuture<DOMRpcResult> result = mountPoint.invokeCreateSubscription(stream);
+ final ListenableFuture<DOMRpcResult> result = mountPoint.invokeCreateSubscription(stream);
try {
result.get();
setActive(true);
void reActivateNotificationSource() {
if (isActive()) {
LOG.info("Stream {} is reactivating on node {}.", this.getStreamName(), this.nodeId);
- final FluentFuture<DOMRpcResult> result = mountPoint.invokeCreateSubscription(stream, getLastEventTime());
+ final ListenableFuture<DOMRpcResult> result = mountPoint.invokeCreateSubscription(stream,
+ getLastEventTime());
try {
result.get();
setActive(true);
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfCapabilityChangeBuilder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.changed.by.parms.ChangedByBuilder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.changed.by.parms.changed.by.server.or.user.ServerBuilder;
+import org.opendaylight.yangtools.yang.common.Empty;
class NetconfCapabilityMonitoringService implements CapabilityListener, AutoCloseable {
final NetconfCapabilityChangeBuilder netconfCapabilityChangeBuilder = new NetconfCapabilityChangeBuilder();
netconfCapabilityChangeBuilder
.setChangedBy(new ChangedByBuilder().setServerOrUser(
- new ServerBuilder().setServer(Boolean.TRUE).build()).build());
+ new ServerBuilder().setServer(Empty.getInstance()).build()).build());
netconfCapabilityChangeBuilder.setDeletedCapability(Lists.newArrayList(Collections2
.transform(removed, CAPABILITY_TO_URI)));
netconfCapabilityChangeBuilder.setAddedCapability(Lists.newArrayList(Collections2
<parent>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>binding-parent</artifactId>
- <version>3.0.6</version>
+ <version>4.0.0</version>
<relativePath/>
</parent>
import akka.util.Timeout;
import com.google.common.collect.ClassToInstanceMap;
import com.google.common.collect.ImmutableClassToInstanceMap;
-import org.opendaylight.mdsal.dom.api.DOMDataBroker;
import org.opendaylight.mdsal.dom.api.DOMDataBrokerExtension;
import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener;
+import org.opendaylight.mdsal.dom.spi.PingPongMergingDOMDataBroker;
import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
import org.opendaylight.netconf.topology.singleton.impl.tx.ProxyReadTransaction;
import org.opendaylight.netconf.topology.singleton.impl.tx.ProxyReadWriteTransaction;
import scala.concurrent.ExecutionContext;
import scala.concurrent.Future;
-public class ProxyDOMDataBroker implements DOMDataBroker {
+public class ProxyDOMDataBroker implements PingPongMergingDOMDataBroker {
private final Timeout askTimeout;
private final RemoteDeviceId id;
import com.google.common.util.concurrent.MoreExecutors;
import java.util.Optional;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeReadOperations;
import org.opendaylight.netconf.topology.singleton.messages.NormalizedNodeMessage;
import org.opendaylight.netconf.topology.singleton.messages.transactions.EmptyReadResponse;
import org.opendaylight.netconf.topology.singleton.messages.transactions.ExistsRequest;
class ReadAdapter {
- private final DOMDataTreeReadTransaction tx;
+ private final DOMDataTreeReadOperations tx;
- ReadAdapter(final DOMDataTreeReadTransaction tx) {
+ ReadAdapter(final DOMDataTreeReadOperations tx) {
this.tx = tx;
}
return true;
}
- @Override
- public void close() {
- cancel();
- }
-
@Override
public FluentFuture<Optional<NormalizedNode<?, ?>>> read(final LogicalDatastoreType store,
final YangInstanceIdentifier path) {
return true;
}
- @Override
- public void close() {
- // No-op
- }
-
@Override
public FluentFuture<Optional<NormalizedNode<?, ?>>> read(final LogicalDatastoreType store,
final YangInstanceIdentifier path) {
import akka.actor.ActorRef;
import akka.util.Timeout;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
import scala.concurrent.ExecutionContext;
import scala.concurrent.Future;
* ProxyReadTransaction uses provided {@link ActorRef} to delegate method calls to master
* {@link org.opendaylight.netconf.topology.singleton.impl.actors.ReadTransactionActor}.
*/
-public class ProxyReadTransaction extends ProxyReadWriteTransaction {
+public class ProxyReadTransaction extends ProxyReadWriteTransaction implements DOMDataTreeReadTransaction {
public ProxyReadTransaction(final RemoteDeviceId id, final Future<Object> masterTxActorFuture,
final ExecutionContext executionContext, final Timeout askTimeout) {
super(id, masterTxActorFuture, executionContext, askTimeout);
}
+
+ @Override
+ public void close() {
+ cancel();
+ }
}
return true;
}
- @Override
- public void close() {
- cancel();
- }
-
@Override
public FluentFuture<Optional<NormalizedNode<?, ?>>> read(final LogicalDatastoreType store,
final YangInstanceIdentifier path) {
import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.mdsal.dom.api.DOMDataBroker;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeReadOperations;
import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
import org.opendaylight.mdsal.dom.api.DOMMountPoint;
writeTx.commit().get(5, TimeUnit.SECONDS);
}
- private static void verifyDataInStore(final DOMDataTreeReadTransaction readTx, final YangInstanceIdentifier path,
+ private static void verifyDataInStore(final DOMDataTreeReadOperations readTx, final YangInstanceIdentifier path,
final NormalizedNode<?, ?> expNode) throws InterruptedException, ExecutionException, TimeoutException {
final Optional<NormalizedNode<?, ?>> read = readTx.read(LogicalDatastoreType.CONFIGURATION, path)
.get(5, TimeUnit.SECONDS);
import org.junit.Test;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.mdsal.common.api.ReadFailedException;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeReadOperations;
import org.opendaylight.netconf.topology.singleton.messages.NormalizedNodeMessage;
import org.opendaylight.netconf.topology.singleton.messages.transactions.EmptyReadResponse;
import org.opendaylight.netconf.topology.singleton.messages.transactions.ExistsRequest;
static final NormalizedNode<?, ?> NODE = Builders.containerBuilder()
.withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(QName.create("", "cont"))).build();
- private DOMDataTreeReadTransaction mockReadTx;
+ private DOMDataTreeReadOperations mockReadTx;
private TestProbe probe;
private ActorRef actorRef;
- public void init(final DOMDataTreeReadTransaction inMockReadTx, final ActorSystem system,
+ public void init(final DOMDataTreeReadOperations inMockReadTx, final ActorSystem system,
final ActorRef inActorRef) {
this.mockReadTx = inMockReadTx;
this.probe = TestProbe.apply(system);
import com.google.common.base.Preconditions;
import com.google.common.collect.ClassToInstanceMap;
import com.google.common.collect.ImmutableClassToInstanceMap;
-import com.google.common.util.concurrent.FluentFuture;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.MoreExecutors;
-import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.mdsal.dom.api.DOMActionResult;
import org.opendaylight.mdsal.dom.api.DOMActionService;
import org.opendaylight.mdsal.dom.api.DOMActionServiceExtension;
return new DOMActionService() {
@Override
- public FluentFuture<? extends DOMActionResult> invokeAction(final SchemaPath schemaPath,
+ public ListenableFuture<? extends DOMActionResult> invokeAction(final SchemaPath schemaPath,
final DOMDataTreeIdentifier dataTreeIdentifier, final ContainerNode input) {
Preconditions.checkNotNull(schemaPath);
Preconditions.checkNotNull(dataTreeIdentifier);
Preconditions.checkNotNull(input);
- final FluentFuture<RpcResult<NetconfMessage>> actionResultFuture = listener.sendRequest(
+ final ListenableFuture<RpcResult<NetconfMessage>> actionResultFuture = listener.sendRequest(
messageTransformer.toActionRequest(schemaPath, dataTreeIdentifier, input), input.getNodeType());
- return actionResultFuture.transform(netconfMessageRpcResult -> {
+ return Futures.transform(actionResultFuture, netconfMessageRpcResult -> {
if (netconfMessageRpcResult != null) {
return messageTransformer.toActionResult(schemaPath, netconfMessageRpcResult.getResult());
} else {
}
@Override
- public @NonNull ClassToInstanceMap<DOMActionServiceExtension> getExtensions() {
+ public ClassToInstanceMap<DOMActionServiceExtension> getExtensions() {
return ImmutableClassToInstanceMap.of();
}
};
import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
-import com.google.common.util.concurrent.FluentFuture;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
// TODO check whether the model describing create subscription is present in schema
// Perhaps add a default schema context to support create-subscription if the model was not provided
// (same as what we do for base netconf operations in transformer)
- final FluentFuture<DOMRpcResult> rpcResultListenableFuture = deviceRpc.invokeRpc(
+ final ListenableFuture<DOMRpcResult> rpcResultListenableFuture = deviceRpc.invokeRpc(
NetconfMessageTransformUtil.toPath(NetconfMessageTransformUtil.CREATE_SUBSCRIPTION_RPC_QNAME),
NetconfMessageTransformUtil.CREATE_SUBSCRIPTION_RPC_CONTENT);
import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_GET_CONFIG_PATH;
import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_RUNNING_QNAME;
-import com.google.common.util.concurrent.FluentFuture;
import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.MoreExecutors;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.concurrent.ScheduledExecutorService;
if (!lastJobSucceeded) {
onFailure(new IllegalStateException("Previous keepalive timed out"));
} else {
- currentDeviceRpc.invokeRpc(NETCONF_GET_CONFIG_PATH, KEEPALIVE_PAYLOAD).addCallback(this,
- MoreExecutors.directExecutor());
+ Futures.addCallback(currentDeviceRpc.invokeRpc(NETCONF_GET_CONFIG_PATH, KEEPALIVE_PAYLOAD), this,
+ MoreExecutors.directExecutor());
}
} catch (final NullPointerException e) {
LOG.debug("{}: Skipping keepalive while reconnecting", id);
}
scheduleKeepalives();
//Listening on the result should be done before the keepalive rpc will be send
- final long delay = (keepaliveDelaySeconds * 1000) - 500;
+ final long delay = keepaliveDelaySeconds * 1000 - 500;
schedule = executor.schedule(runnable, delay, TimeUnit.MILLISECONDS);
}
private static final class ResponseWaiting implements Runnable {
- private final FluentFuture<DOMRpcResult> rpcResultFuture;
+ private final ListenableFuture<DOMRpcResult> rpcResultFuture;
private final ResponseWaitingScheduler responseWaitingScheduler;
ResponseWaiting(final ResponseWaitingScheduler responseWaitingScheduler,
- final FluentFuture<DOMRpcResult> rpcResultFuture) {
+ final ListenableFuture<DOMRpcResult> rpcResultFuture) {
this.responseWaitingScheduler = responseWaitingScheduler;
this.rpcResultFuture = rpcResultFuture;
}
* it.
*/
private static final class RequestTimeoutTask implements Runnable {
-
- private final FluentFuture<DOMRpcResult> rpcResultFuture;
+ private final ListenableFuture<DOMRpcResult> rpcResultFuture;
private final ResponseWaiting responseWaiting;
- RequestTimeoutTask(final FluentFuture<DOMRpcResult> rpcResultFuture, final ResponseWaiting responseWaiting) {
+ RequestTimeoutTask(final ListenableFuture<DOMRpcResult> rpcResultFuture,
+ final ResponseWaiting responseWaiting) {
this.rpcResultFuture = rpcResultFuture;
this.responseWaiting = responseWaiting;
}
}
@Override
- public FluentFuture<DOMRpcResult> invokeRpc(final SchemaPath type, final NormalizedNode<?, ?> input) {
- final FluentFuture<DOMRpcResult> rpcResultFuture = deviceRpc.invokeRpc(type, input);
+ public ListenableFuture<DOMRpcResult> invokeRpc(final SchemaPath type, final NormalizedNode<?, ?> input) {
+ final ListenableFuture<DOMRpcResult> rpcResultFuture = deviceRpc.invokeRpc(type, input);
final ResponseWaiting responseWaiting = new ResponseWaiting(responseWaitingScheduler, rpcResultFuture);
responseWaiting.start();
- rpcResultFuture.addCallback(resetKeepaliveTask, MoreExecutors.directExecutor());
+ Futures.addCallback(rpcResultFuture, resetKeepaliveTask, MoreExecutors.directExecutor());
final RequestTimeoutTask timeoutTask = new RequestTimeoutTask(rpcResultFuture, responseWaiting);
executor.schedule(timeoutTask, defaultRequestTimeoutMillis, TimeUnit.MILLISECONDS);
import com.google.common.base.Preconditions;
import com.google.common.collect.ClassToInstanceMap;
import com.google.common.collect.ImmutableClassToInstanceMap;
-import org.opendaylight.mdsal.dom.api.DOMDataBroker;
import org.opendaylight.mdsal.dom.api.DOMDataBrokerExtension;
import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
import org.opendaylight.mdsal.dom.api.DOMRpcService;
import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener;
+import org.opendaylight.mdsal.dom.spi.PingPongMergingDOMDataBroker;
import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfSessionPreferences;
import org.opendaylight.netconf.sal.connect.netconf.sal.tx.ReadOnlyTx;
import org.opendaylight.netconf.sal.connect.netconf.sal.tx.ReadWriteTx;
import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-public final class NetconfDeviceDataBroker implements DOMDataBroker {
+public final class NetconfDeviceDataBroker implements PingPongMergingDOMDataBroker {
private final RemoteDeviceId id;
private final NetconfBaseOps netconfOps;
import static java.util.Objects.requireNonNull;
import com.google.common.collect.Collections2;
-import com.google.common.util.concurrent.FluentFuture;
import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.MoreExecutors;
import com.google.common.util.concurrent.SettableFuture;
import org.opendaylight.mdsal.dom.api.DOMRpcAvailabilityListener;
}
@Override
- public FluentFuture<DOMRpcResult> invokeRpc(final SchemaPath type, final NormalizedNode<?, ?> input) {
- final FluentFuture<RpcResult<NetconfMessage>> delegateFuture = communicator.sendRequest(
+ public ListenableFuture<DOMRpcResult> invokeRpc(final SchemaPath type, final NormalizedNode<?, ?> input) {
+ final ListenableFuture<RpcResult<NetconfMessage>> delegateFuture = communicator.sendRequest(
transformer.toRpcRequest(type, input), type.getLastComponent());
final SettableFuture<DOMRpcResult> ret = SettableFuture.create();
- delegateFuture.addCallback(new FutureCallback<RpcResult<NetconfMessage>>() {
+ Futures.addCallback(delegateFuture, new FutureCallback<RpcResult<NetconfMessage>>() {
@Override
- public void onSuccess(RpcResult<NetconfMessage> result) {
+ public void onSuccess(final RpcResult<NetconfMessage> result) {
ret.set(result.isSuccessful() ? transformer.toRpcResult(result.getResult(), type)
: new DefaultDOMRpcResult(result.getErrors()));
}
@Override
- public void onFailure(Throwable cause) {
+ public void onFailure(final Throwable cause) {
ret.setException(new DOMRpcImplementationNotAvailableException(cause, "Unable to invoke rpc %s", type));
}
*/
package org.opendaylight.netconf.sal.connect.netconf.sal;
-import com.google.common.util.concurrent.FluentFuture;
import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.MoreExecutors;
import com.google.common.util.concurrent.SettableFuture;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil;
import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.util.concurrent.FluentFutures;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
}
@Override
- public FluentFuture<DOMRpcResult> invokeRpc(final SchemaPath type, final NormalizedNode<?, ?> input) {
+ public ListenableFuture<DOMRpcResult> invokeRpc(final SchemaPath type, final NormalizedNode<?, ?> input) {
final MessageTransformer<NetconfMessage> transformer;
if (input instanceof AnyXmlNode) {
transformer = schemalessTransformer;
} else if (isBaseRpc(type)) {
transformer = baseRpcTransformer;
} else {
- return FluentFutures.immediateFailedFluentFuture(new DOMRpcImplementationNotAvailableException(
+ return Futures.immediateFailedFuture(new DOMRpcImplementationNotAvailableException(
"Unable to invoke rpc %s", type));
}
return handleRpc(type, input, transformer);
}
- private FluentFuture<DOMRpcResult> handleRpc(
+ private ListenableFuture<DOMRpcResult> handleRpc(
final @NonNull SchemaPath type, final @NonNull NormalizedNode<?, ?> input,
final MessageTransformer<NetconfMessage> transformer) {
- final FluentFuture<RpcResult<NetconfMessage>> delegateFuture = listener.sendRequest(
+ final ListenableFuture<RpcResult<NetconfMessage>> delegateFuture = listener.sendRequest(
transformer.toRpcRequest(type, input), type.getLastComponent());
final SettableFuture<DOMRpcResult> ret = SettableFuture.create();
- delegateFuture.addCallback(new FutureCallback<RpcResult<NetconfMessage>>() {
+ Futures.addCallback(delegateFuture, new FutureCallback<RpcResult<NetconfMessage>>() {
@Override
- public void onSuccess(RpcResult<NetconfMessage> result) {
+ public void onSuccess(final RpcResult<NetconfMessage> result) {
ret.set(result.isSuccessful() ? transformer.toRpcResult(result.getResult(), type)
: new DefaultDOMRpcResult(result.getErrors()));
}
@Override
- public void onFailure(Throwable cause) {
+ public void onFailure(final Throwable cause) {
ret.setException(new DOMRpcImplementationNotAvailableException(cause,
"Unable to invoke rpc %s on device %s", type, deviceId));
}
return delegateWriteTx.cancel();
}
- @Override
- public void close() {
- cancel();
- }
-
@Override
public void put(final LogicalDatastoreType store, final YangInstanceIdentifier path,
final NormalizedNode<?, ?> data) {
import com.google.common.base.Preconditions;
import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.MoreExecutors;
import java.util.Locale;
import java.util.Optional;
}
}
- public FluentFuture<DOMRpcResult> lock(final FutureCallback<DOMRpcResult> callback, final QName datastore) {
+ public ListenableFuture<DOMRpcResult> lock(final FutureCallback<DOMRpcResult> callback, final QName datastore) {
Preconditions.checkNotNull(callback);
Preconditions.checkNotNull(datastore);
- final FluentFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_LOCK_PATH, getLockContent(datastore));
- future.addCallback(callback, MoreExecutors.directExecutor());
+ final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_LOCK_PATH, getLockContent(datastore));
+ Futures.addCallback(future, callback, MoreExecutors.directExecutor());
return future;
}
- public FluentFuture<DOMRpcResult> lockCandidate(final FutureCallback<DOMRpcResult> callback) {
- final FluentFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_LOCK_PATH,
+ public ListenableFuture<DOMRpcResult> lockCandidate(final FutureCallback<DOMRpcResult> callback) {
+ final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_LOCK_PATH,
getLockContent(NETCONF_CANDIDATE_QNAME));
- future.addCallback(callback, MoreExecutors.directExecutor());
+ Futures.addCallback(future, callback, MoreExecutors.directExecutor());
return future;
}
-
- public FluentFuture<DOMRpcResult> lockRunning(final FutureCallback<DOMRpcResult> callback) {
- final FluentFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_LOCK_PATH,
+ public ListenableFuture<DOMRpcResult> lockRunning(final FutureCallback<DOMRpcResult> callback) {
+ final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_LOCK_PATH,
getLockContent(NETCONF_RUNNING_QNAME));
- future.addCallback(callback, MoreExecutors.directExecutor());
+ Futures.addCallback(future, callback, MoreExecutors.directExecutor());
return future;
}
- public FluentFuture<DOMRpcResult> unlock(final FutureCallback<DOMRpcResult> callback, final QName datastore) {
+ public ListenableFuture<DOMRpcResult> unlock(final FutureCallback<DOMRpcResult> callback, final QName datastore) {
Preconditions.checkNotNull(callback);
Preconditions.checkNotNull(datastore);
- final FluentFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_UNLOCK_PATH, getUnLockContent(datastore));
- future.addCallback(callback, MoreExecutors.directExecutor());
+ final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_UNLOCK_PATH, getUnLockContent(datastore));
+ Futures.addCallback(future, callback, MoreExecutors.directExecutor());
return future;
}
- public FluentFuture<DOMRpcResult> unlockRunning(final FutureCallback<DOMRpcResult> callback) {
- final FluentFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_UNLOCK_PATH,
+ public ListenableFuture<DOMRpcResult> unlockRunning(final FutureCallback<DOMRpcResult> callback) {
+ final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_UNLOCK_PATH,
getUnLockContent(NETCONF_RUNNING_QNAME));
- future.addCallback(callback, MoreExecutors.directExecutor());
+ Futures.addCallback(future, callback, MoreExecutors.directExecutor());
return future;
}
- public FluentFuture<DOMRpcResult> unlockCandidate(final FutureCallback<DOMRpcResult> callback) {
- final FluentFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_UNLOCK_PATH,
+ public ListenableFuture<DOMRpcResult> unlockCandidate(final FutureCallback<DOMRpcResult> callback) {
+ final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_UNLOCK_PATH,
getUnLockContent(NETCONF_CANDIDATE_QNAME));
- future.addCallback(callback, MoreExecutors.directExecutor());
+ Futures.addCallback(future, callback, MoreExecutors.directExecutor());
return future;
}
- public FluentFuture<DOMRpcResult> discardChanges(final FutureCallback<DOMRpcResult> callback) {
+ public ListenableFuture<DOMRpcResult> discardChanges(final FutureCallback<DOMRpcResult> callback) {
Preconditions.checkNotNull(callback);
- final FluentFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_DISCARD_CHANGES_PATH, null);
- future.addCallback(callback, MoreExecutors.directExecutor());
+ final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_DISCARD_CHANGES_PATH, null);
+ Futures.addCallback(future, callback, MoreExecutors.directExecutor());
return future;
}
- public FluentFuture<DOMRpcResult> commit(final FutureCallback<DOMRpcResult> callback) {
+ public ListenableFuture<DOMRpcResult> commit(final FutureCallback<DOMRpcResult> callback) {
Preconditions.checkNotNull(callback);
- final FluentFuture<DOMRpcResult> future = rpc.invokeRpc(NetconfMessageTransformUtil.NETCONF_COMMIT_PATH,
+ final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(NetconfMessageTransformUtil.NETCONF_COMMIT_PATH,
NetconfMessageTransformUtil.COMMIT_RPC_CONTENT);
- future.addCallback(callback, MoreExecutors.directExecutor());
+ Futures.addCallback(future, callback, MoreExecutors.directExecutor());
return future;
}
- public FluentFuture<DOMRpcResult> validate(final FutureCallback<DOMRpcResult> callback, final QName datastore) {
+ public ListenableFuture<DOMRpcResult> validate(final FutureCallback<DOMRpcResult> callback, final QName datastore) {
Preconditions.checkNotNull(callback);
Preconditions.checkNotNull(datastore);
- final FluentFuture<DOMRpcResult> future = rpc.invokeRpc(NetconfMessageTransformUtil.NETCONF_VALIDATE_PATH,
+ final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(NetconfMessageTransformUtil.NETCONF_VALIDATE_PATH,
getValidateContent(datastore));
- future.addCallback(callback, MoreExecutors.directExecutor());
+ Futures.addCallback(future, callback, MoreExecutors.directExecutor());
return future;
}
- public FluentFuture<DOMRpcResult> validateCandidate(final FutureCallback<DOMRpcResult> callback) {
+ public ListenableFuture<DOMRpcResult> validateCandidate(final FutureCallback<DOMRpcResult> callback) {
return validate(callback, NETCONF_CANDIDATE_QNAME);
}
- public FluentFuture<DOMRpcResult> validateRunning(final FutureCallback<DOMRpcResult> callback) {
+ public ListenableFuture<DOMRpcResult> validateRunning(final FutureCallback<DOMRpcResult> callback) {
return validate(callback, NETCONF_RUNNING_QNAME);
}
- public FluentFuture<DOMRpcResult> copyConfig(final FutureCallback<DOMRpcResult> callback,
+ public ListenableFuture<DOMRpcResult> copyConfig(final FutureCallback<DOMRpcResult> callback,
final QName source, final QName target) {
Preconditions.checkNotNull(callback);
Preconditions.checkNotNull(source);
Preconditions.checkNotNull(target);
- final FluentFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_COPY_CONFIG_PATH,
+ final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_COPY_CONFIG_PATH,
getCopyConfigContent(source, target));
- future.addCallback(callback, MoreExecutors.directExecutor());
+ Futures.addCallback(future, callback, MoreExecutors.directExecutor());
return future;
}
- public FluentFuture<DOMRpcResult> copyRunningToCandidate(final FutureCallback<DOMRpcResult> callback) {
+ public ListenableFuture<DOMRpcResult> copyRunningToCandidate(final FutureCallback<DOMRpcResult> callback) {
return copyConfig(callback, NETCONF_RUNNING_QNAME, NETCONF_CANDIDATE_QNAME);
}
- public FluentFuture<DOMRpcResult> getConfig(final FutureCallback<DOMRpcResult> callback, final QName datastore,
+ public ListenableFuture<DOMRpcResult> getConfig(final FutureCallback<DOMRpcResult> callback, final QName datastore,
final Optional<YangInstanceIdentifier> filterPath) {
Preconditions.checkNotNull(callback);
Preconditions.checkNotNull(datastore);
- final FluentFuture<DOMRpcResult> future;
+ final ListenableFuture<DOMRpcResult> future;
if (isFilterPresent(filterPath)) {
final DataContainerChild<?, ?> node = transformer.toFilterStructure(filterPath.get());
future = rpc.invokeRpc(NETCONF_GET_CONFIG_PATH,
NetconfMessageTransformUtil.wrap(NETCONF_GET_CONFIG_NODEID, getSourceNode(datastore)));
}
- future.addCallback(callback, MoreExecutors.directExecutor());
+ Futures.addCallback(future, callback, MoreExecutors.directExecutor());
return future;
}
- public FluentFuture<Optional<NormalizedNode<?, ?>>> getConfigRunningData(
+ public ListenableFuture<Optional<NormalizedNode<?, ?>>> getConfigRunningData(
final FutureCallback<DOMRpcResult> callback, final Optional<YangInstanceIdentifier> filterPath) {
- final FluentFuture<DOMRpcResult> configRunning = getConfigRunning(callback, filterPath);
+ final ListenableFuture<DOMRpcResult> configRunning = getConfigRunning(callback, filterPath);
return extractData(filterPath, configRunning);
}
- public FluentFuture<Optional<NormalizedNode<?, ?>>> getData(final FutureCallback<DOMRpcResult> callback,
+ public ListenableFuture<Optional<NormalizedNode<?, ?>>> getData(final FutureCallback<DOMRpcResult> callback,
final Optional<YangInstanceIdentifier> filterPath) {
- final FluentFuture<DOMRpcResult> configRunning = get(callback, filterPath);
+ final ListenableFuture<DOMRpcResult> configRunning = get(callback, filterPath);
return extractData(filterPath, configRunning);
}
- private FluentFuture<Optional<NormalizedNode<?, ?>>> extractData(
- final Optional<YangInstanceIdentifier> path, final FluentFuture<DOMRpcResult> configRunning) {
- return configRunning.transform(result -> {
+ private ListenableFuture<Optional<NormalizedNode<?, ?>>> extractData(
+ final Optional<YangInstanceIdentifier> path, final ListenableFuture<DOMRpcResult> configRunning) {
+ return Futures.transform(configRunning, result -> {
Preconditions.checkArgument(result.getErrors().isEmpty(), "Unable to read data: %s, errors: %s", path,
result.getErrors());
final DataContainerChild<? extends YangInstanceIdentifier.PathArgument, ?> dataNode =
}, MoreExecutors.directExecutor());
}
- public FluentFuture<DOMRpcResult> getConfigRunning(final FutureCallback<DOMRpcResult> callback,
+ public ListenableFuture<DOMRpcResult> getConfigRunning(final FutureCallback<DOMRpcResult> callback,
final Optional<YangInstanceIdentifier> filterPath) {
return getConfig(callback, NETCONF_RUNNING_QNAME, filterPath);
}
- public FluentFuture<DOMRpcResult> getConfigCandidate(final FutureCallback<DOMRpcResult> callback,
+ public ListenableFuture<DOMRpcResult> getConfigCandidate(final FutureCallback<DOMRpcResult> callback,
final Optional<YangInstanceIdentifier> filterPath) {
return getConfig(callback, NETCONF_CANDIDATE_QNAME, filterPath);
}
- public FluentFuture<DOMRpcResult> get(final FutureCallback<DOMRpcResult> callback,
+ public ListenableFuture<DOMRpcResult> get(final FutureCallback<DOMRpcResult> callback,
final Optional<YangInstanceIdentifier> filterPath) {
Preconditions.checkNotNull(callback);
- final FluentFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_GET_PATH, isFilterPresent(filterPath)
+ final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(NETCONF_GET_PATH, isFilterPresent(filterPath)
? NetconfMessageTransformUtil.wrap(NETCONF_GET_NODEID, toFilterStructure(filterPath.get(), schemaContext))
: NetconfMessageTransformUtil.GET_RPC_CONTENT);
- future.addCallback(callback, MoreExecutors.directExecutor());
+ Futures.addCallback(future, callback, MoreExecutors.directExecutor());
return future;
}
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.verify;
-import com.google.common.util.concurrent.FluentFuture;
import com.google.common.util.concurrent.Futures;
import java.util.Collection;
import java.util.Collections;
@Test
public void testInvokeRpc() throws Exception {
NormalizedNode<?, ?> input = createNode("urn:ietf:params:xml:ns:netconf:base:1.0", "2011-06-01", "filter");
- final FluentFuture<DOMRpcResult> future = rpc.invokeRpc(path, input);
- final DOMRpcResult result = future.get();
+ final DOMRpcResult result = rpc.invokeRpc(path, input).get();
Assert.assertEquals(expectedReply, result);
}
import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.mdsal.common.api.ReadFailedException;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeReadOperations;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
this.outstanding = total;
}
- static BatchedExistenceCheck start(final DOMDataTreeReadTransaction readTx,
+ static BatchedExistenceCheck start(final DOMDataTreeReadOperations readTx,
final LogicalDatastoreType datastore, final YangInstanceIdentifier parentPath,
final Collection<? extends NormalizedNode<?, ?>> children) {
final BatchedExistenceCheck ret = new BatchedExistenceCheck(children.size());
import com.google.common.collect.ImmutableList;
import com.google.common.util.concurrent.FluentFuture;
import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.MoreExecutors;
import java.io.Closeable;
import java.util.ArrayList;
import org.opendaylight.mdsal.dom.api.DOMDataBroker;
import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeReadOperations;
import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
}
// RPC
- public FluentFuture<DOMRpcResult> invokeRpc(final SchemaPath type, final NormalizedNode<?, ?> input) {
+ public ListenableFuture<DOMRpcResult> invokeRpc(final SchemaPath type, final NormalizedNode<?, ?> input) {
if (this.rpcService == null) {
throw new RestconfDocumentedException(Status.SERVICE_UNAVAILABLE);
}
listener.setRegistration(registration);
}
- private NormalizedNode<?, ?> readDataViaTransaction(final DOMDataTreeReadTransaction transaction,
+ private NormalizedNode<?, ?> readDataViaTransaction(final DOMDataTreeReadOperations transaction,
final LogicalDatastoreType datastore, final YangInstanceIdentifier path) {
return readDataViaTransaction(transaction, datastore, path, null);
}
- private NormalizedNode<?, ?> readDataViaTransaction(final DOMDataTreeReadTransaction transaction,
+ private NormalizedNode<?, ?> readDataViaTransaction(final DOMDataTreeReadOperations transaction,
final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final String withDefa) {
LOG.trace("Read {} via Restconf: {}", datastore.name(), path);
import com.google.common.collect.ImmutableClassToInstanceMap;
import com.google.common.collect.Lists;
import com.google.common.util.concurrent.FluentFuture;
+import com.google.common.util.concurrent.ListenableFuture;
import java.util.ArrayList;
import java.util.Optional;
import org.junit.Before;
final DOMRpcResult expResult = mock(DOMRpcResult.class);
doReturn(immediateFluentFuture(expResult)).when(this.mockRpcService).invokeRpc(this.type, this.dummyNode);
- final FluentFuture<DOMRpcResult> actualFuture = this.brokerFacade.invokeRpc(this.type, this.dummyNode);
+ final ListenableFuture<DOMRpcResult> actualFuture = this.brokerFacade.invokeRpc(this.type, this.dummyNode);
assertNotNull("Future is null", actualFuture);
final DOMRpcResult actualResult = actualFuture.get();
assertSame("invokeRpc", expResult, actualResult);
import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableList;
-import com.google.common.util.concurrent.FluentFuture;
+import com.google.common.util.concurrent.ListenableFuture;
import java.util.List;
import java.util.concurrent.ExecutionException;
import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
* if the Future throws an exception
*/
@SuppressWarnings("checkstyle:IllegalCatch")
- static <T> void addCallback(final FluentFuture<T> listenableFuture, final String txType,
+ static <T> void addCallback(final ListenableFuture<T> listenableFuture, final String txType,
final FutureDataFactory<? super T> dataFactory) throws RestconfDocumentedException {
try {
import javax.ws.rs.core.Response.Status;
import org.opendaylight.mdsal.common.api.CommitInfo;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeReadOperations;
import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
* @param store Datastore
* @param path Path to be checked
*/
- public static void checkItemExistsWithinTransaction(final DOMDataTreeReadTransaction rwTransaction,
+ public static void checkItemExistsWithinTransaction(final DOMDataTreeReadOperations rwTransaction,
final LogicalDatastoreType store, final YangInstanceIdentifier path) {
final FluentFuture<Boolean> future = rwTransaction.exists(store, path);
final FutureDataFactory<Boolean> response = new FutureDataFactory<>();
* @param store Datastore
* @param path Path to be checked
*/
- public static void checkItemDoesNotExistsWithinTransaction(final DOMDataTreeReadTransaction rwTransaction,
+ public static void checkItemDoesNotExistsWithinTransaction(final DOMDataTreeReadOperations rwTransaction,
final LogicalDatastoreType store, final YangInstanceIdentifier path) {
final FluentFuture<Boolean> future = rwTransaction.exists(store, path);
final FutureDataFactory<Boolean> response = new FutureDataFactory<>();
*/
package org.opendaylight.restconf.nb.rfc8040.rests.utils;
-import com.google.common.util.concurrent.FluentFuture;
+import com.google.common.util.concurrent.ListenableFuture;
import java.util.Optional;
import java.util.concurrent.CancellationException;
import javax.ws.rs.core.Response.Status;
final SchemaPath schemaPath) {
final Optional<DOMRpcService> mountPointService = mountPoint.getService(DOMRpcService.class);
if (mountPointService.isPresent()) {
- final FluentFuture<DOMRpcResult> rpc = mountPointService.get().invokeRpc(schemaPath, data);
+ final ListenableFuture<DOMRpcResult> rpc = mountPointService.get().invokeRpc(schemaPath, data);
return prepareResult(rpc);
}
final String errmsg = "RPC service is missing.";
throw new RestconfDocumentedException(Status.SERVICE_UNAVAILABLE);
}
- final FluentFuture<DOMRpcResult> rpc = rpcService.invokeRpc(schemaPath, data);
+ final ListenableFuture<DOMRpcResult> rpc = rpcService.invokeRpc(schemaPath, data);
return prepareResult(rpc);
}
}
}
- private static DOMRpcResult prepareResult(final FluentFuture<DOMRpcResult> rpc) {
+ private static DOMRpcResult prepareResult(final ListenableFuture<DOMRpcResult> rpc) {
final RpcResultFactory dataFactory = new RpcResultFactory();
FutureCallbackTx.addCallback(rpc, RestconfDataServiceConstant.PostData.POST_TX_TYPE, dataFactory);
return dataFactory.build();
import org.opendaylight.mdsal.dom.api.DOMDataBroker;
import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeReadOperations;
import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
import org.opendaylight.mdsal.dom.api.DOMNotificationListener;
import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
}
static boolean checkExist(final SchemaContext schemaContext,
- final DOMDataTreeReadTransaction readWriteTransaction) {
+ final DOMDataTreeReadOperations readWriteTransaction) {
boolean exist;
try {
exist = readWriteTransaction.exists(LogicalDatastoreType.OPERATIONAL,
<parent>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>binding-parent</artifactId>
- <version>3.0.6</version>
+ <version>4.0.0</version>
<relativePath/>
</parent>