From: Robert Varga Date: Mon, 5 Nov 2018 00:04:50 +0000 (+0100) Subject: Migrate restconf to MD-SAL APIs X-Git-Tag: release/neon~99^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=b7537d2482ffb05582749ce80a7ca44c64a5ad6c;p=netconf.git Migrate restconf to MD-SAL APIs This performs a mass-migration to MD-SAL APIs, switching Optional to Java 8 and eliminating all references to CheckedFuture. Change-Id: I4df9679ab0f16239a43a1df90eca3c6106ee7f75 Signed-off-by: Robert Varga --- diff --git a/restconf/restconf-common/pom.xml b/restconf/restconf-common/pom.xml index 6ac32645af..e9babe1d05 100644 --- a/restconf/restconf-common/pom.xml +++ b/restconf/restconf-common/pom.xml @@ -47,8 +47,8 @@ - org.opendaylight.controller - sal-core-api + org.opendaylight.mdsal + mdsal-dom-api diff --git a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/context/InstanceIdentifierContext.java b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/context/InstanceIdentifierContext.java index ed829fbd5d..99cde03fe7 100644 --- a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/context/InstanceIdentifierContext.java +++ b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/context/InstanceIdentifierContext.java @@ -7,7 +7,7 @@ */ package org.opendaylight.restconf.common.context; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaNode; @@ -42,5 +42,4 @@ public class InstanceIdentifierContext { public SchemaContext getSchemaContext() { return schemaContext; } - } diff --git a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/errors/RestconfDocumentedException.java b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/errors/RestconfDocumentedException.java index 0d1868e03d..b6dcf42559 100644 --- a/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/errors/RestconfDocumentedException.java +++ b/restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/errors/RestconfDocumentedException.java @@ -10,13 +10,14 @@ package org.opendaylight.restconf.common.errors; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Lists; +import java.util.ArrayList; import java.util.Collection; import java.util.List; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response.Status; import org.opendaylight.restconf.common.errors.RestconfError.ErrorTag; import org.opendaylight.restconf.common.errors.RestconfError.ErrorType; +import org.opendaylight.yangtools.yang.common.OperationFailedException; import org.opendaylight.yangtools.yang.common.RpcError; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; @@ -162,8 +163,20 @@ public class RestconfDocumentedException extends WebApplicationException { status = null; } + public static RestconfDocumentedException decodeAndThrow(final String message, + final OperationFailedException cause) { + for (final RpcError error : cause.getErrorList()) { + if (error.getErrorType() == RpcError.ErrorType.TRANSPORT + && error.getTag().equals(ErrorTag.RESOURCE_DENIED.getTagValue())) { + throw new RestconfDocumentedException(error.getMessage(), ErrorType.TRANSPORT, + ErrorTag.RESOURCE_DENIED_TRANSPORT, cause); + } + } + throw new RestconfDocumentedException(message, cause, cause.getErrorList()); + } + private static List convertToRestconfErrors(final Collection rpcErrors) { - final List errorList = Lists.newArrayList(); + final List errorList = new ArrayList<>(); if (rpcErrors != null) { for (RpcError rpcError : rpcErrors) { errorList.add(new RestconfError(rpcError)); diff --git a/restconf/restconf-nb-bierman02/pom.xml b/restconf/restconf-nb-bierman02/pom.xml index 5a0eb09af4..99b7df558b 100644 --- a/restconf/restconf-nb-bierman02/pom.xml +++ b/restconf/restconf-nb-bierman02/pom.xml @@ -35,12 +35,12 @@ test - org.opendaylight.controller - sal-connector-api + org.opendaylight.mdsal + mdsal-dom-api - org.opendaylight.controller - sal-core-api + org.opendaylight.mdsal + mdsal-dom-spi com.google.code.gson @@ -58,10 +58,6 @@ org.opendaylight.controller sal-common-impl - - org.opendaylight.controller - sal-binding-broker-impl - org.opendaylight.yangtools yang-data-api @@ -99,10 +95,6 @@ jaxrs-api provided - - org.opendaylight.controller - sal-core-spi - org.opendaylight.yangtools yang-data-codec-gson @@ -186,8 +178,13 @@ test - org.opendaylight.controller - sal-binding-broker-impl + org.opendaylight.mdsal + mdsal-binding-dom-adapter + test + + + org.opendaylight.mdsal + mdsal-binding-dom-adapter test-jar test diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/api/JSONRestconfService.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/api/JSONRestconfService.java index 17651af566..f8083d4428 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/api/JSONRestconfService.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/api/JSONRestconfService.java @@ -10,11 +10,9 @@ package org.opendaylight.netconf.sal.restconf.api; import com.google.common.base.Optional; import javax.annotation.Nonnull; import javax.ws.rs.core.MultivaluedMap; - -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.yangtools.yang.common.OperationFailedException; - /** * Provides restconf CRUD operations via code with input/output data in JSON format. * diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BatchedExistenceCheck.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BatchedExistenceCheck.java index 132e02256c..57428b90b6 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BatchedExistenceCheck.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BatchedExistenceCheck.java @@ -19,9 +19,9 @@ import java.util.Map.Entry; import java.util.concurrent.ExecutionException; import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; import javax.annotation.Nonnull; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; -import org.opendaylight.controller.md.sal.dom.api.DOMDataReadTransaction; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.mdsal.common.api.ReadFailedException; +import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -38,7 +38,7 @@ final class BatchedExistenceCheck { this.outstanding = total; } - static BatchedExistenceCheck start(final DOMDataReadTransaction readTx, + static BatchedExistenceCheck start(final DOMDataTreeReadTransaction readTx, final LogicalDatastoreType datastore, final YangInstanceIdentifier parentPath, final Collection> children) { final BatchedExistenceCheck ret = new BatchedExistenceCheck(children.size()); diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BrokerFacade.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BrokerFacade.java index ffe11aed7a..3794ac503d 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BrokerFacade.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BrokerFacade.java @@ -7,15 +7,14 @@ */ package org.opendaylight.netconf.sal.restconf.impl; -import static org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType.CONFIGURATION; -import static org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType.OPERATIONAL; +import static org.opendaylight.mdsal.common.api.LogicalDatastoreType.CONFIGURATION; +import static org.opendaylight.mdsal.common.api.LogicalDatastoreType.OPERATIONAL; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; +import com.google.common.base.Throwables; import com.google.common.collect.ImmutableList; -import com.google.common.util.concurrent.CheckedFuture; +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.MoreExecutors; import java.io.Closeable; import java.util.ArrayList; @@ -24,25 +23,24 @@ import java.util.Iterator; import java.util.List; import java.util.Map.Entry; import java.util.Objects; +import java.util.Optional; import java.util.concurrent.CountDownLatch; -import javax.annotation.Nullable; +import java.util.concurrent.ExecutionException; import javax.ws.rs.core.Response.Status; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; -import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; -import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; -import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction; -import org.opendaylight.controller.md.sal.dom.api.DOMDataReadTransaction; -import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction; -import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeService; -import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeIdentifier; -import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; -import org.opendaylight.controller.md.sal.dom.api.DOMNotificationListener; -import org.opendaylight.controller.md.sal.dom.api.DOMNotificationService; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcException; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; +import org.opendaylight.mdsal.common.api.CommitInfo; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.mdsal.common.api.ReadFailedException; +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.DOMDataTreeReadWriteTransaction; +import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; +import org.opendaylight.mdsal.dom.api.DOMNotificationListener; +import org.opendaylight.mdsal.dom.api.DOMNotificationService; +import org.opendaylight.mdsal.dom.api.DOMRpcResult; +import org.opendaylight.mdsal.dom.api.DOMRpcService; import org.opendaylight.netconf.sal.streams.listeners.ListenerAdapter; import org.opendaylight.netconf.sal.streams.listeners.NotificationListenerAdapter; import org.opendaylight.restconf.common.context.InstanceIdentifierContext; @@ -58,7 +56,6 @@ import org.opendaylight.restconf.common.patch.PatchStatusEntity; import org.opendaylight.restconf.common.util.DataChangeScope; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.common.RpcError; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; @@ -138,7 +135,7 @@ public class BrokerFacade implements Closeable { * @return read date */ public NormalizedNode readConfigurationData(final YangInstanceIdentifier path, final String withDefa) { - try (DOMDataReadOnlyTransaction tx = this.domDataBroker.newReadOnlyTransaction()) { + try (DOMDataTreeReadTransaction tx = this.domDataBroker.newReadOnlyTransaction()) { return readDataViaTransaction(tx, CONFIGURATION, path, withDefa); } } @@ -172,7 +169,7 @@ public class BrokerFacade implements Closeable { final String withDefa) { final Optional domDataBrokerService = mountPoint.getService(DOMDataBroker.class); if (domDataBrokerService.isPresent()) { - try (DOMDataReadOnlyTransaction tx = domDataBrokerService.get().newReadOnlyTransaction()) { + try (DOMDataTreeReadTransaction tx = domDataBrokerService.get().newReadOnlyTransaction()) { return readDataViaTransaction(tx, CONFIGURATION, path, withDefa); } } @@ -187,7 +184,7 @@ public class BrokerFacade implements Closeable { * @return read data */ public NormalizedNode readOperationalData(final YangInstanceIdentifier path) { - try (DOMDataReadOnlyTransaction tx = this.domDataBroker.newReadOnlyTransaction()) { + try (DOMDataTreeReadTransaction tx = this.domDataBroker.newReadOnlyTransaction()) { return readDataViaTransaction(tx, OPERATIONAL, path); } } @@ -204,7 +201,7 @@ public class BrokerFacade implements Closeable { public NormalizedNode readOperationalData(final DOMMountPoint mountPoint, final YangInstanceIdentifier path) { final Optional domDataBrokerService = mountPoint.getService(DOMDataBroker.class); if (domDataBrokerService.isPresent()) { - try (DOMDataReadOnlyTransaction tx = domDataBrokerService.get().newReadOnlyTransaction()) { + try (DOMDataTreeReadTransaction tx = domDataBrokerService.get().newReadOnlyTransaction()) { return readDataViaTransaction(tx, OPERATIONAL, path); } } @@ -237,10 +234,10 @@ public class BrokerFacade implements Closeable { Preconditions.checkNotNull(path); Preconditions.checkNotNull(payload); - final DOMDataReadWriteTransaction newReadWriteTransaction = this.domDataBroker.newReadWriteTransaction(); + final DOMDataTreeReadWriteTransaction newReadWriteTransaction = this.domDataBroker.newReadWriteTransaction(); final Status status = readDataViaTransaction(newReadWriteTransaction, CONFIGURATION, path) != null ? Status.OK : Status.CREATED; - final CheckedFuture future = putDataViaTransaction( + final FluentFuture future = putDataViaTransaction( newReadWriteTransaction, CONFIGURATION, path, payload, globalSchema, insert, point); return new PutResult(status, future); } @@ -274,11 +271,11 @@ public class BrokerFacade implements Closeable { final Optional domDataBrokerService = mountPoint.getService(DOMDataBroker.class); if (domDataBrokerService.isPresent()) { - final DOMDataReadWriteTransaction newReadWriteTransaction = + final DOMDataTreeReadWriteTransaction newReadWriteTransaction = domDataBrokerService.get().newReadWriteTransaction(); final Status status = readDataViaTransaction(newReadWriteTransaction, CONFIGURATION, path) != null ? Status.OK : Status.CREATED; - final CheckedFuture future = putDataViaTransaction( + final FluentFuture future = putDataViaTransaction( newReadWriteTransaction, CONFIGURATION, path, payload, mountPoint.getSchemaContext(), insert, point); return new PutResult(status, future); @@ -292,7 +289,7 @@ public class BrokerFacade implements Closeable { // get new transaction and schema context on server or on mounted device final SchemaContext schemaContext; - final DOMDataReadWriteTransaction patchTransaction; + final DOMDataTreeReadWriteTransaction patchTransaction; if (mountPoint == null) { schemaContext = patchContext.getInstanceIdentifierContext().getSchemaContext(); patchTransaction = this.domDataBroker.newReadWriteTransaction(); @@ -416,12 +413,12 @@ public class BrokerFacade implements Closeable { // if no errors commit transaction final CountDownLatch waiter = new CountDownLatch(1); - final CheckedFuture future = patchTransaction.submit(); + final FluentFuture future = patchTransaction.commit(); final PatchStatusContextHelper status = new PatchStatusContextHelper(); - Futures.addCallback(future, new FutureCallback() { + future.addCallback(new FutureCallback() { @Override - public void onSuccess(@Nullable final Void result) { + public void onSuccess(final CommitInfo result) { status.setStatus(new PatchStatusContext(patchContext.getPatchId(), ImmutableList.copyOf(editCollection), true, null)); waiter.countDown(); @@ -443,14 +440,14 @@ public class BrokerFacade implements Closeable { } // POST configuration - public CheckedFuture commitConfigurationDataPost( + public FluentFuture commitConfigurationDataPost( final SchemaContext globalSchema, final YangInstanceIdentifier path, final NormalizedNode payload, final String insert, final String point) { return postDataViaTransaction(this.domDataBroker.newReadWriteTransaction(), CONFIGURATION, path, payload, globalSchema, insert, point); } - public CheckedFuture commitConfigurationDataPost( + public FluentFuture commitConfigurationDataPost( final DOMMountPoint mountPoint, final YangInstanceIdentifier path, final NormalizedNode payload, final String insert, final String point) { final Optional domDataBrokerService = mountPoint.getService(DOMDataBroker.class); @@ -462,12 +459,11 @@ public class BrokerFacade implements Closeable { } // DELETE configuration - public CheckedFuture commitConfigurationDataDelete( - final YangInstanceIdentifier path) { + public FluentFuture commitConfigurationDataDelete(final YangInstanceIdentifier path) { return deleteDataViaTransaction(this.domDataBroker.newReadWriteTransaction(), CONFIGURATION, path); } - public CheckedFuture commitConfigurationDataDelete( + public FluentFuture commitConfigurationDataDelete( final DOMMountPoint mountPoint, final YangInstanceIdentifier path) { final Optional domDataBrokerService = mountPoint.getService(DOMDataBroker.class); if (domDataBrokerService.isPresent()) { @@ -477,8 +473,7 @@ public class BrokerFacade implements Closeable { } // RPC - public CheckedFuture invokeRpc(final SchemaPath type, - final NormalizedNode input) { + public FluentFuture invokeRpc(final SchemaPath type, final NormalizedNode input) { if (this.rpcService == null) { throw new RestconfDocumentedException(Status.SERVICE_UNAVAILABLE); } @@ -493,8 +488,8 @@ public class BrokerFacade implements Closeable { } final YangInstanceIdentifier path = listener.getPath(); - DOMDataTreeChangeService changeService = (DOMDataTreeChangeService) - this.domDataBroker.getSupportedExtensions().get(DOMDataTreeChangeService.class); + DOMDataTreeChangeService changeService = this.domDataBroker.getExtensions() + .getInstance(DOMDataTreeChangeService.class); if (changeService == null) { throw new UnsupportedOperationException("DOMDataBroker does not support the DOMDataTreeChangeService" + this.domDataBroker); @@ -505,31 +500,26 @@ public class BrokerFacade implements Closeable { listener.setRegistration(registration); } - private NormalizedNode readDataViaTransaction(final DOMDataReadTransaction transaction, + private NormalizedNode readDataViaTransaction(final DOMDataTreeReadTransaction transaction, final LogicalDatastoreType datastore, final YangInstanceIdentifier path) { return readDataViaTransaction(transaction, datastore, path, null); } - private NormalizedNode readDataViaTransaction(final DOMDataReadTransaction transaction, + private NormalizedNode readDataViaTransaction(final DOMDataTreeReadTransaction transaction, final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final String withDefa) { LOG.trace("Read {} via Restconf: {}", datastore.name(), path); try { - final Optional> optional = transaction.read(datastore, path).checkedGet(); + final Optional> optional = transaction.read(datastore, path).get(); return !optional.isPresent() ? null : withDefa == null ? optional.get() : prepareDataByParamWithDef(optional.get(), path, withDefa); - } catch (ReadFailedException e) { + } catch (InterruptedException e) { LOG.warn("Error reading {} from datastore {}", path, datastore.name(), e); - for (final RpcError error : e.getErrorList()) { - if (error.getErrorType() == RpcError.ErrorType.TRANSPORT - && error.getTag().equals(ErrorTag.RESOURCE_DENIED.getTagValue())) { - throw new RestconfDocumentedException( - error.getMessage(), - ErrorType.TRANSPORT, - ErrorTag.RESOURCE_DENIED_TRANSPORT, e); - } - } - throw new RestconfDocumentedException("Error reading data.", e, e.getErrorList()); + throw new RestconfDocumentedException("Error reading data.", e); + } catch (ExecutionException e) { + LOG.warn("Error reading {} from datastore {}", path, datastore.name(), e); + throw RestconfDocumentedException.decodeAndThrow("Error reading data.", Throwables.getCauseAs(e, + ReadFailedException.class)); } } @@ -660,26 +650,26 @@ public class BrokerFacade implements Closeable { /** * POST data and submit transaction {@link DOMDataReadWriteTransaction}. */ - private CheckedFuture postDataViaTransaction( - final DOMDataReadWriteTransaction rwTransaction, final LogicalDatastoreType datastore, + private FluentFuture postDataViaTransaction( + final DOMDataTreeReadWriteTransaction rwTransaction, final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload, final SchemaContext schemaContext, final String insert, final String point) { LOG.trace("POST {} via Restconf: {} with payload {}", datastore.name(), path, payload); postData(rwTransaction, datastore, path, payload, schemaContext, insert, point); - return rwTransaction.submit(); + return rwTransaction.commit(); } /** * POST data and do NOT submit transaction {@link DOMDataReadWriteTransaction}. */ private void postDataWithinTransaction( - final DOMDataReadWriteTransaction rwTransaction, final LogicalDatastoreType datastore, + final DOMDataTreeReadWriteTransaction rwTransaction, final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload, final SchemaContext schemaContext) { LOG.trace("POST {} within Restconf Patch: {} with payload {}", datastore.name(), path, payload); postData(rwTransaction, datastore, path, payload, schemaContext, null, null); } - private void postData(final DOMDataReadWriteTransaction rwTransaction, final LogicalDatastoreType datastore, + private void postData(final DOMDataTreeReadWriteTransaction rwTransaction, final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload, final SchemaContext schemaContext, final String insert, final String point) { if (insert == null) { @@ -769,7 +759,7 @@ public class BrokerFacade implements Closeable { } } - private void insertWithPointLeafListPost(final DOMDataReadWriteTransaction rwTransaction, + private void insertWithPointLeafListPost(final DOMDataTreeReadWriteTransaction rwTransaction, final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload, final SchemaContext schemaContext, final String point, final OrderedLeafSetNode readLeafList, final boolean before) { @@ -801,7 +791,7 @@ public class BrokerFacade implements Closeable { } } - private void insertWithPointListPost(final DOMDataReadWriteTransaction rwTransaction, + private void insertWithPointListPost(final DOMDataTreeReadWriteTransaction rwTransaction, final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload, final SchemaContext schemaContext, final String point, final MapNode readList, final boolean before) { @@ -855,7 +845,7 @@ public class BrokerFacade implements Closeable { throw new RestconfDocumentedException("Insert parameter can be used only with list or leaf-list"); } - private static void makeNormalPost(final DOMDataReadWriteTransaction rwTransaction, + private static void makeNormalPost(final DOMDataTreeReadWriteTransaction rwTransaction, final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload, final SchemaContext schemaContext) { final Collection> children; @@ -910,7 +900,7 @@ public class BrokerFacade implements Closeable { } } - private static void simplePostPut(final DOMDataReadWriteTransaction rwTransaction, + private static void simplePostPut(final DOMDataTreeReadWriteTransaction rwTransaction, final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload, final SchemaContext schemaContext) { checkItemDoesNotExists(rwTransaction, datastore, path); @@ -918,14 +908,17 @@ public class BrokerFacade implements Closeable { rwTransaction.put(datastore, path, payload); } - private static boolean doesItemExist(final DOMDataReadWriteTransaction rwTransaction, + private static boolean doesItemExist(final DOMDataTreeReadWriteTransaction rwTransaction, final LogicalDatastoreType store, final YangInstanceIdentifier path) { try { - return rwTransaction.exists(store, path).checkedGet(); - } catch (ReadFailedException e) { + return rwTransaction.exists(store, path).get(); + } catch (InterruptedException e) { + rwTransaction.cancel(); + throw new RestconfDocumentedException("Could not determine the existence of path " + path, e); + } catch (ExecutionException e) { rwTransaction.cancel(); - throw new RestconfDocumentedException("Could not determine the existence of path " + path, - e, e.getErrorList()); + throw RestconfDocumentedException.decodeAndThrow("Could not determine the existence of path " + path, + Throwables.getCauseAs(e, ReadFailedException.class)); } } @@ -935,7 +928,7 @@ public class BrokerFacade implements Closeable { * @param store Used datastore * @param path Path to item to verify its existence */ - private static void checkItemExists(final DOMDataReadWriteTransaction rwTransaction, + private static void checkItemExists(final DOMDataTreeReadWriteTransaction rwTransaction, final LogicalDatastoreType store, final YangInstanceIdentifier path) { if (!doesItemExist(rwTransaction, store, path)) { LOG.trace("Operation via Restconf was not executed because data at {} does not exist", path); @@ -951,7 +944,7 @@ public class BrokerFacade implements Closeable { * @param store Used datastore * @param path Path to item to verify its existence */ - private static void checkItemDoesNotExists(final DOMDataReadWriteTransaction rwTransaction, + private static void checkItemDoesNotExists(final DOMDataTreeReadWriteTransaction rwTransaction, final LogicalDatastoreType store, final YangInstanceIdentifier path) { if (doesItemExist(rwTransaction, store, path)) { LOG.trace("Operation via Restconf was not executed because data at {} already exists", path); @@ -969,27 +962,27 @@ public class BrokerFacade implements Closeable { * @param insert * insert */ - private CheckedFuture putDataViaTransaction( - final DOMDataReadWriteTransaction readWriteTransaction, final LogicalDatastoreType datastore, + private FluentFuture putDataViaTransaction( + final DOMDataTreeReadWriteTransaction readWriteTransaction, final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload, final SchemaContext schemaContext, final String insert, final String point) { LOG.trace("Put {} via Restconf: {} with payload {}", datastore.name(), path, payload); putData(readWriteTransaction, datastore, path, payload, schemaContext, insert, point); - return readWriteTransaction.submit(); + return readWriteTransaction.commit(); } /** * PUT data and do NOT submit {@link DOMDataReadWriteTransaction}. */ private void putDataWithinTransaction( - final DOMDataReadWriteTransaction writeTransaction, final LogicalDatastoreType datastore, + final DOMDataTreeReadWriteTransaction writeTransaction, final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload, final SchemaContext schemaContext) { LOG.trace("Put {} within Restconf Patch: {} with payload {}", datastore.name(), path, payload); putData(writeTransaction, datastore, path, payload, schemaContext, null, null); } // FIXME: This is doing correct put for container and list children, not sure if this will work for choice case - private void putData(final DOMDataReadWriteTransaction rwTransaction, final LogicalDatastoreType datastore, + private void putData(final DOMDataTreeReadWriteTransaction rwTransaction, final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload, final SchemaContext schemaContext, final String insert, final String point) { if (insert == null) { @@ -1076,7 +1069,7 @@ public class BrokerFacade implements Closeable { } } - private void insertWithPointLeafListPut(final DOMDataWriteTransaction tx, + private void insertWithPointLeafListPut(final DOMDataTreeWriteTransaction tx, final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload, final SchemaContext schemaContext, final String point, final OrderedLeafSetNode readLeafList, final boolean before) { @@ -1106,7 +1099,7 @@ public class BrokerFacade implements Closeable { } } - private void insertWithPointListPut(final DOMDataWriteTransaction tx, final LogicalDatastoreType datastore, + private void insertWithPointListPut(final DOMDataTreeWriteTransaction tx, final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload, final SchemaContext schemaContext, final String point, final OrderedMapNode readList, final boolean before) { tx.delete(datastore, path.getParent()); @@ -1135,7 +1128,7 @@ public class BrokerFacade implements Closeable { } } - private static void makePut(final DOMDataWriteTransaction tx, final LogicalDatastoreType datastore, + private static void makePut(final DOMDataTreeWriteTransaction tx, final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload, final SchemaContext schemaContext) { if (payload instanceof MapNode) { final NormalizedNode emptySubtree = ImmutableNodes.fromInstanceId(schemaContext, path); @@ -1151,27 +1144,28 @@ public class BrokerFacade implements Closeable { } private static void simplePut(final LogicalDatastoreType datastore, final YangInstanceIdentifier path, - final DOMDataWriteTransaction tx, final SchemaContext schemaContext, final NormalizedNode payload) { + final DOMDataTreeWriteTransaction tx, final SchemaContext schemaContext, + final NormalizedNode payload) { ensureParentsByMerge(datastore, path, tx, schemaContext); tx.put(datastore, path, payload); } - private static CheckedFuture deleteDataViaTransaction( - final DOMDataReadWriteTransaction readWriteTransaction, final LogicalDatastoreType datastore, + private static FluentFuture deleteDataViaTransaction( + final DOMDataTreeReadWriteTransaction readWriteTransaction, final LogicalDatastoreType datastore, final YangInstanceIdentifier path) { LOG.trace("Delete {} via Restconf: {}", datastore.name(), path); checkItemExists(readWriteTransaction, datastore, path); readWriteTransaction.delete(datastore, path); - return readWriteTransaction.submit(); + return readWriteTransaction.commit(); } - private static void deleteDataWithinTransaction(final DOMDataWriteTransaction tx, + private static void deleteDataWithinTransaction(final DOMDataTreeWriteTransaction tx, final LogicalDatastoreType datastore, final YangInstanceIdentifier path) { LOG.trace("Delete {} within Restconf Patch: {}", datastore.name(), path); tx.delete(datastore, path); } - private static void mergeDataWithinTransaction(final DOMDataWriteTransaction tx, + private static void mergeDataWithinTransaction(final DOMDataTreeWriteTransaction tx, final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload, final SchemaContext schemaContext) { LOG.trace("Merge {} within Restconf Patch: {} with payload {}", datastore.name(), path, payload); @@ -1195,7 +1189,7 @@ public class BrokerFacade implements Closeable { } private static void ensureParentsByMerge(final LogicalDatastoreType store, - final YangInstanceIdentifier normalizedPath, final DOMDataWriteTransaction tx, + final YangInstanceIdentifier normalizedPath, final DOMDataTreeWriteTransaction tx, final SchemaContext schemaContext) { final List normalizedPathWithoutChildArgs = new ArrayList<>(); YangInstanceIdentifier rootNormalizedPath = null; diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/ControllerContext.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/ControllerContext.java index 677ec32bde..04be54c818 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/ControllerContext.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/ControllerContext.java @@ -7,7 +7,6 @@ */ package org.opendaylight.netconf.sal.restconf.impl; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.base.Splitter; import com.google.common.base.Strings; @@ -29,14 +28,15 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.concurrent.atomic.AtomicReference; import javax.ws.rs.core.Response.Status; import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationException; import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationOperation; import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizer; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; +import org.opendaylight.mdsal.dom.api.DOMMountPointService; import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.mdsal.dom.api.DOMYangTextSourceProvider; import org.opendaylight.netconf.sal.rest.api.Draft02; @@ -101,8 +101,8 @@ public final class ControllerContext implements SchemaContextListener, Closeable private volatile SchemaContext globalSchema; private volatile DataNormalizer dataNormalizer; - private ControllerContext(DOMSchemaService schemaService, DOMMountPointService mountService, - DOMYangTextSourceProvider yangTextSourceProvider) { + private ControllerContext(final DOMSchemaService schemaService, final DOMMountPointService mountService, + final DOMYangTextSourceProvider yangTextSourceProvider) { this.mountService = mountService; this.yangTextSourceProvider = yangTextSourceProvider; @@ -110,8 +110,8 @@ public final class ControllerContext implements SchemaContextListener, Closeable listenerRegistration = schemaService.registerSchemaContextListener(this); } - public static ControllerContext newInstance(DOMSchemaService schemaService, DOMMountPointService mountService, - DOMSchemaService domSchemaService) { + public static ControllerContext newInstance(final DOMSchemaService schemaService, + final DOMMountPointService mountService, final DOMSchemaService domSchemaService) { final DOMYangTextSourceProvider yangTextSourceProvider = domSchemaService.getExtensions() .getInstance(DOMYangTextSourceProvider.class); diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/JSONRestconfServiceImpl.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/JSONRestconfServiceImpl.java index 64c482bf0e..e1d45141c8 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/JSONRestconfServiceImpl.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/JSONRestconfServiceImpl.java @@ -21,8 +21,7 @@ import javax.annotation.Nonnull; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.UriInfo; - -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.netconf.sal.rest.api.RestconfService; import org.opendaylight.netconf.sal.rest.impl.JsonNormalizedNodeBodyReader; import org.opendaylight.netconf.sal.rest.impl.JsonToPatchBodyReader; @@ -59,7 +58,7 @@ public class JSONRestconfServiceImpl implements JSONRestconfService, AutoCloseab private final ControllerContext controllerContext; private final RestconfService restconfService; - public JSONRestconfServiceImpl(ControllerContext controllerContext, RestconfService restconfService) { + public JSONRestconfServiceImpl(final ControllerContext controllerContext, final RestconfService restconfService) { this.controllerContext = controllerContext; this.restconfService = restconfService; } @@ -217,11 +216,11 @@ public class JSONRestconfServiceImpl implements JSONRestconfService, AutoCloseab @SuppressWarnings("checkstyle:IllegalCatch") @Override - public Optional subscribeToStream(@Nonnull String identifier, - MultivaluedMap params) throws OperationFailedException { + public Optional subscribeToStream(@Nonnull final String identifier, + final MultivaluedMap params) throws OperationFailedException { //Note: We use http://127.0.0.1 because the Uri parser requires something there though it does nothing String uri = new StringBuilder("http://127.0.0.1:8081/restconf/streams/stream/").append(identifier).toString(); - MultivaluedMap queryParams = (params != null) ? params : new MultivaluedHashMap(); + MultivaluedMap queryParams = params != null ? params : new MultivaluedHashMap(); UriInfo uriInfo = new SimpleUriInfo(uri, queryParams); String jsonRes = null; diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/PutResult.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/PutResult.java index b48b43a61c..87e33b9baf 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/PutResult.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/PutResult.java @@ -7,17 +7,16 @@ */ package org.opendaylight.netconf.sal.restconf.impl; -import com.google.common.util.concurrent.CheckedFuture; +import com.google.common.util.concurrent.FluentFuture; import javax.ws.rs.core.Response.Status; -import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; +import org.opendaylight.mdsal.common.api.CommitInfo; /** * Wrapper for status and future of PUT operation. - * */ public class PutResult { private final Status status; - private final CheckedFuture future; + private final FluentFuture future; /** * Wrap status and future by constructor - make this immutable. @@ -27,7 +26,7 @@ public class PutResult { * @param future * result of submit of PUT operation */ - public PutResult(final Status status, final CheckedFuture future) { + public PutResult(final Status status, final FluentFuture future) { this.status = status; this.future = future; } @@ -44,9 +43,9 @@ public class PutResult { /** * Get future. * - * @return {@link CheckedFuture} result + * @return {@link FluentFuture} result */ - public CheckedFuture getFutureOfPutData() { + public FluentFuture getFutureOfPutData() { return this.future; } } diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestCodec.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestCodec.java index a3fc3c5b2d..6cf6783036 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestCodec.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestCodec.java @@ -14,7 +14,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; import org.opendaylight.netconf.sal.rest.impl.StringModuleInstanceIdentifierCodec; import org.opendaylight.restconf.common.util.IdentityValuesDTO; import org.opendaylight.restconf.common.util.IdentityValuesDTO.IdentityValue; @@ -224,7 +224,7 @@ public final class RestCodec { identityValue.setPredicates(predicates); } else if (pathArgument instanceof NodeWithValue && identityValue != null) { final List predicates = new ArrayList<>(); - final String value = String.valueOf(((NodeWithValue) pathArgument).getValue()); + final String value = String.valueOf(((NodeWithValue) pathArgument).getValue()); predicates.add(new Predicate(null, value)); identityValue.setPredicates(predicates); } diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestconfImpl.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestconfImpl.java index 45c161e42f..0276d558d9 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestconfImpl.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestconfImpl.java @@ -5,12 +5,10 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.netconf.sal.restconf.impl; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.CharMatcher; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.base.Predicates; import com.google.common.base.Splitter; @@ -19,7 +17,7 @@ import com.google.common.base.Throwables; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.Maps; -import com.google.common.util.concurrent.CheckedFuture; +import com.google.common.util.concurrent.FluentFuture; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import java.net.URI; @@ -40,6 +38,7 @@ import java.util.Locale; import java.util.Map; import java.util.Map.Entry; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; @@ -49,14 +48,15 @@ import javax.ws.rs.core.Response.ResponseBuilder; import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.UriBuilder; import javax.ws.rs.core.UriInfo; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.OptimisticLockFailedException; -import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcImplementationNotAvailableException; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; -import org.opendaylight.controller.md.sal.dom.spi.DefaultDOMRpcResult; +import org.opendaylight.mdsal.common.api.CommitInfo; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.mdsal.common.api.OptimisticLockFailedException; +import org.opendaylight.mdsal.common.api.TransactionCommitFailedException; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; +import org.opendaylight.mdsal.dom.api.DOMRpcImplementationNotAvailableException; +import org.opendaylight.mdsal.dom.api.DOMRpcResult; +import org.opendaylight.mdsal.dom.api.DOMRpcService; +import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult; import org.opendaylight.netconf.sal.rest.api.Draft02; import org.opendaylight.netconf.sal.rest.api.RestconfService; import org.opendaylight.netconf.sal.streams.listeners.ListenerAdapter; @@ -815,21 +815,28 @@ public final class RestconfImpl implements RestconfService { } try { - result.getFutureOfPutData().checkedGet(); - return Response.status(result.getStatus()).build(); - } catch (final TransactionCommitFailedException e) { - if (e instanceof OptimisticLockFailedException) { + result.getFutureOfPutData().get(); + } catch (final InterruptedException e) { + LOG.debug("Update failed for {}", identifier, e); + throw new RestconfDocumentedException(e.getMessage(), e); + } catch (final ExecutionException e) { + final TransactionCommitFailedException failure = Throwables.getCauseAs(e, + TransactionCommitFailedException.class); + if (failure instanceof OptimisticLockFailedException) { if (--tries <= 0) { LOG.debug("Got OptimisticLockFailedException on last try - failing {}", identifier); - throw new RestconfDocumentedException(e.getMessage(), e, e.getErrorList()); + throw new RestconfDocumentedException(e.getMessage(), e, failure.getErrorList()); } LOG.debug("Got OptimisticLockFailedException - trying again {}", identifier); - } else { - LOG.debug("Update failed for {}", identifier, e); - throw new RestconfDocumentedException(e.getMessage(), e, e.getErrorList()); + continue; } + + LOG.debug("Update failed for {}", identifier, e); + throw RestconfDocumentedException.decodeAndThrow(e.getMessage(), failure); } + + return Response.status(result.getStatus()).build(); } } @@ -955,7 +962,7 @@ public final class RestconfImpl implements RestconfService { "Point parameter can be used only with 'after' or 'before' values of Insert parameter."); } - CheckedFuture future; + FluentFuture future; if (mountPoint != null) { future = this.broker.commitConfigurationDataPost(mountPoint, normalizedII, payload.getData(), insert, point); @@ -965,12 +972,14 @@ public final class RestconfImpl implements RestconfService { } try { - future.checkedGet(); - } catch (final RestconfDocumentedException e) { - throw e; - } catch (final TransactionCommitFailedException e) { + future.get(); + } catch (final InterruptedException e) { LOG.info("Error creating data {}", uriInfo != null ? uriInfo.getPath() : "", e); - throw new RestconfDocumentedException(e.getMessage(), e, e.getErrorList()); + throw new RestconfDocumentedException(e.getMessage(), e); + } catch (final ExecutionException e) { + LOG.info("Error creating data {}", uriInfo != null ? uriInfo.getPath() : "", e); + throw RestconfDocumentedException.decodeAndThrow(e.getMessage(), Throwables.getCauseAs(e, + TransactionCommitFailedException.class)); } LOG.trace("Successfuly created data."); @@ -1009,7 +1018,7 @@ public final class RestconfImpl implements RestconfService { final DOMMountPoint mountPoint = iiWithData.getMountPoint(); final YangInstanceIdentifier normalizedII = iiWithData.getInstanceIdentifier(); - final CheckedFuture future; + final FluentFuture future; if (mountPoint != null) { future = this.broker.commitConfigurationDataDelete(mountPoint, normalizedII); } else { @@ -1017,18 +1026,19 @@ public final class RestconfImpl implements RestconfService { } try { - future.checkedGet(); - } catch (final TransactionCommitFailedException e) { + future.get(); + } catch (final InterruptedException e) { + throw new RestconfDocumentedException(e.getMessage(), e); + } catch (final ExecutionException e) { final Optional searchedException = Iterables.tryFind(Throwables.getCausalChain(e), - Predicates.instanceOf(ModifiedNodeDoesNotExistException.class)); + Predicates.instanceOf(ModifiedNodeDoesNotExistException.class)).toJavaUtil(); if (searchedException.isPresent()) { - throw new RestconfDocumentedException("Data specified for delete doesn't exist.", - ErrorType.APPLICATION, ErrorTag.DATA_MISSING, e); + throw new RestconfDocumentedException("Data specified for delete doesn't exist.", ErrorType.APPLICATION, + ErrorTag.DATA_MISSING, e); } - final String errMsg = "Error while deleting data"; - LOG.info(errMsg, e); - throw new RestconfDocumentedException(e.getMessage(), e, e.getErrorList()); + throw RestconfDocumentedException.decodeAndThrow(e.getMessage(), Throwables.getCauseAs(e, + TransactionCommitFailedException.class)); } return Response.status(Status.OK).build(); @@ -1202,7 +1212,7 @@ public final class RestconfImpl implements RestconfService { return uriToWebsocketServerBuilder.replacePath(streamName).build(); } - private String getWsScheme(final UriInfo uriInfo) { + private static String getWsScheme(final UriInfo uriInfo) { URI uri = uriInfo.getAbsolutePath(); if (uri == null) { return "ws"; diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/streams/listeners/ListenerAdapter.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/streams/listeners/ListenerAdapter.java index d58ca9a6a7..ed3dd560e3 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/streams/listeners/ListenerAdapter.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/streams/listeners/ListenerAdapter.java @@ -16,7 +16,7 @@ import javax.annotation.Nonnull; import javax.xml.stream.XMLStreamException; import javax.xml.transform.dom.DOMResult; import org.json.XML; -import org.opendaylight.controller.md.sal.dom.api.ClusteredDOMDataTreeChangeListener; +import org.opendaylight.mdsal.dom.api.ClusteredDOMDataTreeChangeListener; import org.opendaylight.netconf.sal.restconf.impl.ControllerContext; import org.opendaylight.yang.gen.v1.urn.sal.restconf.event.subscription.rev140708.NotificationOutputTypeGrouping.NotificationOutputType; import org.opendaylight.yangtools.yang.common.QName; diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/streams/listeners/NotificationListenerAdapter.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/streams/listeners/NotificationListenerAdapter.java index 2b54a1db84..95c2ca26fb 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/streams/listeners/NotificationListenerAdapter.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/streams/listeners/NotificationListenerAdapter.java @@ -18,8 +18,8 @@ import java.time.Instant; import java.util.Collection; import javax.xml.stream.XMLStreamException; import javax.xml.transform.dom.DOMResult; -import org.opendaylight.controller.md.sal.dom.api.DOMNotification; -import org.opendaylight.controller.md.sal.dom.api.DOMNotificationListener; +import org.opendaylight.mdsal.dom.api.DOMNotification; +import org.opendaylight.mdsal.dom.api.DOMNotificationListener; import org.opendaylight.netconf.sal.restconf.impl.ControllerContext; import org.opendaylight.restconf.common.errors.RestconfDocumentedException; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; diff --git a/restconf/restconf-nb-bierman02/src/main/resources/org/opendaylight/blueprint/restconf-config.xml b/restconf/restconf-nb-bierman02/src/main/resources/org/opendaylight/blueprint/restconf-config.xml index f30478d08a..cad9c3d6a0 100644 --- a/restconf/restconf-nb-bierman02/src/main/resources/org/opendaylight/blueprint/restconf-config.xml +++ b/restconf/restconf-nb-bierman02/src/main/resources/org/opendaylight/blueprint/restconf-config.xml @@ -35,10 +35,10 @@ - - - - + + + diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/md/sal/rest/common/TestRestconfUtils.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/md/sal/rest/common/TestRestconfUtils.java index f5eb340cf4..b04b42b0bf 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/md/sal/rest/common/TestRestconfUtils.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/md/sal/rest/common/TestRestconfUtils.java @@ -5,14 +5,12 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.controller.md.sal.rest.common; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableClassToInstanceMap; import java.io.File; @@ -23,12 +21,13 @@ import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Optional; import javax.xml.parsers.ParserConfigurationException; import javax.xml.stream.XMLStreamException; import javax.xml.transform.dom.DOMSource; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.controller.sal.rest.impl.test.providers.TestJsonBodyWriter; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; +import org.opendaylight.mdsal.dom.api.DOMMountPointService; import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.netconf.sal.restconf.impl.ControllerContext; import org.opendaylight.restconf.common.context.InstanceIdentifierContext; @@ -61,17 +60,18 @@ public final class TestRestconfUtils { throw new UnsupportedOperationException("Test utility class"); } - public static ControllerContext newControllerContext(SchemaContext schemaContext) { + public static ControllerContext newControllerContext(final SchemaContext schemaContext) { return newControllerContext(schemaContext, null); } - public static ControllerContext newControllerContext(SchemaContext schemaContext, DOMMountPoint mountInstance) { + public static ControllerContext newControllerContext(final SchemaContext schemaContext, + final DOMMountPoint mountInstance) { final DOMMountPointService mockMountService = mock(DOMMountPointService.class); if (mountInstance != null) { doReturn(schemaContext).when(mountInstance).getSchemaContext(); - doReturn(Optional.fromNullable(mountInstance)).when(mockMountService) - .getMountPoint(any(YangInstanceIdentifier.class)); + doReturn(Optional.ofNullable(mountInstance)).when(mockMountService).getMountPoint( + any(YangInstanceIdentifier.class)); } DOMSchemaService mockSchemaService = mock(DOMSchemaService.class); diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/AbstractBodyReaderTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/AbstractBodyReaderTest.java index adc3ad3dbb..3977920e63 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/AbstractBodyReaderTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/AbstractBodyReaderTest.java @@ -5,7 +5,6 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.controller.sal.rest.impl.test.providers; import static org.junit.Assert.assertNotNull; @@ -20,8 +19,8 @@ import javax.ws.rs.core.MultivaluedHashMap; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Request; import javax.ws.rs.core.UriInfo; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; import org.opendaylight.netconf.sal.rest.api.RestconfConstants; import org.opendaylight.netconf.sal.rest.impl.AbstractIdentifierAwareJaxRsProvider; import org.opendaylight.netconf.sal.restconf.impl.ControllerContext; @@ -49,7 +48,7 @@ public abstract class AbstractBodyReaderTest { protected final ControllerContext controllerContext; protected final MediaType mediaType; - protected AbstractBodyReaderTest(SchemaContext schemaContext, DOMMountPoint mountInstance) { + protected AbstractBodyReaderTest(final SchemaContext schemaContext, final DOMMountPoint mountInstance) { this.mediaType = getMediaType(); controllerContext = TestRestconfUtils.newControllerContext(schemaContext, mountInstance); diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestJsonBodyReaderMountPoint.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestJsonBodyReaderMountPoint.java index 675425704d..947e429b7a 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestJsonBodyReaderMountPoint.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestJsonBodyReaderMountPoint.java @@ -5,7 +5,6 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.controller.sal.rest.impl.test.providers; import static org.junit.Assert.assertNotNull; @@ -19,8 +18,8 @@ import java.util.Collection; import javax.ws.rs.core.MediaType; import org.junit.BeforeClass; import org.junit.Test; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; import org.opendaylight.netconf.sal.rest.impl.JsonNormalizedNodeBodyReader; import org.opendaylight.restconf.common.context.NormalizedNodeContext; import org.opendaylight.yangtools.yang.common.QName; diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestJsonPatchBodyReaderMountPoint.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestJsonPatchBodyReaderMountPoint.java index eca76aa33a..d316bcd9e2 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestJsonPatchBodyReaderMountPoint.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestJsonPatchBodyReaderMountPoint.java @@ -5,7 +5,6 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.controller.sal.rest.impl.test.providers; import static javax.ws.rs.core.MediaType.APPLICATION_JSON; @@ -17,7 +16,7 @@ import java.io.InputStream; import javax.ws.rs.core.MediaType; import org.junit.BeforeClass; import org.junit.Test; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; import org.opendaylight.netconf.sal.rest.impl.JsonToPatchBodyReader; import org.opendaylight.restconf.common.errors.RestconfDocumentedException; import org.opendaylight.restconf.common.patch.PatchContext; diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestXmlBodyReaderMountPoint.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestXmlBodyReaderMountPoint.java index 955a310b24..6228688b09 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestXmlBodyReaderMountPoint.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestXmlBodyReaderMountPoint.java @@ -5,7 +5,6 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.controller.sal.rest.impl.test.providers; import static org.junit.Assert.assertEquals; @@ -21,8 +20,8 @@ import javax.ws.rs.core.MediaType; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; import org.opendaylight.netconf.sal.rest.impl.XmlNormalizedNodeBodyReader; import org.opendaylight.restconf.common.context.NormalizedNodeContext; import org.opendaylight.restconf.common.errors.RestconfDocumentedException; diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestXmlPatchBodyReaderMountPoint.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestXmlPatchBodyReaderMountPoint.java index 04cbc95fb8..b82fd45ed2 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestXmlPatchBodyReaderMountPoint.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestXmlPatchBodyReaderMountPoint.java @@ -5,7 +5,6 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.controller.sal.rest.impl.test.providers; import static org.junit.Assert.assertEquals; @@ -16,7 +15,7 @@ import java.io.InputStream; import javax.ws.rs.core.MediaType; import org.junit.BeforeClass; import org.junit.Test; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; import org.opendaylight.netconf.sal.rest.impl.XmlToPatchBodyReader; import org.opendaylight.restconf.common.errors.RestconfDocumentedException; import org.opendaylight.restconf.common.patch.PatchContext; diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/input/to/cnsn/test/RestPutListDataTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/input/to/cnsn/test/RestPutListDataTest.java index 7fa11da755..e10c2295a7 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/input/to/cnsn/test/RestPutListDataTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/input/to/cnsn/test/RestPutListDataTest.java @@ -15,7 +15,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import com.google.common.collect.Iterables; -import com.google.common.util.concurrent.CheckedFuture; +import com.google.common.util.concurrent.FluentFuture; import java.io.FileNotFoundException; import java.util.List; import javax.ws.rs.core.Response.Status; @@ -76,7 +76,7 @@ public class RestPutListDataTest { when(brokerFacade.commitConfigurationDataPut(any(SchemaContext.class), any(YangInstanceIdentifier.class), any(NormalizedNode.class), Mockito.anyString(), Mockito.anyString())) .thenReturn(result); - when(result.getFutureOfPutData()).thenReturn(mock(CheckedFuture.class)); + when(result.getFutureOfPutData()).thenReturn(mock(FluentFuture.class)); when(result.getStatus()).thenReturn(Status.OK); } diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/BrokerFacadeTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/BrokerFacadeTest.java index ae3bf69939..5bc14cb2a7 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/BrokerFacadeTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/BrokerFacadeTest.java @@ -5,7 +5,6 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.controller.sal.restconf.impl.test; import static org.junit.Assert.assertEquals; @@ -23,35 +22,36 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; +import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateBooleanFluentFuture; +import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFailedFluentFuture; +import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFluentFuture; +import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateTrueFluentFuture; -import com.google.common.base.Optional; +import com.google.common.collect.ImmutableClassToInstanceMap; import com.google.common.collect.Lists; -import com.google.common.util.concurrent.CheckedFuture; -import com.google.common.util.concurrent.Futures; -import java.util.HashMap; -import java.util.concurrent.Future; +import com.google.common.util.concurrent.FluentFuture; +import java.util.Optional; import org.junit.Before; import org.junit.Test; import org.mockito.InOrder; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; -import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; -import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; -import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction; -import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction; -import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeService; -import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeIdentifier; -import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; -import org.opendaylight.controller.md.sal.dom.api.DOMNotificationService; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcException; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; -import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain; import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils; +import org.opendaylight.mdsal.common.api.CommitInfo; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.mdsal.common.api.ReadFailedException; +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.DOMDataTreeReadWriteTransaction; +import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; +import org.opendaylight.mdsal.dom.api.DOMNotificationService; +import org.opendaylight.mdsal.dom.api.DOMRpcResult; +import org.opendaylight.mdsal.dom.api.DOMRpcService; +import org.opendaylight.mdsal.dom.api.DOMTransactionChain; import org.opendaylight.netconf.sal.restconf.impl.BrokerFacade; import org.opendaylight.netconf.sal.restconf.impl.ControllerContext; import org.opendaylight.netconf.sal.restconf.impl.PutResult; @@ -94,16 +94,15 @@ public class BrokerFacadeTest { @Mock private DOMMountPoint mockMountInstance; @Mock - private DOMDataReadOnlyTransaction readTransaction; + private DOMDataTreeReadTransaction readTransaction; @Mock - private DOMDataWriteTransaction writeTransaction; + private DOMDataTreeWriteTransaction writeTransaction; @Mock - private DOMDataReadWriteTransaction rwTransaction; + private DOMDataTreeReadWriteTransaction rwTransaction; private BrokerFacade brokerFacade; private final NormalizedNode dummyNode = createDummyNode("test:module", "2014-01-09", "interfaces"); - private final CheckedFuture>, ReadFailedException> dummyNodeInFuture = - wrapDummyNode(this.dummyNode); + private final FluentFuture>> dummyNodeInFuture = wrapDummyNode(this.dummyNode); private final QName qname = TestUtils.buildQName("interfaces","test:module", "2014-01-09"); private final SchemaPath type = SchemaPath.create(true, this.qname); private final YangInstanceIdentifier instanceID = YangInstanceIdentifier.builder().node(this.qname).build(); @@ -121,18 +120,16 @@ public class BrokerFacadeTest { when(this.domDataBroker.newReadOnlyTransaction()).thenReturn(this.readTransaction); when(this.domDataBroker.newWriteOnlyTransaction()).thenReturn(this.writeTransaction); when(this.domDataBroker.newReadWriteTransaction()).thenReturn(this.rwTransaction); - HashMap extensions = new HashMap(); - extensions.put(DOMDataTreeChangeService.class, Mockito.mock(DOMDataTreeChangeService.class)); - when(this.domDataBroker.getSupportedExtensions()).thenReturn(extensions); + when(this.domDataBroker.getExtensions()).thenReturn(ImmutableClassToInstanceMap.of( + DOMDataTreeChangeService.class, Mockito.mock(DOMDataTreeChangeService.class))); } - private static CheckedFuture>, ReadFailedException> wrapDummyNode( - final NormalizedNode dummyNode) { - return Futures.immediateCheckedFuture(Optional.>of(dummyNode)); + private static FluentFuture>> wrapDummyNode(final NormalizedNode dummyNode) { + return immediateFluentFuture(Optional.of(dummyNode)); } - private static CheckedFuture wrapExistence(final Boolean exists) { - return Futures.immediateCheckedFuture(exists); + private static FluentFuture wrapExistence(final boolean exists) { + return immediateBooleanFluentFuture(exists); } /** @@ -170,8 +167,7 @@ public class BrokerFacadeTest { RpcError.ErrorType.TRANSPORT, ErrorTag.RESOURCE_DENIED.getTagValue(), "Master is down. Please try again."); - final ReadFailedException exception503 = new ReadFailedException("Read from transaction failed", error); - doReturn(Futures.immediateFailedCheckedFuture(exception503)) + doReturn(immediateFailedFluentFuture(new ReadFailedException("Read from transaction failed", error))) .when(readTransaction).read(any(LogicalDatastoreType.class), any(YangInstanceIdentifier.class)); try { brokerFacade.readConfigurationData(this.instanceID, "explicit"); @@ -187,11 +183,9 @@ public class BrokerFacadeTest { @Test public void testInvokeRpc() throws Exception { final DOMRpcResult expResult = mock(DOMRpcResult.class); - final CheckedFuture future = Futures.immediateCheckedFuture(expResult); - when(this.mockRpcService.invokeRpc(this.type, this.dummyNode)).thenReturn(future); + doReturn(immediateFluentFuture(expResult)).when(this.mockRpcService).invokeRpc(this.type, this.dummyNode); - final CheckedFuture actualFuture = this.brokerFacade - .invokeRpc(this.type, this.dummyNode); + final FluentFuture actualFuture = this.brokerFacade.invokeRpc(this.type, this.dummyNode); assertNotNull("Future is null", actualFuture); final DOMRpcResult actualResult = actualFuture.get(); assertSame("invokeRpc", expResult, actualResult); @@ -199,57 +193,45 @@ public class BrokerFacadeTest { @Test public void testCommitConfigurationDataPut() throws Exception { - @SuppressWarnings("unchecked") - final CheckedFuture expFuture = mock(CheckedFuture.class); - when(this.rwTransaction.submit()).thenReturn(expFuture); + doReturn(CommitInfo.emptyFluentFuture()).when(this.rwTransaction).commit(); - final Optional> optionalMock = mock(Optional.class); - when(optionalMock.get()).thenReturn(null); - - final CheckedFuture>, ReadFailedException> readFuture = Futures - .immediateCheckedFuture(optionalMock); - when(this.rwTransaction.read(LogicalDatastoreType.CONFIGURATION, this.instanceID)).thenReturn(readFuture); + doReturn(immediateFluentFuture(Optional.of(mock(NormalizedNode.class)))).when(this.rwTransaction) + .read(LogicalDatastoreType.CONFIGURATION, this.instanceID); final PutResult result = this.brokerFacade.commitConfigurationDataPut(mock(SchemaContext.class), this.instanceID, this.dummyNode, null, null); - final Future actualFuture = result.getFutureOfPutData(); - - assertSame("commitConfigurationDataPut", expFuture, actualFuture); + assertSame("commitConfigurationDataPut", CommitInfo.emptyFluentFuture(), result.getFutureOfPutData()); final InOrder inOrder = inOrder(this.domDataBroker, this.rwTransaction); inOrder.verify(this.domDataBroker).newReadWriteTransaction(); inOrder.verify(this.rwTransaction).put(LogicalDatastoreType.CONFIGURATION, this.instanceID, this.dummyNode); - inOrder.verify(this.rwTransaction).submit(); + inOrder.verify(this.rwTransaction).commit(); } @Test public void testCommitConfigurationDataPost() { - @SuppressWarnings("unchecked") - final CheckedFuture expFuture = mock(CheckedFuture.class); - when(this.rwTransaction.exists(LogicalDatastoreType.CONFIGURATION, this.instanceID)) .thenReturn(wrapExistence(false)); - when(this.rwTransaction.submit()).thenReturn(expFuture); + doReturn(CommitInfo.emptyFluentFuture()).when(this.rwTransaction).commit(); - final CheckedFuture actualFuture = this.brokerFacade + final FluentFuture actualFuture = this.brokerFacade .commitConfigurationDataPost(mock(SchemaContext.class), this.instanceID, this.dummyNode, null, null); - assertSame("commitConfigurationDataPost", expFuture, actualFuture); + assertSame("commitConfigurationDataPost", CommitInfo.emptyFluentFuture(), actualFuture); final InOrder inOrder = inOrder(this.domDataBroker, this.rwTransaction); inOrder.verify(this.domDataBroker).newReadWriteTransaction(); inOrder.verify(this.rwTransaction).exists(LogicalDatastoreType.CONFIGURATION, this.instanceID); inOrder.verify(this.rwTransaction).put(LogicalDatastoreType.CONFIGURATION, this.instanceID, this.dummyNode); - inOrder.verify(this.rwTransaction).submit(); + inOrder.verify(this.rwTransaction).commit(); } @Test(expected = RestconfDocumentedException.class) public void testCommitConfigurationDataPostAlreadyExists() { - final CheckedFuture successFuture = Futures.immediateCheckedFuture(Boolean.TRUE); when(this.rwTransaction.exists(eq(LogicalDatastoreType.CONFIGURATION), any(YangInstanceIdentifier.class))) - .thenReturn(successFuture); + .thenReturn(immediateTrueFluentFuture()); try { // Schema context is only necessary for ensuring parent structure this.brokerFacade.commitConfigurationDataPost((SchemaContext) null, this.instanceID, this.dummyNode, null, @@ -269,22 +251,20 @@ public class BrokerFacadeTest { prepareDataForDelete(true); // expected result - @SuppressWarnings("unchecked") - final CheckedFuture expFuture = mock(CheckedFuture.class); - when(this.rwTransaction.submit()).thenReturn(expFuture); + doReturn(CommitInfo.emptyFluentFuture()).when(this.rwTransaction).commit(); // test - final CheckedFuture actualFuture = this.brokerFacade + final FluentFuture actualFuture = this.brokerFacade .commitConfigurationDataDelete(this.instanceID); // verify result and interactions - assertSame("commitConfigurationDataDelete", expFuture, actualFuture); + assertSame("commitConfigurationDataDelete", CommitInfo.emptyFluentFuture(), actualFuture); // check exists, delete, submit final InOrder inOrder = inOrder(this.domDataBroker, this.rwTransaction); inOrder.verify(this.rwTransaction).exists(LogicalDatastoreType.CONFIGURATION, this.instanceID); inOrder.verify(this.rwTransaction).delete(LogicalDatastoreType.CONFIGURATION, this.instanceID); - inOrder.verify(this.rwTransaction).submit(); + inOrder.verify(this.rwTransaction).commit(); } /** @@ -313,7 +293,7 @@ public class BrokerFacadeTest { */ private void prepareDataForDelete(final boolean assumeDataExists) { when(this.rwTransaction.exists(LogicalDatastoreType.CONFIGURATION, this.instanceID)) - .thenReturn(Futures.immediateCheckedFuture(new Boolean(assumeDataExists))); + .thenReturn(immediateBooleanFluentFuture(assumeDataExists)); } @Test @@ -324,8 +304,8 @@ public class BrokerFacadeTest { @SuppressWarnings("unchecked") final ListenerRegistration mockRegistration = mock(ListenerRegistration.class); - DOMDataTreeChangeService changeService = (DOMDataTreeChangeService) - this.domDataBroker.getSupportedExtensions().get(DOMDataTreeChangeService.class); + DOMDataTreeChangeService changeService = this.domDataBroker.getExtensions() + .getInstance(DOMDataTreeChangeService.class); DOMDataTreeIdentifier loc = new DOMDataTreeIdentifier(LogicalDatastoreType.CONFIGURATION, this.instanceID); when(changeService.registerDataTreeChangeListener(eq(loc), eq(listener))).thenReturn(mockRegistration); @@ -370,9 +350,8 @@ public class BrokerFacadeTest { verify(this.domNotification, times(1)).registerNotificationListener(listener, listener.getSchemaPath()); final DOMTransactionChain transactionChain = mock(DOMTransactionChain.class); - final DOMDataWriteTransaction wTx = mock(DOMDataWriteTransaction.class); - final CheckedFuture checked = Futures.immediateCheckedFuture(null); - when(wTx.submit()).thenReturn(checked); + final DOMDataTreeWriteTransaction wTx = mock(DOMDataTreeWriteTransaction.class); + doReturn(CommitInfo.emptyFluentFuture()).when(wTx).commit(); when(transactionChain.newWriteOnlyTransaction()).thenReturn(wTx); // close and remove test notification listener listener.close(); @@ -383,19 +362,17 @@ public class BrokerFacadeTest { * Test Patch method on the server with no data. */ @Test - @SuppressWarnings("unchecked") public void testPatchConfigurationDataWithinTransactionServer() throws Exception { final PatchContext patchContext = mock(PatchContext.class); - final InstanceIdentifierContext identifierContext = mock(InstanceIdentifierContext.class); - final CheckedFuture expFuture = Futures.immediateCheckedFuture(null); + final InstanceIdentifierContext identifierContext = mock(InstanceIdentifierContext.class); when(patchContext.getData()).thenReturn(Lists.newArrayList()); - when(patchContext.getInstanceIdentifierContext()).thenReturn(identifierContext); + doReturn(identifierContext).when(patchContext).getInstanceIdentifierContext(); // no mount point when(identifierContext.getMountPoint()).thenReturn(null); - when(this.rwTransaction.submit()).thenReturn(expFuture); + doReturn(CommitInfo.emptyFluentFuture()).when(this.rwTransaction).commit(); final PatchStatusContext status = this.brokerFacade.patchConfigurationDataWithinTransaction(patchContext); @@ -407,23 +384,21 @@ public class BrokerFacadeTest { * Test Patch method on mounted device with no data. */ @Test - @SuppressWarnings("unchecked") public void testPatchConfigurationDataWithinTransactionMount() throws Exception { final PatchContext patchContext = mock(PatchContext.class); - final InstanceIdentifierContext identifierContext = mock(InstanceIdentifierContext.class); + final InstanceIdentifierContext identifierContext = mock(InstanceIdentifierContext.class); final DOMMountPoint mountPoint = mock(DOMMountPoint.class); final DOMDataBroker mountDataBroker = mock(DOMDataBroker.class); - final DOMDataReadWriteTransaction transaction = mock(DOMDataReadWriteTransaction.class); - final CheckedFuture expFuture = Futures.immediateCheckedFuture(null); + final DOMDataTreeReadWriteTransaction transaction = mock(DOMDataTreeReadWriteTransaction.class); when(patchContext.getData()).thenReturn(Lists.newArrayList()); - when(patchContext.getInstanceIdentifierContext()).thenReturn(identifierContext); + doReturn(identifierContext).when(patchContext).getInstanceIdentifierContext(); // return mount point with broker when(identifierContext.getMountPoint()).thenReturn(mountPoint); when(mountPoint.getService(DOMDataBroker.class)).thenReturn(Optional.of(mountDataBroker)); when(mountDataBroker.newReadWriteTransaction()).thenReturn(transaction); - when(transaction.submit()).thenReturn(expFuture); + doReturn(CommitInfo.emptyFluentFuture()).when(transaction).commit(); final PatchStatusContext status = this.brokerFacade.patchConfigurationDataWithinTransaction(patchContext); @@ -436,24 +411,22 @@ public class BrokerFacadeTest { * Patch operation should fail with global error. */ @Test - @SuppressWarnings("unchecked") public void testPatchConfigurationDataWithinTransactionMountFail() throws Exception { final PatchContext patchContext = mock(PatchContext.class); - final InstanceIdentifierContext identifierContext = mock(InstanceIdentifierContext.class); + final InstanceIdentifierContext identifierContext = mock(InstanceIdentifierContext.class); final DOMMountPoint mountPoint = mock(DOMMountPoint.class); final DOMDataBroker mountDataBroker = mock(DOMDataBroker.class); - final DOMDataReadWriteTransaction transaction = mock(DOMDataReadWriteTransaction.class); - final CheckedFuture expFuture = Futures.immediateCheckedFuture(null); + final DOMDataTreeReadWriteTransaction transaction = mock(DOMDataTreeReadWriteTransaction.class); when(patchContext.getData()).thenReturn(Lists.newArrayList()); - when(patchContext.getInstanceIdentifierContext()).thenReturn(identifierContext); + doReturn(identifierContext).when(patchContext).getInstanceIdentifierContext(); when(identifierContext.getMountPoint()).thenReturn(mountPoint); // missing broker on mounted device - when(mountPoint.getService(DOMDataBroker.class)).thenReturn(Optional.absent()); + when(mountPoint.getService(DOMDataBroker.class)).thenReturn(Optional.empty()); when(mountDataBroker.newReadWriteTransaction()).thenReturn(transaction); - when(transaction.submit()).thenReturn(expFuture); + doReturn(CommitInfo.emptyFluentFuture()).when(transaction).commit(); final PatchStatusContext status = this.brokerFacade.patchConfigurationDataWithinTransaction(patchContext); diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/Bug8072Test.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/Bug8072Test.java index 1ff1f706a2..27c497d607 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/Bug8072Test.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/Bug8072Test.java @@ -18,8 +18,8 @@ import java.util.Map; import java.util.Set; import org.junit.BeforeClass; import org.junit.Test; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; import org.opendaylight.netconf.sal.restconf.impl.ControllerContext; import org.opendaylight.restconf.common.context.InstanceIdentifierContext; import org.opendaylight.yangtools.yang.common.QName; diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/DummyFuture.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/DummyFuture.java index 9a1d2074ae..30a0c505ea 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/DummyFuture.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/DummyFuture.java @@ -88,7 +88,7 @@ public class DummyFuture implements Future> { } public Future> build() { - return new DummyFuture(this); + return new DummyFuture<>(this); } } } diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/DummyRpcResult.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/DummyRpcResult.java index f03330e3c3..184f5755fb 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/DummyRpcResult.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/DummyRpcResult.java @@ -65,9 +65,7 @@ public class DummyRpcResult implements RpcResult { } public RpcResult build() { - return new DummyRpcResult(this); + return new DummyRpcResult<>(this); } - } - } diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/InvokeRpcMethodTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/InvokeRpcMethodTest.java index 1053e73d63..dbdca84473 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/InvokeRpcMethodTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/InvokeRpcMethodTest.java @@ -5,7 +5,6 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.controller.sal.restconf.impl.test; import static org.junit.Assert.assertEquals; @@ -16,12 +15,13 @@ import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isNull; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFailedFluentFuture; +import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFluentFuture; import com.google.common.base.Optional; -import com.google.common.util.concurrent.CheckedFuture; -import com.google.common.util.concurrent.Futures; import java.io.FileNotFoundException; import java.net.URI; import java.net.URISyntaxException; @@ -35,11 +35,10 @@ import javax.ws.rs.core.UriInfo; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcException; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcImplementationNotAvailableException; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult; -import org.opendaylight.controller.md.sal.dom.spi.DefaultDOMRpcResult; import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils; +import org.opendaylight.mdsal.dom.api.DOMRpcImplementationNotAvailableException; +import org.opendaylight.mdsal.dom.api.DOMRpcResult; +import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult; import org.opendaylight.netconf.sal.restconf.impl.BrokerFacade; import org.opendaylight.netconf.sal.restconf.impl.ControllerContext; import org.opendaylight.netconf.sal.restconf.impl.RestconfImpl; @@ -159,13 +158,11 @@ public class InvokeRpcMethodTest { @Test public void testInvokeRpcWithNoPayloadRpc_FailNoErrors() { - final DOMRpcException exception = new DOMRpcImplementationNotAvailableException("testExeption"); - final CheckedFuture future = Futures.immediateFailedCheckedFuture(exception); - final QName qname = QName.create("(http://netconfcentral.org/ns/toaster?revision=2009-11-20)cancel-toast"); final SchemaPath type = SchemaPath.create(true, qname); - when(brokerFacade.invokeRpc(eq(type), isNull())).thenReturn(future); + doReturn(immediateFailedFluentFuture(new DOMRpcImplementationNotAvailableException("testExeption"))) + .when(brokerFacade).invokeRpc(eq(type), isNull()); try { this.restconfImpl.invokeRpc("toaster:cancel-toast", "", uriInfo); @@ -206,13 +203,10 @@ public class InvokeRpcMethodTest { RpcResultBuilder.newWarning(RpcError.ErrorType.RPC, "in-use", "bar", "app-tag", null, null)); - final DOMRpcResult resutl = new DefaultDOMRpcResult(rpcErrors); - final CheckedFuture future = Futures.immediateCheckedFuture(resutl); - + final DOMRpcResult result = new DefaultDOMRpcResult(rpcErrors); final SchemaPath path = SchemaPath.create(true, QName.create("(http://netconfcentral.org/ns/toaster?revision=2009-11-20)cancel-toast")); - - when(brokerFacade.invokeRpc(eq(path), isNull())).thenReturn(future); + doReturn(immediateFluentFuture(result)).when(brokerFacade).invokeRpc(eq(path), isNull()); try { this.restconfImpl.invokeRpc("toaster:cancel-toast", "", uriInfo); @@ -229,12 +223,11 @@ public class InvokeRpcMethodTest { public void testInvokeRpcWithNoPayload_Success() { final NormalizedNode resultObj = null; final DOMRpcResult expResult = new DefaultDOMRpcResult(resultObj); - final CheckedFuture future = Futures.immediateCheckedFuture(expResult); final QName qname = QName.create("(http://netconfcentral.org/ns/toaster?revision=2009-11-20)cancel-toast"); final SchemaPath path = SchemaPath.create(true, qname); - when(brokerFacade.invokeRpc(eq(path), isNull())).thenReturn(future); + doReturn(immediateFluentFuture(expResult)).when(brokerFacade).invokeRpc(eq(path), isNull()); final NormalizedNodeContext output = this.restconfImpl.invokeRpc("toaster:cancel-toast", "", uriInfo); assertNotNull(output); @@ -269,7 +262,6 @@ public class InvokeRpcMethodTest { @Ignore public void testInvokeRpcMethodWithInput() { final DOMRpcResult expResult = mock(DOMRpcResult.class); - final CheckedFuture future = Futures.immediateCheckedFuture(expResult); final SchemaPath path = SchemaPath.create(true, QName.create("(http://netconfcentral.org/ns/toaster?revision=2009-11-20)make-toast")); @@ -299,7 +291,7 @@ public class InvokeRpcMethodTest { new NormalizedNodeContext(new InstanceIdentifierContext<>(null, rpcInputSchemaNode, null, schemaContext), containerBuilder.build()); - when(brokerFacade.invokeRpc(eq(path), any(NormalizedNode.class))).thenReturn(future); + doReturn(immediateFluentFuture(expResult)).when(brokerFacade).invokeRpc(eq(path), any(NormalizedNode.class)); final NormalizedNodeContext output = this.restconfImpl.invokeRpc("toaster:make-toast", payload, uriInfo); assertNotNull(output); @@ -351,9 +343,8 @@ public class InvokeRpcMethodTest { final ContainerNode container = containerBuilder.build(); final DOMRpcResult result = new DefaultDOMRpcResult(container); - final CheckedFuture future = Futures.immediateCheckedFuture(result); - when(brokerFacade.invokeRpc(eq(rpcDef.getPath()), isNull())).thenReturn(future); + doReturn(immediateFluentFuture(result)).when(brokerFacade).invokeRpc(eq(rpcDef.getPath()), isNull()); final NormalizedNodeContext output = this.restconfImpl.invokeRpc("toaster:testOutput", "", uriInfo); assertNotNull(output); diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/JSONRestconfServiceImplTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/JSONRestconfServiceImplTest.java index df815ad1d2..ad9637ca16 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/JSONRestconfServiceImplTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/JSONRestconfServiceImplTest.java @@ -21,10 +21,11 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFailedFluentFuture; +import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFluentFuture; import com.google.common.base.Optional; import com.google.common.io.Resources; -import com.google.common.util.concurrent.Futures; import java.io.FileNotFoundException; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -37,14 +38,15 @@ import org.junit.BeforeClass; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcException; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcImplementationNotAvailableException; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult; -import org.opendaylight.controller.md.sal.dom.spi.DefaultDOMRpcResult; import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils; +import org.opendaylight.mdsal.common.api.CommitInfo; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.mdsal.common.api.TransactionCommitFailedException; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; +import org.opendaylight.mdsal.dom.api.DOMRpcException; +import org.opendaylight.mdsal.dom.api.DOMRpcImplementationNotAvailableException; +import org.opendaylight.mdsal.dom.api.DOMRpcResult; +import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult; import org.opendaylight.netconf.sal.restconf.impl.BrokerFacade; import org.opendaylight.netconf.sal.restconf.impl.ControllerContext; import org.opendaylight.netconf.sal.restconf.impl.JSONRestconfServiceImpl; @@ -139,8 +141,7 @@ public class JSONRestconfServiceImplTest { when(brokerFacade.commitConfigurationDataPut(notNull(SchemaContext.class), notNull(YangInstanceIdentifier.class), notNull(NormalizedNode.class), isNull(), isNull())) .thenReturn(result); - when(result.getFutureOfPutData()) - .thenReturn(Futures.immediateCheckedFuture(null)); + doReturn(CommitInfo.emptyFluentFuture()).when(result).getFutureOfPutData(); when(result.getStatus()).thenReturn(Status.OK); final String uriPath = "ietf-interfaces:interfaces/interface/eth0"; final String payload = loadData("/parts/ietf-interfaces_interfaces.json"); @@ -172,7 +173,7 @@ public class JSONRestconfServiceImplTest { when(brokerFacade.commitMountPointDataPut(notNull(DOMMountPoint.class), notNull(YangInstanceIdentifier.class), notNull(NormalizedNode.class), isNull(), isNull())) .thenReturn(result); - when(result.getFutureOfPutData()).thenReturn(Futures.immediateCheckedFuture(null)); + doReturn(CommitInfo.emptyFluentFuture()).when(result).getFutureOfPutData(); when(result.getStatus()).thenReturn(Status.OK); final String uriPath = "ietf-interfaces:interfaces/yang-ext:mount/test-module:cont/cont1"; final String payload = loadData("/full-versions/testCont1Data.json"); @@ -199,8 +200,8 @@ public class JSONRestconfServiceImplTest { public void testPutFailure() throws Throwable { final PutResult result = mock(PutResult.class); - when(result.getFutureOfPutData()) - .thenReturn(Futures.immediateFailedCheckedFuture(new TransactionCommitFailedException("mock"))); + doReturn(immediateFailedFluentFuture(new TransactionCommitFailedException("mock"))).when(result) + .getFutureOfPutData(); when(result.getStatus()).thenReturn(Status.OK); when(brokerFacade.commitConfigurationDataPut(notNull(SchemaContext.class), notNull(YangInstanceIdentifier.class), notNull(NormalizedNode.class), Mockito.anyString(), @@ -215,7 +216,7 @@ public class JSONRestconfServiceImplTest { @SuppressWarnings("rawtypes") @Test public void testPost() throws Exception { - doReturn(Futures.immediateCheckedFuture(null)).when(brokerFacade).commitConfigurationDataPost( + doReturn(CommitInfo.emptyFluentFuture()).when(brokerFacade).commitConfigurationDataPost( any(SchemaContext.class), any(YangInstanceIdentifier.class), any(NormalizedNode.class), isNull(), isNull()); @@ -256,7 +257,7 @@ public class JSONRestconfServiceImplTest { @SuppressWarnings("rawtypes") @Test public void testPostBehindMountPoint() throws Exception { - doReturn(Futures.immediateCheckedFuture(null)).when(brokerFacade).commitConfigurationDataPost( + doReturn(CommitInfo.emptyFluentFuture()).when(brokerFacade).commitConfigurationDataPost( notNull(DOMMountPoint.class), notNull(YangInstanceIdentifier.class), notNull(NormalizedNode.class), isNull(), isNull()); @@ -283,7 +284,7 @@ public class JSONRestconfServiceImplTest { @Test(expected = TransactionCommitFailedException.class) @SuppressWarnings({ "checkstyle:IllegalThrows", "checkstyle:avoidHidingCauseException" }) public void testPostFailure() throws Throwable { - doReturn(Futures.immediateFailedCheckedFuture(new TransactionCommitFailedException("mock"))).when(brokerFacade) + doReturn(immediateFailedFluentFuture(new TransactionCommitFailedException("mock"))).when(brokerFacade) .commitConfigurationDataPost(any(SchemaContext.class), any(YangInstanceIdentifier.class), any(NormalizedNode.class), isNull(), isNull()); @@ -298,7 +299,6 @@ public class JSONRestconfServiceImplTest { } } - @SuppressWarnings("rawtypes") @Test public void testPatch() throws Exception { final PatchStatusContext result = mock(PatchStatusContext.class); @@ -322,7 +322,6 @@ public class JSONRestconfServiceImplTest { assertTrue(patchResult.get().contains("\"ok\":[null]")); } - @SuppressWarnings("rawtypes") @Test public void testPatchBehindMountPoint() throws Exception { final PatchStatusContext result = mock(PatchStatusContext.class); @@ -367,7 +366,7 @@ public class JSONRestconfServiceImplTest { @Test public void testDelete() throws Exception { - doReturn(Futures.immediateCheckedFuture(null)).when(brokerFacade) + doReturn(CommitInfo.emptyFluentFuture()).when(brokerFacade) .commitConfigurationDataDelete(notNull(YangInstanceIdentifier.class)); final String uriPath = "ietf-interfaces:interfaces/interface/eth0"; @@ -419,8 +418,7 @@ public class JSONRestconfServiceImplTest { final SchemaPath path = SchemaPath.create(true, MAKE_TOAST_QNAME); final DOMRpcResult expResult = new DefaultDOMRpcResult((NormalizedNode)null); - doReturn(Futures.immediateCheckedFuture(expResult)).when(brokerFacade).invokeRpc(eq(path), - any(NormalizedNode.class)); + doReturn(immediateFluentFuture(expResult)).when(brokerFacade).invokeRpc(eq(path), any(NormalizedNode.class)); final String uriPath = "toaster:make-toast"; final String input = loadData("/full-versions/make-toast-rpc-input.json"); @@ -444,8 +442,7 @@ public class JSONRestconfServiceImplTest { final SchemaPath path = SchemaPath.create(true, CANCEL_TOAST_QNAME); final DOMRpcResult expResult = new DefaultDOMRpcResult((NormalizedNode)null); - doReturn(Futures.immediateCheckedFuture(expResult)).when(brokerFacade).invokeRpc(any(SchemaPath.class), - isNull()); + doReturn(immediateFluentFuture(expResult)).when(brokerFacade).invokeRpc(any(SchemaPath.class), isNull()); final String uriPath = "toaster:cancel-toast"; @@ -464,8 +461,7 @@ public class JSONRestconfServiceImplTest { .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(TEST_OUTPUT_QNAME)) .withChild(ImmutableNodes.leafNode(TEXT_OUT_QNAME, "foo")).build(); final DOMRpcResult expResult = new DefaultDOMRpcResult(outputNode); - doReturn(Futures.immediateCheckedFuture(expResult)).when(brokerFacade).invokeRpc(any(SchemaPath.class), - isNull()); + doReturn(immediateFluentFuture(expResult)).when(brokerFacade).invokeRpc(any(SchemaPath.class), isNull()); final String uriPath = "toaster:testOutput"; @@ -481,7 +477,7 @@ public class JSONRestconfServiceImplTest { @Test(expected = OperationFailedException.class) public void testInvokeRpcFailure() throws Exception { final DOMRpcException exception = new DOMRpcImplementationNotAvailableException("testExeption"); - doReturn(Futures.immediateFailedCheckedFuture(exception)).when(brokerFacade).invokeRpc(any(SchemaPath.class), + doReturn(immediateFailedFluentFuture(exception)).when(brokerFacade).invokeRpc(any(SchemaPath.class), any(NormalizedNode.class)); final String uriPath = "toaster:cancel-toast"; diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestDeleteOperationTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestDeleteOperationTest.java index 9fecff8b7a..371466d759 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestDeleteOperationTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestDeleteOperationTest.java @@ -10,12 +10,11 @@ package org.opendaylight.controller.sal.restconf.impl.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; +import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFailedFluentFuture; -import com.google.common.util.concurrent.CheckedFuture; -import com.google.common.util.concurrent.Futures; import java.io.FileNotFoundException; import java.io.UnsupportedEncodingException; import java.util.Set; @@ -28,6 +27,7 @@ import org.junit.BeforeClass; import org.junit.Test; import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils; +import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.netconf.sal.rest.impl.JsonNormalizedNodeBodyReader; import org.opendaylight.netconf.sal.rest.impl.NormalizedNodeJsonBodyWriter; import org.opendaylight.netconf.sal.rest.impl.NormalizedNodeXmlBodyWriter; @@ -79,8 +79,8 @@ public class RestDeleteOperationTest extends JerseyTest { @Test public void deleteConfigStatusCodes() throws UnsupportedEncodingException { final String uri = "/config/test-interface:interfaces"; - when(brokerFacade.commitConfigurationDataDelete(any(YangInstanceIdentifier.class))).thenReturn( - Futures.immediateCheckedFuture(null)); + doReturn(CommitInfo.emptyFluentFuture()).when(brokerFacade) + .commitConfigurationDataDelete(any(YangInstanceIdentifier.class)); Response response = target(uri).request(MediaType.APPLICATION_XML).delete(); assertEquals(200, response.getStatus()); @@ -93,9 +93,8 @@ public class RestDeleteOperationTest extends JerseyTest { @Test public void deleteFailTest() throws Exception { final String uri = "/config/test-interface:interfaces"; - final CheckedFuture future = - Futures.immediateFailedCheckedFuture(new TransactionCommitFailedException("failed test")); - when(brokerFacade.commitConfigurationDataDelete(any(YangInstanceIdentifier.class))).thenReturn(future); + doReturn(immediateFailedFluentFuture(new TransactionCommitFailedException("failed test"))).when(brokerFacade) + .commitConfigurationDataDelete(any(YangInstanceIdentifier.class)); final Response response = target(uri).request(MediaType.APPLICATION_XML).delete(); assertEquals(500, response.getStatus()); } diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestGetOperationTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestGetOperationTest.java index 3ee8778419..2d4aa4451b 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestGetOperationTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestGetOperationTest.java @@ -5,7 +5,6 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.controller.sal.restconf.impl.test; import static org.junit.Assert.assertEquals; @@ -41,8 +40,8 @@ import org.glassfish.jersey.test.JerseyTest; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; import org.opendaylight.netconf.sal.rest.impl.JsonNormalizedNodeBodyReader; import org.opendaylight.netconf.sal.rest.impl.NormalizedNodeJsonBodyWriter; import org.opendaylight.netconf.sal.rest.impl.NormalizedNodeXmlBodyWriter; diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPostOperationTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPostOperationTest.java index 4f68adbdb4..df5f423e01 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPostOperationTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPostOperationTest.java @@ -10,6 +10,7 @@ package org.opendaylight.controller.sal.restconf.impl.test; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.isNull; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -17,8 +18,7 @@ import static org.mockito.Mockito.when; import static org.opendaylight.controller.sal.restconf.impl.test.RestOperationUtils.XML; import com.google.common.collect.ImmutableList; -import com.google.common.util.concurrent.CheckedFuture; -import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.FluentFuture; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; @@ -32,8 +32,9 @@ import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; import org.mockito.ArgumentCaptor; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils; +import org.opendaylight.mdsal.common.api.CommitInfo; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; import org.opendaylight.netconf.sal.rest.api.Draft02; import org.opendaylight.netconf.sal.rest.impl.JsonNormalizedNodeBodyReader; import org.opendaylight.netconf.sal.rest.impl.NormalizedNodeJsonBodyWriter; @@ -102,7 +103,7 @@ public class RestPostOperationTest extends JerseyTest { public void postDataViaUrlMountPoint() throws UnsupportedEncodingException { setSchemaControllerContext(schemaContextYangsIetf); when(brokerFacade.commitConfigurationDataPost(any(DOMMountPoint.class), any(YangInstanceIdentifier.class), - any(NormalizedNode.class), null, null)).thenReturn(mock(CheckedFuture.class)); + any(NormalizedNode.class), null, null)).thenReturn(mock(FluentFuture.class)); when(mountInstance.getSchemaContext()).thenReturn(schemaContextTestModule); @@ -121,7 +122,7 @@ public class RestPostOperationTest extends JerseyTest { public void createConfigurationDataTest() throws UnsupportedEncodingException, ParseException { when(brokerFacade.commitConfigurationDataPost((SchemaContext) null, any(YangInstanceIdentifier.class), any(NormalizedNode.class), null, null)) - .thenReturn(mock(CheckedFuture.class)); + .thenReturn(mock(FluentFuture.class)); final ArgumentCaptor instanceIdCaptor = ArgumentCaptor.forClass(YangInstanceIdentifier.class); @@ -150,9 +151,9 @@ public class RestPostOperationTest extends JerseyTest { @Test public void createConfigurationDataNullTest() throws UnsupportedEncodingException { - when(brokerFacade.commitConfigurationDataPost(any(SchemaContext.class), any(YangInstanceIdentifier.class), - any(NormalizedNode.class), isNull(), isNull())) - .thenReturn(Futures.immediateCheckedFuture(null)); + doReturn(CommitInfo.emptyFluentFuture()).when(brokerFacade).commitConfigurationDataPost( + any(SchemaContext.class), any(YangInstanceIdentifier.class), any(NormalizedNode.class), isNull(), + isNull()); //FIXME : find who is set schemaContext // final String URI_1 = "/config"; diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPutConfigTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPutConfigTest.java index 81117609f8..55fc13830a 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPutConfigTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPutConfigTest.java @@ -5,11 +5,8 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.controller.sal.restconf.impl.test; -import com.google.common.util.concurrent.CheckedFuture; -import com.google.common.util.concurrent.Futures; import java.io.FileNotFoundException; import java.util.HashSet; import javax.ws.rs.core.MultivaluedMap; @@ -21,9 +18,9 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.runners.MockitoJUnitRunner; -import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; +import org.mockito.junit.MockitoJUnitRunner; import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils; +import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.netconf.sal.restconf.impl.BrokerFacade; import org.opendaylight.netconf.sal.restconf.impl.ControllerContext; import org.opendaylight.netconf.sal.restconf.impl.PutResult; @@ -133,11 +130,9 @@ public class RestPutConfigTest { private void mockingBrokerPut(final YangInstanceIdentifier yii, final NormalizedNode data) { final PutResult result = Mockito.mock(PutResult.class); - final CheckedFuture checkedFuture = - Futures.immediateCheckedFuture(null); Mockito.when(this.brokerFacade.commitConfigurationDataPut(schemaContext, yii, data, null, null)) .thenReturn(result); - Mockito.when(result.getFutureOfPutData()).thenReturn(checkedFuture); + Mockito.doReturn(CommitInfo.emptyFluentFuture()).when(result).getFutureOfPutData(); Mockito.when(result.getStatus()).thenReturn(Status.OK); } } diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPutOperationTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPutOperationTest.java index e45ce43d1f..6e94128c5f 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPutOperationTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPutOperationTest.java @@ -14,8 +14,6 @@ import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import com.google.common.util.concurrent.CheckedFuture; -import com.google.common.util.concurrent.Futures; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; @@ -31,10 +29,11 @@ import org.glassfish.jersey.test.JerseyTest; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; -import org.opendaylight.controller.md.sal.common.api.data.OptimisticLockFailedException; -import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils; +import org.opendaylight.mdsal.common.api.CommitInfo; +import org.opendaylight.mdsal.common.api.OptimisticLockFailedException; +import org.opendaylight.mdsal.common.api.TransactionCommitFailedException; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; import org.opendaylight.netconf.sal.rest.impl.JsonNormalizedNodeBodyReader; import org.opendaylight.netconf.sal.rest.impl.NormalizedNodeJsonBodyWriter; import org.opendaylight.netconf.sal.rest.impl.NormalizedNodeXmlBodyWriter; @@ -133,12 +132,10 @@ public class RestPutOperationTest extends JerseyTest { @Test public void testRpcResultCommitedToStatusCodesWithMountPoint() throws UnsupportedEncodingException, FileNotFoundException, URISyntaxException { - final CheckedFuture dummyFuture = Futures.immediateCheckedFuture(null); final PutResult result = mock(PutResult.class); - when( - brokerFacade.commitMountPointDataPut(any(DOMMountPoint.class), any(YangInstanceIdentifier.class), - any(NormalizedNode.class), null, null)).thenReturn(result); - when(result.getFutureOfPutData()).thenReturn(dummyFuture); + when(brokerFacade.commitMountPointDataPut(any(DOMMountPoint.class), any(YangInstanceIdentifier.class), + any(NormalizedNode.class), null, null)).thenReturn(result); + doReturn(CommitInfo.emptyFluentFuture()).when(result).getFutureOfPutData(); when(result.getStatus()).thenReturn(Status.OK); when(mountInstance.getSchemaContext()).thenReturn(schemaContextTestModule); @@ -152,11 +149,10 @@ public class RestPutOperationTest extends JerseyTest { @Test public void putDataMountPointIntoHighestElement() throws UnsupportedEncodingException, URISyntaxException { - final CheckedFuture dummyFuture = Futures.immediateCheckedFuture(null); final PutResult result = mock(PutResult.class); doReturn(result).when(brokerFacade).commitMountPointDataPut(any(DOMMountPoint.class), any(YangInstanceIdentifier.class), any(NormalizedNode.class), null, null); - when(result.getFutureOfPutData()).thenReturn(dummyFuture); + doReturn(CommitInfo.emptyFluentFuture()).when(result).getFutureOfPutData(); when(result.getStatus()).thenReturn(Status.OK); when(mountInstance.getSchemaContext()).thenReturn(schemaContextTestModule); diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestconfImplNotificationSubscribingTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestconfImplNotificationSubscribingTest.java index 8447150262..ddf793e289 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestconfImplNotificationSubscribingTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestconfImplNotificationSubscribingTest.java @@ -25,8 +25,8 @@ import org.junit.Test; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; -import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils; +import org.opendaylight.mdsal.dom.api.DOMDataBroker; import org.opendaylight.netconf.sal.restconf.impl.BrokerFacade; import org.opendaylight.netconf.sal.restconf.impl.ControllerContext; import org.opendaylight.netconf.sal.restconf.impl.RestconfImpl; diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestconfImplTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestconfImplTest.java index 59474e3991..92a4361004 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestconfImplTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestconfImplTest.java @@ -17,11 +17,10 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFluentFuture; -import com.google.common.base.Optional; import com.google.common.collect.Lists; import com.google.common.collect.Sets; -import com.google.common.util.concurrent.Futures; import java.io.FileNotFoundException; import java.net.URI; import java.text.ParseException; @@ -31,6 +30,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Optional; import java.util.Set; import javax.ws.rs.core.MultivaluedHashMap; import javax.ws.rs.core.MultivaluedMap; @@ -39,10 +39,10 @@ import javax.ws.rs.core.UriInfo; import org.junit.BeforeClass; import org.junit.Test; import org.mockito.Mockito; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; +import org.opendaylight.mdsal.dom.api.DOMRpcResult; +import org.opendaylight.mdsal.dom.api.DOMRpcService; import org.opendaylight.netconf.sal.restconf.impl.BrokerFacade; import org.opendaylight.netconf.sal.restconf.impl.ControllerContext; import org.opendaylight.netconf.sal.restconf.impl.RestconfImpl; @@ -93,7 +93,7 @@ public class RestconfImplTest { binaryKeyTest(al, al); } - private void binaryKeyTest(final List al, final List al2) { + private static void binaryKeyTest(final List al, final List al2) { final QName keyDef = QName.create("test:key:binary", "2017-08-14", "b1"); @@ -140,7 +140,7 @@ public class RestconfImplTest { doReturn(new MultivaluedHashMap<>()).when(uriInfo).getQueryParameters(anyBoolean()); final NormalizedNodeContext ctx = mock(NormalizedNodeContext.class); - final InstanceIdentifierContext iiCtx = mock(InstanceIdentifierContext.class); + final InstanceIdentifierContext iiCtx = mock(InstanceIdentifierContext.class); doReturn(iiCtx).when(ctx).getInstanceIdentifierContext(); final SchemaNode schemaNode = mock(SchemaNode.class); doReturn(schemaNode).when(iiCtx).getSchemaNode(); @@ -151,7 +151,7 @@ public class RestconfImplTest { doReturn(mount).when(iiCtx).getMountPoint(); final DOMRpcService rpcService = mock(DOMRpcService.class); doReturn(Optional.of(rpcService)).when(mount).getService(DOMRpcService.class); - doReturn(Futures.immediateCheckedFuture(mock(DOMRpcResult.class))).when(rpcService) + doReturn(immediateFluentFuture(mock(DOMRpcResult.class))).when(rpcService) .invokeRpc(any(SchemaPath.class), any(NormalizedNode.class)); this.restconfImpl.invokeRpc("randomId", ctx, uriInfo); this.restconfImpl.invokeRpc("ietf-netconf", ctx, uriInfo); @@ -164,7 +164,7 @@ public class RestconfImplTest { @Test public void createNotificationStreamTest() { final NormalizedNodeContext payload = mock(NormalizedNodeContext.class); - final InstanceIdentifierContext iiCtx = mock(InstanceIdentifierContext.class); + final InstanceIdentifierContext iiCtx = mock(InstanceIdentifierContext.class); doReturn(iiCtx).when(payload).getInstanceIdentifierContext(); final SchemaNode schemaNode = mock(SchemaNode.class, diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/URITest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/URITest.java index 74350d37e5..2b989063d3 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/URITest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/URITest.java @@ -20,8 +20,8 @@ import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; import org.opendaylight.netconf.sal.restconf.impl.ControllerContext; import org.opendaylight.restconf.common.context.InstanceIdentifierContext; import org.opendaylight.restconf.common.errors.RestconfDocumentedException; diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/netconf/sal/streams/listeners/ListenerAdapterTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/netconf/sal/streams/listeners/ListenerAdapterTest.java index 68c398876a..4362192cdf 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/netconf/sal/streams/listeners/ListenerAdapterTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/netconf/sal/streams/listeners/ListenerAdapterTest.java @@ -5,7 +5,6 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.netconf.sal.streams.listeners; import static java.time.Instant.EPOCH; @@ -21,14 +20,14 @@ import org.json.JSONObject; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.binding.test.AbstractConcurrentDataBrokerTest; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; -import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeService; -import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeIdentifier; import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils; +import org.opendaylight.mdsal.binding.api.DataBroker; +import org.opendaylight.mdsal.binding.api.WriteTransaction; +import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractConcurrentDataBrokerTest; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.mdsal.dom.api.DOMDataBroker; +import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService; +import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; import org.opendaylight.netconf.sal.restconf.impl.ControllerContext; import org.opendaylight.yang.gen.v1.instance.identifier.patch.module.rev151121.PatchCont; import org.opendaylight.yang.gen.v1.instance.identifier.patch.module.rev151121.patch.cont.MyList1; @@ -53,7 +52,7 @@ public class ListenerAdapterTest extends AbstractConcurrentDataBrokerTest { private static final String JSON_NOTIF_UPDATE = "/listener-adapter-test/notif-update.json"; private static final String JSON_NOTIF_DEL = "/listener-adapter-test/notif-del.json"; - private static YangInstanceIdentifier PATCH_CONT_YIID = + private static final YangInstanceIdentifier PATCH_CONT_YIID = YangInstanceIdentifier.create(new YangInstanceIdentifier.NodeIdentifier(PatchCont.QNAME)); private static SchemaContext schemaContext; @@ -129,8 +128,8 @@ public class ListenerAdapterTest extends AbstractConcurrentDataBrokerTest { public void testJsonNotifsLeaves() throws Exception { ListenerAdapterTester adapter = new ListenerAdapterTester(PATCH_CONT_YIID, "Casey", NotificationOutputTypeGrouping.NotificationOutputType.JSON, true); - DOMDataTreeChangeService changeService = (DOMDataTreeChangeService) - domDataBroker.getSupportedExtensions().get(DOMDataTreeChangeService.class); + DOMDataTreeChangeService changeService = domDataBroker.getExtensions() + .getInstance(DOMDataTreeChangeService.class); DOMDataTreeIdentifier root = new DOMDataTreeIdentifier(LogicalDatastoreType.CONFIGURATION, PATCH_CONT_YIID); changeService.registerDataTreeChangeListener(root, adapter); @@ -139,18 +138,18 @@ public class ListenerAdapterTest extends AbstractConcurrentDataBrokerTest { InstanceIdentifier iid = InstanceIdentifier.create(PatchCont.class) .child(MyList1.class, new MyList1Key("Althea")); writeTransaction.put(LogicalDatastoreType.CONFIGURATION, iid, builder.build(), true); - writeTransaction.submit(); + writeTransaction.commit(); adapter.assertGot(getNotifJson(JSON_NOTIF_LEAVES_CREATE)); writeTransaction = dataBroker.newWriteOnlyTransaction(); builder = new MyList1Builder().withKey(new MyList1Key("Althea")).setMyLeaf12("Bertha"); writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, iid, builder.build(), true); - writeTransaction.submit(); + writeTransaction.commit(); adapter.assertGot(getNotifJson(JSON_NOTIF_LEAVES_UPDATE)); writeTransaction = dataBroker.newWriteOnlyTransaction(); writeTransaction.delete(LogicalDatastoreType.CONFIGURATION, iid); - writeTransaction.submit(); + writeTransaction.commit(); adapter.assertGot(getNotifJson(JSON_NOTIF_LEAVES_DEL)); } @@ -158,8 +157,8 @@ public class ListenerAdapterTest extends AbstractConcurrentDataBrokerTest { public void testJsonNotifs() throws Exception { ListenerAdapterTester adapter = new ListenerAdapterTester(PATCH_CONT_YIID, "Casey", NotificationOutputTypeGrouping.NotificationOutputType.JSON, false); - DOMDataTreeChangeService changeService = (DOMDataTreeChangeService) - domDataBroker.getSupportedExtensions().get(DOMDataTreeChangeService.class); + DOMDataTreeChangeService changeService = domDataBroker.getExtensions() + .getInstance(DOMDataTreeChangeService.class); DOMDataTreeIdentifier root = new DOMDataTreeIdentifier(LogicalDatastoreType.CONFIGURATION, PATCH_CONT_YIID); changeService.registerDataTreeChangeListener(root, adapter); @@ -168,18 +167,18 @@ public class ListenerAdapterTest extends AbstractConcurrentDataBrokerTest { InstanceIdentifier iid = InstanceIdentifier.create(PatchCont.class) .child(MyList1.class, new MyList1Key("Althea")); writeTransaction.put(LogicalDatastoreType.CONFIGURATION, iid, builder.build(), true); - writeTransaction.submit(); + writeTransaction.commit(); adapter.assertGot(getNotifJson(JSON_NOTIF_CREATE)); writeTransaction = dataBroker.newWriteOnlyTransaction(); builder = new MyList1Builder().withKey(new MyList1Key("Althea")).setMyLeaf12("Bertha"); writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, iid, builder.build(), true); - writeTransaction.submit(); + writeTransaction.commit(); adapter.assertGot(getNotifJson(JSON_NOTIF_UPDATE)); writeTransaction = dataBroker.newWriteOnlyTransaction(); writeTransaction.delete(LogicalDatastoreType.CONFIGURATION, iid); - writeTransaction.submit(); + writeTransaction.commit(); adapter.assertGot(getNotifJson(JSON_NOTIF_DEL)); } } diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/netconf/sal/streams/listeners/NotificationListenerTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/netconf/sal/streams/listeners/NotificationListenerTest.java index fb6bb71687..ac45de8a74 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/netconf/sal/streams/listeners/NotificationListenerTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/netconf/sal/streams/listeners/NotificationListenerTest.java @@ -26,9 +26,9 @@ import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.mockito.MockitoAnnotations; -import org.opendaylight.controller.md.sal.dom.api.DOMNotification; import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils; import org.opendaylight.controller.sal.restconf.impl.test.TestUtils; +import org.opendaylight.mdsal.dom.api.DOMNotification; import org.opendaylight.netconf.sal.restconf.impl.ControllerContext; import org.opendaylight.yang.gen.v1.urn.sal.restconf.event.subscription.rev140708.NotificationOutputTypeGrouping.NotificationOutputType; import org.opendaylight.yangtools.util.SingletonSet; diff --git a/restconf/restconf-nb-rfc8040/pom.xml b/restconf/restconf-nb-rfc8040/pom.xml index 05f59f7fe5..9cd4b623e9 100644 --- a/restconf/restconf-nb-rfc8040/pom.xml +++ b/restconf/restconf-nb-rfc8040/pom.xml @@ -79,8 +79,8 @@ - org.opendaylight.controller - sal-core-spi + org.opendaylight.mdsal + mdsal-dom-spi org.opendaylight.controller @@ -90,10 +90,6 @@ org.opendaylight.controller sal-common-util - - org.opendaylight.controller - sal-broker-impl - io.netty @@ -158,14 +154,14 @@ test - org.opendaylight.controller - sal-binding-broker-impl - test-jar + org.opendaylight.mdsal + mdsal-binding-dom-adapter test - org.opendaylight.controller - sal-binding-broker-impl + org.opendaylight.mdsal + mdsal-binding-dom-adapter + test-jar test diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/codecs/RestCodec.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/codecs/RestCodec.java index f4e1f841e1..52bebecf37 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/codecs/RestCodec.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/codecs/RestCodec.java @@ -17,7 +17,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; import org.opendaylight.restconf.common.util.IdentityValuesDTO; import org.opendaylight.restconf.common.util.IdentityValuesDTO.IdentityValue; import org.opendaylight.restconf.common.util.IdentityValuesDTO.Predicate; @@ -232,7 +232,7 @@ public final class RestCodec { identityValue.setPredicates(predicates); } else if (pathArgument instanceof NodeWithValue && identityValue != null) { final List predicates = new ArrayList<>(); - final String value = String.valueOf(((NodeWithValue) pathArgument).getValue()); + final String value = String.valueOf(((NodeWithValue) pathArgument).getValue()); predicates.add(new Predicate(null, value)); identityValue.setPredicates(predicates); } diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/DOMDataBrokerHandler.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/DOMDataBrokerHandler.java index 99a9ba9e0b..f53bb40513 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/DOMDataBrokerHandler.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/DOMDataBrokerHandler.java @@ -7,11 +7,10 @@ */ package org.opendaylight.restconf.nb.rfc8040.handlers; -import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; +import org.opendaylight.mdsal.dom.api.DOMDataBroker; /** * Implementation of {@link DOMDataBrokerHandler}. - * */ public class DOMDataBrokerHandler implements Handler { diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/DOMMountPointServiceHandler.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/DOMMountPointServiceHandler.java index 311dae724f..fcec775ce9 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/DOMMountPointServiceHandler.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/DOMMountPointServiceHandler.java @@ -7,8 +7,9 @@ */ package org.opendaylight.restconf.nb.rfc8040.handlers; -import java.util.Objects; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; +import static java.util.Objects.requireNonNull; + +import org.opendaylight.mdsal.dom.api.DOMMountPointService; /** * Implementation of {@link DOMMountPointServiceHandler}. @@ -24,10 +25,10 @@ public final class DOMMountPointServiceHandler implements Handler { diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/RpcServiceHandler.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/RpcServiceHandler.java index b9aa1e2187..beff503a67 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/RpcServiceHandler.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/RpcServiceHandler.java @@ -7,14 +7,12 @@ */ package org.opendaylight.restconf.nb.rfc8040.handlers; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; +import org.opendaylight.mdsal.dom.api.DOMRpcService; /** * Implementation of {@link RpcServiceHandler}. - * */ public class RpcServiceHandler implements Handler { - private final DOMRpcService rpcService; public RpcServiceHandler(final DOMRpcService rpcService) { diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/SchemaContextHandler.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/SchemaContextHandler.java index ee29d0afe2..86396c100d 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/SchemaContextHandler.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/SchemaContextHandler.java @@ -8,11 +8,13 @@ package org.opendaylight.restconf.nb.rfc8040.handlers; import com.google.common.base.Preconditions; +import com.google.common.base.Throwables; import java.util.Collection; +import java.util.concurrent.ExecutionException; import java.util.concurrent.atomic.AtomicInteger; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; -import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.mdsal.common.api.TransactionCommitFailedException; +import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction; import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.restconf.common.errors.RestconfDocumentedException; import org.opendaylight.restconf.nb.rfc8040.Rfc8040.IetfYangLibrary; @@ -59,8 +61,8 @@ public class SchemaContextHandler implements SchemaContextListenerHandler, AutoC this.domSchemaService = domSchemaService; } - public static SchemaContextHandler newInstance(TransactionChainHandler transactionChainHandler, - DOMSchemaService domSchemaService) { + public static SchemaContextHandler newInstance(final TransactionChainHandler transactionChainHandler, + final DOMSchemaService domSchemaService) { return new SchemaContextHandler(transactionChainHandler, domSchemaService); } @@ -106,26 +108,29 @@ public class SchemaContextHandler implements SchemaContextListenerHandler, AutoC private void putData( final NormalizedNode>> normNode) { - final DOMDataWriteTransaction wTx = this.transactionChainHandler.get().newWriteOnlyTransaction(); + final DOMDataTreeWriteTransaction wTx = this.transactionChainHandler.get().newWriteOnlyTransaction(); wTx.put(LogicalDatastoreType.OPERATIONAL, YangInstanceIdentifier.create(NodeIdentifier.create(normNode.getNodeType())), normNode); try { - wTx.submit().checkedGet(); - } catch (final TransactionCommitFailedException e) { - if (!(e.getCause() instanceof ConflictingModificationAppliedException)) { - throw new RestconfDocumentedException("Problem occurred while putting data to DS.", e); + wTx.commit().get(); + } catch (InterruptedException e) { + throw new RestconfDocumentedException("Problem occurred while putting data to DS.", e); + } catch (ExecutionException e) { + final TransactionCommitFailedException failure = Throwables.getCauseAs(e, + TransactionCommitFailedException.class); + if (failure.getCause() instanceof ConflictingModificationAppliedException) { + /* + * Ignore error when another cluster node is already putting the same data to DS. + * We expect that cluster is homogeneous and that node was going to write the same data + * (that means no retry is needed). Transaction chain reset must be invoked to be able + * to continue writing data with another transaction after failed transaction. + * This is workaround for bug https://bugs.opendaylight.org/show_bug.cgi?id=7728 + */ + LOG.warn("Ignoring that another cluster node is already putting the same data to DS.", e); + this.transactionChainHandler.reset(); + } else { + throw new RestconfDocumentedException("Problem occurred while putting data to DS.", failure); } - - /* - Ignore error when another cluster node is already putting the same data to DS. - We expect that cluster is homogeneous and that node was going to write the same data - (that means no retry is needed). Transaction chain reset must be invoked to be able - to continue writing data with another transaction after failed transaction. - This is workaround for bug: - https://bugs.opendaylight.org/show_bug.cgi?id=7728 - */ - LOG.warn("Ignoring that another cluster node is already putting the same data to DS.", e); - this.transactionChainHandler.reset(); } } } diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/TransactionChainHandler.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/TransactionChainHandler.java index 4acea3aad7..7c2440bc3f 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/TransactionChainHandler.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/handlers/TransactionChainHandler.java @@ -5,21 +5,17 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.restconf.nb.rfc8040.handlers; import java.util.Objects; -import javax.annotation.Nullable; -import org.opendaylight.controller.md.sal.common.api.data.AsyncTransaction; -import org.opendaylight.controller.md.sal.common.api.data.TransactionChain; -import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener; -import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; -import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain; +import org.opendaylight.mdsal.dom.api.DOMDataBroker; +import org.opendaylight.mdsal.dom.api.DOMDataTreeTransaction; +import org.opendaylight.mdsal.dom.api.DOMTransactionChain; +import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener; import org.opendaylight.restconf.common.errors.RestconfDocumentedException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - /** * Implementation of {@link TransactionChainHandler}. * @@ -27,23 +23,23 @@ import org.slf4j.LoggerFactory; public class TransactionChainHandler implements Handler, AutoCloseable { private static final Logger LOG = LoggerFactory.getLogger(TransactionChainHandler.class); - private final TransactionChainListener transactionChainListener = new TransactionChainListener() { + private final DOMTransactionChainListener transactionChainListener = new DOMTransactionChainListener() { @Override - public void onTransactionChainFailed(final TransactionChain chain, - final AsyncTransaction transaction, final Throwable cause) { + public void onTransactionChainFailed(final DOMTransactionChain chain, final DOMDataTreeTransaction transaction, + final Throwable cause) { LOG.warn("TransactionChain({}) {} FAILED!", chain, transaction.getIdentifier(), cause); reset(); throw new RestconfDocumentedException("TransactionChain(" + chain + ") not committed correctly", cause); } @Override - public void onTransactionChainSuccessful(final TransactionChain chain) { + public void onTransactionChainSuccessful(final DOMTransactionChain chain) { LOG.trace("TransactionChain({}) SUCCESSFUL", chain); } }; - @Nullable private final DOMDataBroker dataBroker; + private volatile DOMTransactionChain transactionChain; /** diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/JsonToPatchBodyReader.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/JsonToPatchBodyReader.java index 2b39c8a0d5..604d7ba358 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/JsonToPatchBodyReader.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/patch/JsonToPatchBodyReader.java @@ -5,10 +5,8 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.restconf.nb.rfc8040.jersey.providers.patch; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.gson.stream.JsonReader; @@ -21,6 +19,7 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.Locale; +import java.util.Optional; import java.util.concurrent.atomic.AtomicReference; import javax.annotation.Nonnull; import javax.ws.rs.Consumes; @@ -58,8 +57,8 @@ import org.slf4j.LoggerFactory; public class JsonToPatchBodyReader extends AbstractToPatchBodyReader { private static final Logger LOG = LoggerFactory.getLogger(JsonToPatchBodyReader.class); - public JsonToPatchBodyReader(SchemaContextHandler schemaContextHandler, - DOMMountPointServiceHandler mountPointServiceHandler) { + public JsonToPatchBodyReader(final SchemaContextHandler schemaContextHandler, + final DOMMountPointServiceHandler mountPointServiceHandler) { super(schemaContextHandler, mountPointServiceHandler); } @@ -90,7 +89,7 @@ public class JsonToPatchBodyReader extends AbstractToPatchBodyReader { try { return readFrom( ParserIdentifier.toInstanceIdentifier(uriPath, getSchemaContext(), - Optional.fromNullable(getMountPointService())), entityStream); + Optional.ofNullable(getMountPointService())), entityStream); } catch (final Exception e) { propagateExceptionAs(e); return null; // no-op diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/spi/AbstractIdentifierAwareJaxRsProvider.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/spi/AbstractIdentifierAwareJaxRsProvider.java index c77fa97ae2..6cd43cf3dc 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/spi/AbstractIdentifierAwareJaxRsProvider.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/spi/AbstractIdentifierAwareJaxRsProvider.java @@ -5,15 +5,14 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.restconf.nb.rfc8040.jersey.providers.spi; -import com.google.common.base.Optional; import java.io.IOException; import java.io.InputStream; import java.io.PushbackInputStream; import java.lang.annotation.Annotation; import java.lang.reflect.Type; +import java.util.Optional; import javax.ws.rs.HttpMethod; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Context; @@ -22,7 +21,7 @@ import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Request; import javax.ws.rs.core.UriInfo; import javax.ws.rs.ext.MessageBodyReader; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; +import org.opendaylight.mdsal.dom.api.DOMMountPointService; import org.opendaylight.restconf.common.context.InstanceIdentifierContext; import org.opendaylight.restconf.nb.rfc8040.handlers.DOMMountPointServiceHandler; import org.opendaylight.restconf.nb.rfc8040.handlers.SchemaContextHandler; @@ -41,8 +40,8 @@ public abstract class AbstractIdentifierAwareJaxRsProvider implements Message private final SchemaContextHandler schemaContextHandler; private final DOMMountPointServiceHandler mountPointServiceHandler; - protected AbstractIdentifierAwareJaxRsProvider(SchemaContextHandler schemaContextHandler, - DOMMountPointServiceHandler mountPointServiceHandler) { + protected AbstractIdentifierAwareJaxRsProvider(final SchemaContextHandler schemaContextHandler, + final DOMMountPointServiceHandler mountPointServiceHandler) { this.schemaContextHandler = schemaContextHandler; this.mountPointServiceHandler = mountPointServiceHandler; } @@ -90,7 +89,7 @@ public abstract class AbstractIdentifierAwareJaxRsProvider implements Message private InstanceIdentifierContext getInstanceIdentifierContext() { return ParserIdentifier.toInstanceIdentifier(getIdentifier(), getSchemaContext(), - Optional.fromNullable(getMountPointService())); + Optional.ofNullable(getMountPointService())); } protected UriInfo getUriInfo() { diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/references/SchemaContextRef.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/references/SchemaContextRef.java index 40fdd71e9c..358b6ec14e 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/references/SchemaContextRef.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/references/SchemaContextRef.java @@ -12,7 +12,7 @@ import java.net.URI; import java.util.Date; import java.util.Optional; import java.util.Set; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; import org.opendaylight.restconf.nb.rfc8040.Rfc8040; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.Revision; diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/api/JSONRestconfService.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/api/JSONRestconfService.java index b34afc2409..1d492ba66f 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/api/JSONRestconfService.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/api/JSONRestconfService.java @@ -7,9 +7,9 @@ */ package org.opendaylight.restconf.nb.rfc8040.rests.services.api; -import com.google.common.base.Optional; +import java.util.Optional; import javax.annotation.Nonnull; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.yangtools.yang.common.OperationFailedException; /** diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/JSONRestconfServiceRfc8040Impl.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/JSONRestconfServiceRfc8040Impl.java index bcb93603d5..9064dbea4a 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/JSONRestconfServiceRfc8040Impl.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/JSONRestconfServiceRfc8040Impl.java @@ -7,7 +7,6 @@ */ package org.opendaylight.restconf.nb.rfc8040.rests.services.impl; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.io.ByteArrayInputStream; @@ -17,11 +16,12 @@ import java.io.InputStream; import java.lang.annotation.Annotation; import java.nio.charset.StandardCharsets; import java.util.List; +import java.util.Optional; import javax.annotation.Nullable; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Response; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.restconf.common.context.InstanceIdentifierContext; import org.opendaylight.restconf.common.context.NormalizedNodeContext; import org.opendaylight.restconf.common.errors.RestconfDocumentedException; @@ -147,7 +147,7 @@ public class JSONRestconfServiceRfc8040Impl implements JSONRestconfService, Auto } LOG.debug("Data missing - returning absent"); - return Optional.absent(); + return Optional.empty(); } } @@ -180,7 +180,7 @@ public class JSONRestconfServiceRfc8040Impl implements JSONRestconfService, Auto propagateExceptionAs(uriPath, e, "RPC"); } - return Optional.fromNullable(output); + return Optional.ofNullable(output); } @SuppressWarnings("checkstyle:IllegalCatch") @@ -208,7 +208,7 @@ public class JSONRestconfServiceRfc8040Impl implements JSONRestconfService, Auto } catch (final Exception e) { propagateExceptionAs(uriPath, e, "PATCH"); } - return Optional.fromNullable(output); + return Optional.ofNullable(output); } @Override diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImpl.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImpl.java index de92916275..ab6f26d855 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImpl.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImpl.java @@ -12,7 +12,6 @@ import static org.opendaylight.restconf.nb.rfc8040.rests.utils.RestconfStreamsCo import static org.opendaylight.restconf.nb.rfc8040.rests.utils.RestconfStreamsConstants.STREAM_LOCATION_PATH_PART; import static org.opendaylight.restconf.nb.rfc8040.rests.utils.RestconfStreamsConstants.STREAM_PATH; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; import java.time.Clock; import java.time.LocalDateTime; @@ -20,12 +19,13 @@ import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Map.Entry; import java.util.Objects; +import java.util.Optional; import javax.annotation.Nonnull; import javax.ws.rs.Path; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; -import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; +import org.opendaylight.mdsal.dom.api.DOMDataBroker; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; import org.opendaylight.restconf.common.context.InstanceIdentifierContext; import org.opendaylight.restconf.common.context.NormalizedNodeContext; import org.opendaylight.restconf.common.context.WriterParameters; diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImpl.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImpl.java index e3cc96a461..deb3fd160f 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImpl.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImpl.java @@ -10,8 +10,8 @@ package org.opendaylight.restconf.nb.rfc8040.rests.services.impl; import java.net.URI; import javax.ws.rs.Path; import javax.ws.rs.core.UriInfo; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; +import org.opendaylight.mdsal.dom.api.DOMRpcResult; import org.opendaylight.restconf.common.context.InstanceIdentifierContext; import org.opendaylight.restconf.common.context.NormalizedNodeContext; import org.opendaylight.restconf.common.errors.RestconfDocumentedException; diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfStreamsSubscriptionServiceImpl.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfStreamsSubscriptionServiceImpl.java index ac60ed5603..6d37a2b786 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfStreamsSubscriptionServiceImpl.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfStreamsSubscriptionServiceImpl.java @@ -17,9 +17,9 @@ import java.util.Optional; import javax.annotation.Nonnull; import javax.ws.rs.Path; import javax.ws.rs.core.UriInfo; -import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; -import org.opendaylight.controller.md.sal.dom.api.DOMNotificationService; -import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain; +import org.opendaylight.mdsal.dom.api.DOMDataBroker; +import org.opendaylight.mdsal.dom.api.DOMNotificationService; +import org.opendaylight.mdsal.dom.api.DOMTransactionChain; import org.opendaylight.restconf.common.context.InstanceIdentifierContext; import org.opendaylight.restconf.common.context.NormalizedNodeContext; import org.opendaylight.restconf.common.errors.RestconfDocumentedException; diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/TransactionVarsWrapper.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/TransactionVarsWrapper.java index b60d86e066..706879f437 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/TransactionVarsWrapper.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/TransactionVarsWrapper.java @@ -7,9 +7,9 @@ */ package org.opendaylight.restconf.nb.rfc8040.rests.transactions; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; -import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; +import org.opendaylight.mdsal.dom.api.DOMTransactionChain; import org.opendaylight.restconf.common.context.InstanceIdentifierContext; import org.opendaylight.restconf.nb.rfc8040.handlers.TransactionChainHandler; @@ -72,7 +72,6 @@ public final class TransactionVarsWrapper { */ public void setLogicalDatastoreType(final LogicalDatastoreType datastoreType) { this.configuration = datastoreType; - } /** diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/CreateStreamUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/CreateStreamUtil.java index e088077d23..97cfb02d79 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/CreateStreamUtil.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/CreateStreamUtil.java @@ -8,13 +8,12 @@ package org.opendaylight.restconf.nb.rfc8040.rests.utils; import com.google.common.base.Preconditions; -import com.google.common.util.concurrent.CheckedFuture; import java.util.ArrayList; import java.util.List; import java.util.Optional; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult; -import org.opendaylight.controller.md.sal.dom.spi.DefaultDOMRpcResult; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.mdsal.dom.api.DOMRpcResult; +import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult; import org.opendaylight.restconf.common.context.NormalizedNodeContext; import org.opendaylight.restconf.common.errors.RestconfDocumentedException; import org.opendaylight.restconf.common.errors.RestconfError.ErrorTag; @@ -80,8 +79,7 @@ public final class CreateStreamUtil { * @param refSchemaCtx * reference to {@link SchemaContext} - * {@link SchemaContextRef} - * @return {@link CheckedFuture} with {@link DOMRpcResult} - This mean - * output of RPC - example in JSON: + * @return {@link DOMRpcResult} - This means output of RPC - example in JSON: * *
      *         {@code
diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/DeleteDataTransactionUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/DeleteDataTransactionUtil.java
index 25d8de9902..54e3964bd9 100644
--- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/DeleteDataTransactionUtil.java
+++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/DeleteDataTransactionUtil.java
@@ -7,12 +7,12 @@
  */
 package org.opendaylight.restconf.nb.rfc8040.rests.utils;
 
-import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.FluentFuture;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
+import org.opendaylight.mdsal.common.api.CommitInfo;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
 import org.opendaylight.restconf.nb.rfc8040.handlers.TransactionChainHandler;
 import org.opendaylight.restconf.nb.rfc8040.rests.transactions.TransactionVarsWrapper;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
@@ -35,8 +35,7 @@ public final class DeleteDataTransactionUtil {
      * @return {@link Response}
      */
     public static Response deleteData(final TransactionVarsWrapper transactionNode) {
-        final CheckedFuture future = submitData(
-                transactionNode.getTransactionChainHandler(),
+        final FluentFuture future = submitData(transactionNode.getTransactionChainHandler(),
                 transactionNode.getInstanceIdentifier().getInstanceIdentifier());
         final ResponseFactory response = new ResponseFactory(Status.NO_CONTENT);
         FutureCallbackTx.addCallback(future, RestconfDataServiceConstant.DeleteData.DELETE_TX_TYPE, response);
@@ -52,14 +51,14 @@ public final class DeleteDataTransactionUtil {
      *             read and write transaction
      * @param path
      *             path of data to delete
-     * @return {@link CheckedFuture}
+     * @return {@link FluentFuture}
      */
-    private static CheckedFuture submitData(
+    private static FluentFuture submitData(
             final TransactionChainHandler transactionChainHandler, final YangInstanceIdentifier path) {
-        final DOMDataReadWriteTransaction readWriteTx = transactionChainHandler.get().newReadWriteTransaction();
+        final DOMDataTreeReadWriteTransaction readWriteTx = transactionChainHandler.get().newReadWriteTransaction();
         TransactionUtil.checkItemExists(transactionChainHandler, readWriteTx, LogicalDatastoreType.CONFIGURATION, path,
                 RestconfDataServiceConstant.DeleteData.DELETE_TX_TYPE);
         readWriteTx.delete(LogicalDatastoreType.CONFIGURATION, path);
-        return readWriteTx.submit();
+        return readWriteTx.commit();
     }
 }
diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/FutureCallbackTx.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/FutureCallbackTx.java
index 447836260b..2471f4a156 100644
--- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/FutureCallbackTx.java
+++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/FutureCallbackTx.java
@@ -8,12 +8,13 @@
 package org.opendaylight.restconf.nb.rfc8040.rests.utils;
 
 import com.google.common.base.Throwables;
-import com.google.common.util.concurrent.CheckedFuture;
-import java.util.ArrayList;
+import com.google.common.collect.ImmutableList;
+import com.google.common.util.concurrent.FluentFuture;
 import java.util.List;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.controller.md.sal.dom.api.DOMRpcException;
-import org.opendaylight.controller.md.sal.dom.spi.DefaultDOMRpcResult;
+import java.util.concurrent.ExecutionException;
+import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
+import org.opendaylight.mdsal.dom.api.DOMRpcException;
+import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult;
 import org.opendaylight.netconf.api.NetconfDocumentedException;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.common.errors.RestconfError;
@@ -24,7 +25,6 @@ import org.slf4j.LoggerFactory;
 
 /**
  * Add callback for future objects and result set to the data factory.
- *
  */
 final class FutureCallbackTx {
 
@@ -47,28 +47,32 @@ final class FutureCallbackTx {
      *             if the Future throws an exception
      */
     @SuppressWarnings("checkstyle:IllegalCatch")
-    static  void addCallback(final CheckedFuture listenableFuture, final String txType,
-            final FutureDataFactory dataFactory) throws RestconfDocumentedException {
+    static  void addCallback(final FluentFuture listenableFuture, final String txType,
+            final FutureDataFactory dataFactory) throws RestconfDocumentedException {
 
         try {
-            final T result = listenableFuture.checkedGet();
+            final T result = listenableFuture.get();
             dataFactory.setResult(result);
             LOG.trace("Transaction({}) SUCCESSFUL", txType);
-        } catch (Exception e) {
+        } catch (InterruptedException e) {
+            dataFactory.setFailureStatus();
+            LOG.warn("Transaction({}) FAILED!", txType, e);
+            throw new RestconfDocumentedException("Transaction failed", e);
+        } catch (ExecutionException e) {
             dataFactory.setFailureStatus();
             LOG.warn("Transaction({}) FAILED!", txType, e);
-            if (e instanceof DOMRpcException) {
-                final List rpcErrorList = new ArrayList<>();
-                rpcErrorList.add(
-                        RpcResultBuilder.newError(RpcError.ErrorType.RPC, "operation-failed", e.getMessage()));
-                dataFactory.setResult((T) new DefaultDOMRpcResult(rpcErrorList));
-            } else if (e instanceof TransactionCommitFailedException) {
+
+            final Throwable cause = e.getCause();
+            if (cause instanceof DOMRpcException) {
+                dataFactory.setResult((T) new DefaultDOMRpcResult(ImmutableList.of(
+                    RpcResultBuilder.newError(RpcError.ErrorType.RPC, "operation-failed", cause.getMessage()))));
+            } else if (cause instanceof TransactionCommitFailedException) {
                 /* If device send some error message we want this message to get to client
                    and not just to throw it away or override it with new generic message.
                    We search for NetconfDocumentedException that was send from netconfSB
                    and we create RestconfDocumentedException accordingly.
                 */
-                final List causalChain = Throwables.getCausalChain(e);
+                final List causalChain = Throwables.getCausalChain(cause);
                 for (Throwable error : causalChain) {
                     if (error instanceof NetconfDocumentedException) {
                         throw new RestconfDocumentedException(error.getMessage(),
diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/NormalizedNodeFactory.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/NormalizedNodeFactory.java
index d429b057e7..d7198c2826 100644
--- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/NormalizedNodeFactory.java
+++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/NormalizedNodeFactory.java
@@ -7,7 +7,7 @@
  */
 package org.opendaylight.restconf.nb.rfc8040.rests.utils;
 
-import com.google.common.base.Optional;
+import java.util.Optional;
 import org.opendaylight.yangtools.concepts.Builder;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 
diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtil.java
index 2a843ce903..0444d0ad5c 100644
--- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtil.java
+++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtil.java
@@ -5,20 +5,19 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.restconf.nb.rfc8040.rests.utils;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
-import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.FluentFuture;
 import java.util.ArrayList;
 import java.util.List;
 import javax.ws.rs.core.Response.Status;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
+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.DOMDataTreeReadWriteTransaction;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.common.errors.RestconfError;
 import org.opendaylight.restconf.common.errors.RestconfError.ErrorTag;
@@ -57,7 +56,7 @@ public final class PatchDataTransactionUtil {
                                                final SchemaContextRef schemaContextRef) {
         final List editCollection = new ArrayList<>();
         boolean noError = true;
-        final DOMDataReadWriteTransaction tx = transactionNode.getTransactionChain().newReadWriteTransaction();
+        final DOMDataTreeReadWriteTransaction tx = transactionNode.getTransactionChain().newReadWriteTransaction();
 
         for (final PatchEntity patchEntity : context.getData()) {
             if (noError) {
@@ -132,7 +131,7 @@ public final class PatchDataTransactionUtil {
         // if no errors then submit transaction, otherwise cancel
         if (noError) {
             final ResponseFactory response = new ResponseFactory(Status.OK);
-            final CheckedFuture future = tx.submit();
+            final FluentFuture future = tx.commit();
 
             try {
                 FutureCallbackTx.addCallback(future, PatchData.PATCH_TX_TYPE, response);
@@ -162,7 +161,7 @@ public final class PatchDataTransactionUtil {
     private static void createDataWithinTransaction(final LogicalDatastoreType dataStore,
                                                     final YangInstanceIdentifier path,
                                                     final NormalizedNode payload,
-                                                    final DOMDataReadWriteTransaction rwTransaction,
+                                                    final DOMDataTreeReadWriteTransaction rwTransaction,
                                                     final SchemaContextRef schemaContextRef) {
         LOG.trace("POST {} within Restconf Patch: {} with payload {}", dataStore.name(), path, payload);
         createData(payload, schemaContextRef.get(), path, rwTransaction, dataStore, true);
@@ -176,7 +175,7 @@ public final class PatchDataTransactionUtil {
      */
     private static void deleteDataWithinTransaction(final LogicalDatastoreType dataStore,
                                                     final YangInstanceIdentifier path,
-                                                    final DOMDataReadWriteTransaction readWriteTransaction) {
+                                                    final DOMDataTreeReadWriteTransaction readWriteTransaction) {
         LOG.trace("Delete {} within Restconf Patch: {}", dataStore.name(), path);
         checkItemExistsWithinTransaction(readWriteTransaction, dataStore, path);
         readWriteTransaction.delete(dataStore, path);
@@ -193,7 +192,7 @@ public final class PatchDataTransactionUtil {
     private static void mergeDataWithinTransaction(final LogicalDatastoreType dataStore,
                                                    final YangInstanceIdentifier path,
                                                    final NormalizedNode payload,
-                                                   final DOMDataReadWriteTransaction writeTransaction,
+                                                   final DOMDataTreeWriteTransaction writeTransaction,
                                                    final SchemaContextRef schemaContextRef) {
         LOG.trace("Merge {} within Restconf Patch: {} with payload {}", dataStore.name(), path, payload);
         TransactionUtil.ensureParentsByMerge(path, schemaContextRef.get(), writeTransaction);
@@ -208,7 +207,7 @@ public final class PatchDataTransactionUtil {
      */
     private static void removeDataWithinTransaction(final LogicalDatastoreType dataStore,
                                                     final YangInstanceIdentifier path,
-                                                    final DOMDataWriteTransaction writeTransaction) {
+                                                    final DOMDataTreeWriteTransaction writeTransaction) {
         LOG.trace("Remove {} within Restconf Patch: {}", dataStore.name(), path);
         writeTransaction.delete(dataStore, path);
     }
@@ -225,7 +224,7 @@ public final class PatchDataTransactionUtil {
                                                      final YangInstanceIdentifier path,
                                                      final NormalizedNode payload,
                                                      final SchemaContextRef schemaContextRef,
-                                                     final DOMDataReadWriteTransaction rwTransaction) {
+                                                     final DOMDataTreeReadWriteTransaction rwTransaction) {
         LOG.trace("PUT {} within Restconf Patch: {} with payload {}", dataStore.name(), path, payload);
         createData(payload, schemaContextRef.get(), path, rwTransaction, dataStore, false);
     }
@@ -241,7 +240,8 @@ public final class PatchDataTransactionUtil {
      * @param errorIfExists Enable checking for existence of data (throws error if already exists)
      */
     private static void createData(final NormalizedNode payload, final SchemaContext schemaContext,
-                                   final YangInstanceIdentifier path, final DOMDataReadWriteTransaction rwTransaction,
+                                   final YangInstanceIdentifier path,
+                                   final DOMDataTreeReadWriteTransaction rwTransaction,
                                    final LogicalDatastoreType dataStore, final boolean errorIfExists) {
         if (payload instanceof MapNode) {
             final NormalizedNode emptySubtree = ImmutableNodes.fromInstanceId(schemaContext, path);
@@ -273,9 +273,9 @@ public final class PatchDataTransactionUtil {
      * @param store Datastore
      * @param path Path to be checked
      */
-    public static void checkItemExistsWithinTransaction(final DOMDataReadWriteTransaction rwTransaction,
+    public static void checkItemExistsWithinTransaction(final DOMDataTreeReadTransaction rwTransaction,
                                                 final LogicalDatastoreType store, final YangInstanceIdentifier path) {
-        final CheckedFuture future = rwTransaction.exists(store, path);
+        final FluentFuture future = rwTransaction.exists(store, path);
         final FutureDataFactory response = new FutureDataFactory<>();
 
         FutureCallbackTx.addCallback(future, PatchData.PATCH_TX_TYPE, response);
@@ -294,9 +294,9 @@ public final class PatchDataTransactionUtil {
      * @param store Datastore
      * @param path Path to be checked
      */
-    public static void checkItemDoesNotExistsWithinTransaction(final DOMDataReadWriteTransaction rwTransaction,
+    public static void checkItemDoesNotExistsWithinTransaction(final DOMDataTreeReadTransaction rwTransaction,
                                                final LogicalDatastoreType store, final YangInstanceIdentifier path) {
-        final CheckedFuture future = rwTransaction.exists(store, path);
+        final FluentFuture future = rwTransaction.exists(store, path);
         final FutureDataFactory response = new FutureDataFactory<>();
 
         FutureCallbackTx.addCallback(future, PatchData.PATCH_TX_TYPE, response);
diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PostDataTransactionUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PostDataTransactionUtil.java
index b2201bdad2..6041081dba 100644
--- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PostDataTransactionUtil.java
+++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PostDataTransactionUtil.java
@@ -7,17 +7,17 @@
  */
 package org.opendaylight.restconf.nb.rfc8040.rests.utils;
 
-import com.google.common.base.Optional;
-import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.FluentFuture;
 import java.net.URI;
+import java.util.Optional;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
 import javax.ws.rs.core.UriBuilder;
 import javax.ws.rs.core.UriInfo;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
+import org.opendaylight.mdsal.common.api.CommitInfo;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
+import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.context.NormalizedNodeContext;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
@@ -36,17 +36,12 @@ import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Util class to post data to DS.
  *
  */
 public final class PostDataTransactionUtil {
-
-    private static final Logger LOG = LoggerFactory.getLogger(PostDataTransactionUtil.class);
-
     private PostDataTransactionUtil() {
         throw new UnsupportedOperationException("Util class.");
     }
@@ -66,12 +61,12 @@ public final class PostDataTransactionUtil {
      *             point
      * @param insert
      *             insert
-     * @return {@link CheckedFuture}
+     * @return {@link Response}
      */
     public static Response postData(final UriInfo uriInfo, final NormalizedNodeContext payload,
             final TransactionVarsWrapper transactionNode, final SchemaContextRef schemaContextRef, final String insert,
             final String point) {
-        final CheckedFuture future = submitData(
+        final FluentFuture future = submitData(
                 payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData(),
                 transactionNode, schemaContextRef.get(), insert, point);
         final URI location = PostDataTransactionUtil.resolveLocation(uriInfo, transactionNode, schemaContextRef);
@@ -95,16 +90,16 @@ public final class PostDataTransactionUtil {
      *             query parameter
      * @param insert
      *             query parameter
-     * @return {@link CheckedFuture}
+     * @return {@link FluentFuture}
      */
-    private static CheckedFuture submitData(final YangInstanceIdentifier path,
+    private static FluentFuture submitData(final YangInstanceIdentifier path,
             final NormalizedNode data, final TransactionVarsWrapper transactionNode,
             final SchemaContext schemaContext, final String insert, final String point) {
         final DOMTransactionChain domTransactionChain = transactionNode.getTransactionChain();
-        final DOMDataReadWriteTransaction newReadWriteTransaction = domTransactionChain.newReadWriteTransaction();
+        final DOMDataTreeReadWriteTransaction newReadWriteTransaction = domTransactionChain.newReadWriteTransaction();
         if (insert == null) {
             makePost(path, data, schemaContext, transactionNode.getTransactionChainHandler(), newReadWriteTransaction);
-            return newReadWriteTransaction.submit();
+            return newReadWriteTransaction.commit();
         } else {
             final DataSchemaNode schemaNode = PutDataTransactionUtil.checkListAndOrderedType(schemaContext, path);
             switch (insert) {
@@ -116,7 +111,7 @@ public final class PostDataTransactionUtil {
                         if (readList == null || readList.getValue().isEmpty()) {
                             makePost(path, data, schemaContext, transactionNode.getTransactionChainHandler(),
                                     newReadWriteTransaction);
-                            return newReadWriteTransaction.submit();
+                            return newReadWriteTransaction.commit();
                         } else {
                             newReadWriteTransaction.delete(LogicalDatastoreType.CONFIGURATION,
                                     path.getParent().getParent());
@@ -124,7 +119,7 @@ public final class PostDataTransactionUtil {
                                     schemaContext, transactionNode.getTransactionChainHandler());
                             makePost(path, readData, schemaContext, transactionNode.getTransactionChainHandler(),
                                     newReadWriteTransaction);
-                            return newReadWriteTransaction.submit();
+                            return newReadWriteTransaction.commit();
                         }
                     } else {
                         final NormalizedNode readData = PutDataTransactionUtil.readList(path.getParent(),
@@ -134,7 +129,7 @@ public final class PostDataTransactionUtil {
                         if (readLeafList == null || readLeafList.getValue().isEmpty()) {
                             makePost(path, data, schemaContext, transactionNode.getTransactionChainHandler(),
                                     newReadWriteTransaction);
-                            return newReadWriteTransaction.submit();
+                            return newReadWriteTransaction.commit();
                         } else {
                             newReadWriteTransaction.delete(LogicalDatastoreType.CONFIGURATION,
                                     path.getParent().getParent());
@@ -142,13 +137,13 @@ public final class PostDataTransactionUtil {
                                     schemaContext, transactionNode.getTransactionChainHandler());
                             makePost(path, readData, schemaContext, transactionNode.getTransactionChainHandler(),
                                     newReadWriteTransaction);
-                            return newReadWriteTransaction.submit();
+                            return newReadWriteTransaction.commit();
                         }
                     }
                 case "last":
                     makePost(path, data, schemaContext, transactionNode.getTransactionChainHandler(),
                             newReadWriteTransaction);
-                    return newReadWriteTransaction.submit();
+                    return newReadWriteTransaction.commit();
                 case "before":
                     if (schemaNode instanceof ListSchemaNode) {
                         final NormalizedNode readData = PutDataTransactionUtil.readList(path.getParent(),
@@ -157,12 +152,12 @@ public final class PostDataTransactionUtil {
                         if (readList == null || readList.getValue().isEmpty()) {
                             makePost(path, data, schemaContext, transactionNode.getTransactionChainHandler(),
                                     newReadWriteTransaction);
-                            return newReadWriteTransaction.submit();
+                            return newReadWriteTransaction.commit();
                         } else {
                             insertWithPointListPost(newReadWriteTransaction, LogicalDatastoreType.CONFIGURATION, path,
                                     data, schemaContext, point, readList, true,
                                     transactionNode.getTransactionChainHandler());
-                            return newReadWriteTransaction.submit();
+                            return newReadWriteTransaction.commit();
                         }
                     } else {
                         final NormalizedNode readData = PutDataTransactionUtil.readList(path.getParent(),
@@ -172,12 +167,12 @@ public final class PostDataTransactionUtil {
                         if (readLeafList == null || readLeafList.getValue().isEmpty()) {
                             makePost(path, data, schemaContext, transactionNode.getTransactionChainHandler(),
                                     newReadWriteTransaction);
-                            return newReadWriteTransaction.submit();
+                            return newReadWriteTransaction.commit();
                         } else {
                             insertWithPointLeafListPost(newReadWriteTransaction, LogicalDatastoreType.CONFIGURATION,
                                     path, data, schemaContext, point, readLeafList, true,
                                     transactionNode.getTransactionChainHandler());
-                            return newReadWriteTransaction.submit();
+                            return newReadWriteTransaction.commit();
                         }
                     }
                 case "after":
@@ -188,12 +183,12 @@ public final class PostDataTransactionUtil {
                         if (readList == null || readList.getValue().isEmpty()) {
                             makePost(path, data, schemaContext, transactionNode.getTransactionChainHandler(),
                                     newReadWriteTransaction);
-                            return newReadWriteTransaction.submit();
+                            return newReadWriteTransaction.commit();
                         } else {
                             insertWithPointListPost(newReadWriteTransaction, LogicalDatastoreType.CONFIGURATION, path,
                                     data, schemaContext, point, readList, false,
                                     transactionNode.getTransactionChainHandler());
-                            return newReadWriteTransaction.submit();
+                            return newReadWriteTransaction.commit();
                         }
                     } else {
                         final NormalizedNode readData = PutDataTransactionUtil.readList(path.getParent(),
@@ -203,12 +198,12 @@ public final class PostDataTransactionUtil {
                         if (readLeafList == null || readLeafList.getValue().isEmpty()) {
                             makePost(path, data, schemaContext, transactionNode.getTransactionChainHandler(),
                                     newReadWriteTransaction);
-                            return newReadWriteTransaction.submit();
+                            return newReadWriteTransaction.commit();
                         } else {
                             insertWithPointLeafListPost(newReadWriteTransaction, LogicalDatastoreType.CONFIGURATION,
                                     path, data, schemaContext, point, readLeafList, true,
                                     transactionNode.getTransactionChainHandler());
-                            return newReadWriteTransaction.submit();
+                            return newReadWriteTransaction.commit();
                         }
                     }
                 default:
@@ -219,13 +214,13 @@ public final class PostDataTransactionUtil {
         }
     }
 
-    private static void insertWithPointLeafListPost(final DOMDataReadWriteTransaction rwTransaction,
+    private static void insertWithPointLeafListPost(final DOMDataTreeReadWriteTransaction rwTransaction,
             final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload,
             final SchemaContext schemaContext, final String point, final OrderedLeafSetNode readLeafList,
             final boolean before, final TransactionChainHandler transactionChainHandler) {
         rwTransaction.delete(datastore, path.getParent().getParent());
         final InstanceIdentifierContext instanceIdentifier =
-                ParserIdentifier.toInstanceIdentifier(point, schemaContext, Optional.absent());
+                ParserIdentifier.toInstanceIdentifier(point, schemaContext, Optional.empty());
         int lastItemPosition = 0;
         for (final LeafSetEntryNode nodeChild : readLeafList.getValue()) {
             if (nodeChild.getIdentifier().equals(instanceIdentifier.getInstanceIdentifier().getLastPathArgument())) {
@@ -254,13 +249,13 @@ public final class PostDataTransactionUtil {
         }
     }
 
-    private static void insertWithPointListPost(final DOMDataReadWriteTransaction rwTransaction,
+    private static void insertWithPointListPost(final DOMDataTreeReadWriteTransaction rwTransaction,
             final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload,
             final SchemaContext schemaContext, final String point, final MapNode readList, final boolean before,
             final TransactionChainHandler transactionChainHandler) {
         rwTransaction.delete(datastore, path.getParent().getParent());
         final InstanceIdentifierContext instanceIdentifier =
-                ParserIdentifier.toInstanceIdentifier(point, schemaContext, Optional.absent());
+                ParserIdentifier.toInstanceIdentifier(point, schemaContext, Optional.empty());
         int lastItemPosition = 0;
         for (final MapEntryNode mapEntryNode : readList.getValue()) {
             if (mapEntryNode.getIdentifier().equals(instanceIdentifier.getInstanceIdentifier().getLastPathArgument())) {
@@ -291,7 +286,7 @@ public final class PostDataTransactionUtil {
 
     private static void makePost(final YangInstanceIdentifier path, final NormalizedNode data,
             final SchemaContext schemaContext, final TransactionChainHandler transactionChainHandler,
-            final DOMDataReadWriteTransaction transaction) {
+            final DOMDataTreeReadWriteTransaction transaction) {
         if (data instanceof MapNode) {
             boolean merge = false;
             for (final MapEntryNode child : ((MapNode) data).getValue()) {
@@ -344,7 +339,7 @@ public final class PostDataTransactionUtil {
         return uriBuilder.build();
     }
 
-    private static void simplePost(final DOMDataReadWriteTransaction rwTransaction,
+    private static void simplePost(final DOMDataTreeReadWriteTransaction rwTransaction,
             final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode payload,
             final SchemaContext schemaContext, final TransactionChainHandler transactionChainHandler) {
         TransactionUtil.checkItemDoesNotExists(transactionChainHandler, rwTransaction, datastore, path,
diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtil.java
index 200605da4b..d8cd95f35e 100644
--- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtil.java
+++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtil.java
@@ -7,18 +7,17 @@
  */
 package org.opendaylight.restconf.nb.rfc8040.rests.utils;
 
-import com.google.common.base.Optional;
 import com.google.common.collect.Maps;
-import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.FluentFuture;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
+import org.opendaylight.mdsal.common.api.CommitInfo;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.context.NormalizedNodeContext;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
@@ -154,24 +153,24 @@ public final class PutDataTransactionUtil {
      *             query parameter
      * @param insert
      *             query parameter
-     * @return {@link CheckedFuture}
+     * @return {@link Response}
      */
     public static Response putData(final NormalizedNodeContext payload, final SchemaContextRef schemaCtxRef,
                                final TransactionVarsWrapper transactionNode, final String insert, final String point) {
         final YangInstanceIdentifier path = payload.getInstanceIdentifierContext().getInstanceIdentifier();
         final SchemaContext schemaContext = schemaCtxRef.get();
 
-        final DOMDataReadWriteTransaction readWriteTransaction =
+        final DOMDataTreeReadWriteTransaction readWriteTransaction =
                 transactionNode.getTransactionChain().newReadWriteTransaction();
 
-        final CheckedFuture existsFuture =
-                readWriteTransaction.exists(LogicalDatastoreType.CONFIGURATION, path);
+        final FluentFuture existsFuture = readWriteTransaction.exists(LogicalDatastoreType.CONFIGURATION,
+            path);
         final FutureDataFactory existsResponse = new FutureDataFactory<>();
         FutureCallbackTx.addCallback(existsFuture, RestconfDataServiceConstant.PutData.PUT_TX_TYPE, existsResponse);
 
         final ResponseFactory responseFactory =
                 new ResponseFactory(existsResponse.result ? Status.NO_CONTENT : Status.CREATED);
-        final CheckedFuture submitData = submitData(path, schemaContext,
+        final FluentFuture submitData = submitData(path, schemaContext,
                 transactionNode.getTransactionChainHandler(), readWriteTransaction, payload.getData(), insert, point);
         FutureCallbackTx.addCallback(submitData, RestconfDataServiceConstant.PutData.PUT_TX_TYPE, responseFactory);
         return responseFactory.build();
@@ -192,105 +191,104 @@ public final class PutDataTransactionUtil {
      *             query parameter
      * @param insert
      *             query parameter
-     * @return {@link CheckedFuture}
+     * @return {@link FluentFuture}
      */
-    private static CheckedFuture submitData(final YangInstanceIdentifier path,
+    private static FluentFuture submitData(final YangInstanceIdentifier path,
             final SchemaContext schemaContext, final TransactionChainHandler transactionChainHandler,
-            final DOMDataReadWriteTransaction readWriteTransaction,
+            final DOMDataTreeReadWriteTransaction readWriteTransaction,
             final NormalizedNode data, final String insert, final String point) {
         if (insert == null) {
             return makePut(path, schemaContext, readWriteTransaction, data);
-        } else {
-            final DataSchemaNode schemaNode = checkListAndOrderedType(schemaContext, path);
-            switch (insert) {
-                case "first":
-                    if (schemaNode instanceof ListSchemaNode) {
-                        final NormalizedNode readData =
-                                readList(path, schemaContext, transactionChainHandler, schemaNode);
-                        final OrderedMapNode readList = (OrderedMapNode) readData;
-                        if (readList == null || readList.getValue().isEmpty()) {
-                            return makePut(path, schemaContext, readWriteTransaction, data);
-                        } else {
-                            readWriteTransaction.delete(LogicalDatastoreType.CONFIGURATION, path.getParent());
-                            simplePut(LogicalDatastoreType.CONFIGURATION, path, readWriteTransaction,
-                                    schemaContext, data);
-                            listPut(LogicalDatastoreType.CONFIGURATION, path.getParent(), readWriteTransaction,
-                                    schemaContext, readList);
-                            return readWriteTransaction.submit();
-                        }
+        }
+
+        final DataSchemaNode schemaNode = checkListAndOrderedType(schemaContext, path);
+        switch (insert) {
+            case "first":
+                if (schemaNode instanceof ListSchemaNode) {
+                    final NormalizedNode readData =
+                            readList(path, schemaContext, transactionChainHandler, schemaNode);
+                    final OrderedMapNode readList = (OrderedMapNode) readData;
+                    if (readList == null || readList.getValue().isEmpty()) {
+                        return makePut(path, schemaContext, readWriteTransaction, data);
                     } else {
-                        final NormalizedNode readData =
-                                readList(path, schemaContext, transactionChainHandler, schemaNode);
+                        readWriteTransaction.delete(LogicalDatastoreType.CONFIGURATION, path.getParent());
+                        simplePut(LogicalDatastoreType.CONFIGURATION, path, readWriteTransaction,
+                            schemaContext, data);
+                        listPut(LogicalDatastoreType.CONFIGURATION, path.getParent(), readWriteTransaction,
+                            schemaContext, readList);
+                        return readWriteTransaction.commit();
+                    }
+                } else {
+                    final NormalizedNode readData =
+                            readList(path, schemaContext, transactionChainHandler, schemaNode);
 
-                        final OrderedLeafSetNode readLeafList = (OrderedLeafSetNode) readData;
-                        if (readLeafList == null || readLeafList.getValue().isEmpty()) {
-                            return makePut(path, schemaContext, readWriteTransaction, data);
-                        } else {
-                            readWriteTransaction.delete(LogicalDatastoreType.CONFIGURATION, path.getParent());
-                            simplePut(LogicalDatastoreType.CONFIGURATION, path, readWriteTransaction,
-                                    schemaContext, data);
-                            listPut(LogicalDatastoreType.CONFIGURATION, path.getParent(), readWriteTransaction,
-                                    schemaContext, readLeafList);
-                            return readWriteTransaction.submit();
-                        }
+                    final OrderedLeafSetNode readLeafList = (OrderedLeafSetNode) readData;
+                    if (readLeafList == null || readLeafList.getValue().isEmpty()) {
+                        return makePut(path, schemaContext, readWriteTransaction, data);
+                    } else {
+                        readWriteTransaction.delete(LogicalDatastoreType.CONFIGURATION, path.getParent());
+                        simplePut(LogicalDatastoreType.CONFIGURATION, path, readWriteTransaction,
+                            schemaContext, data);
+                        listPut(LogicalDatastoreType.CONFIGURATION, path.getParent(), readWriteTransaction,
+                            schemaContext, readLeafList);
+                        return readWriteTransaction.commit();
                     }
-                case "last":
-                    return makePut(path, schemaContext, readWriteTransaction, data);
-                case "before":
-                    if (schemaNode instanceof ListSchemaNode) {
-                        final NormalizedNode readData =
-                                readList(path, schemaContext, transactionChainHandler, schemaNode);
-                        final OrderedMapNode readList = (OrderedMapNode) readData;
-                        if (readList == null || readList.getValue().isEmpty()) {
-                            return makePut(path, schemaContext, readWriteTransaction, data);
-                        } else {
-                            insertWithPointListPut(readWriteTransaction, LogicalDatastoreType.CONFIGURATION, path,
-                                    data, schemaContext, point, readList, true);
-                            return readWriteTransaction.submit();
-                        }
+                }
+            case "last":
+                return makePut(path, schemaContext, readWriteTransaction, data);
+            case "before":
+                if (schemaNode instanceof ListSchemaNode) {
+                    final NormalizedNode readData =
+                            readList(path, schemaContext, transactionChainHandler, schemaNode);
+                    final OrderedMapNode readList = (OrderedMapNode) readData;
+                    if (readList == null || readList.getValue().isEmpty()) {
+                        return makePut(path, schemaContext, readWriteTransaction, data);
                     } else {
-                        final NormalizedNode readData =
-                                readList(path, schemaContext, transactionChainHandler, schemaNode);
+                        insertWithPointListPut(readWriteTransaction, LogicalDatastoreType.CONFIGURATION, path,
+                            data, schemaContext, point, readList, true);
+                        return readWriteTransaction.commit();
+                    }
+                } else {
+                    final NormalizedNode readData =
+                            readList(path, schemaContext, transactionChainHandler, schemaNode);
 
-                        final OrderedLeafSetNode readLeafList = (OrderedLeafSetNode) readData;
-                        if (readLeafList == null || readLeafList.getValue().isEmpty()) {
-                            return makePut(path, schemaContext, readWriteTransaction, data);
-                        } else {
-                            insertWithPointLeafListPut(readWriteTransaction, LogicalDatastoreType.CONFIGURATION,
-                                    path, data, schemaContext, point, readLeafList, true);
-                            return readWriteTransaction.submit();
-                        }
+                    final OrderedLeafSetNode readLeafList = (OrderedLeafSetNode) readData;
+                    if (readLeafList == null || readLeafList.getValue().isEmpty()) {
+                        return makePut(path, schemaContext, readWriteTransaction, data);
+                    } else {
+                        insertWithPointLeafListPut(readWriteTransaction, LogicalDatastoreType.CONFIGURATION,
+                            path, data, schemaContext, point, readLeafList, true);
+                        return readWriteTransaction.commit();
                     }
-                case "after":
-                    if (schemaNode instanceof ListSchemaNode) {
-                        final NormalizedNode readData =
-                                readList(path, schemaContext, transactionChainHandler, schemaNode);
-                        final OrderedMapNode readList = (OrderedMapNode) readData;
-                        if (readList == null || readList.getValue().isEmpty()) {
-                            return makePut(path, schemaContext, readWriteTransaction, data);
-                        } else {
-                            insertWithPointListPut(readWriteTransaction, LogicalDatastoreType.CONFIGURATION,
-                                    path, data, schemaContext, point, readList, false);
-                            return readWriteTransaction.submit();
-                        }
+                }
+            case "after":
+                if (schemaNode instanceof ListSchemaNode) {
+                    final NormalizedNode readData =
+                            readList(path, schemaContext, transactionChainHandler, schemaNode);
+                    final OrderedMapNode readList = (OrderedMapNode) readData;
+                    if (readList == null || readList.getValue().isEmpty()) {
+                        return makePut(path, schemaContext, readWriteTransaction, data);
                     } else {
-                        final NormalizedNode readData =
-                                readList(path, schemaContext, transactionChainHandler, schemaNode);
+                        insertWithPointListPut(readWriteTransaction, LogicalDatastoreType.CONFIGURATION,
+                            path, data, schemaContext, point, readList, false);
+                        return readWriteTransaction.commit();
+                    }
+                } else {
+                    final NormalizedNode readData =
+                            readList(path, schemaContext, transactionChainHandler, schemaNode);
 
-                        final OrderedLeafSetNode readLeafList = (OrderedLeafSetNode) readData;
-                        if (readLeafList == null || readLeafList.getValue().isEmpty()) {
-                            return makePut(path, schemaContext, readWriteTransaction, data);
-                        } else {
-                            insertWithPointLeafListPut(readWriteTransaction, LogicalDatastoreType.CONFIGURATION,
-                                    path, data, schemaContext, point, readLeafList, true);
-                            return readWriteTransaction.submit();
-                        }
+                    final OrderedLeafSetNode readLeafList = (OrderedLeafSetNode) readData;
+                    if (readLeafList == null || readLeafList.getValue().isEmpty()) {
+                        return makePut(path, schemaContext, readWriteTransaction, data);
+                    } else {
+                        insertWithPointLeafListPut(readWriteTransaction, LogicalDatastoreType.CONFIGURATION,
+                            path, data, schemaContext, point, readLeafList, true);
+                        return readWriteTransaction.commit();
                     }
-                default:
-                    throw new RestconfDocumentedException(
-                            "Used bad value of insert parameter. Possible values are first, last, before or after, "
-                                    + "but was: " + insert);
-            }
+                }
+            default:
+                throw new RestconfDocumentedException("Used bad value of insert parameter. Possible values are "
+                        + "first, last, before or after, but was: " + insert);
         }
     }
 
@@ -304,13 +302,13 @@ public final class PutDataTransactionUtil {
         return readData;
     }
 
-    private static void insertWithPointLeafListPut(final DOMDataReadWriteTransaction rwTransaction,
+    private static void insertWithPointLeafListPut(final DOMDataTreeReadWriteTransaction rwTransaction,
             final LogicalDatastoreType datastore, final YangInstanceIdentifier path,
             final NormalizedNode data, final SchemaContext schemaContext, final String point,
             final OrderedLeafSetNode readLeafList, final boolean before) {
         rwTransaction.delete(datastore, path.getParent());
         final InstanceIdentifierContext instanceIdentifier =
-                ParserIdentifier.toInstanceIdentifier(point, schemaContext, Optional.absent());
+                ParserIdentifier.toInstanceIdentifier(point, schemaContext, Optional.empty());
         int lastItemPosition = 0;
         for (final LeafSetEntryNode nodeChild : readLeafList.getValue()) {
             if (nodeChild.getIdentifier().equals(instanceIdentifier.getInstanceIdentifier().getLastPathArgument())) {
@@ -334,13 +332,13 @@ public final class PutDataTransactionUtil {
         }
     }
 
-    private static void insertWithPointListPut(final DOMDataReadWriteTransaction writeTx,
+    private static void insertWithPointListPut(final DOMDataTreeReadWriteTransaction writeTx,
             final LogicalDatastoreType datastore, final YangInstanceIdentifier path,
             final NormalizedNode data, final SchemaContext schemaContext, final String point,
             final OrderedMapNode readList, final boolean before) {
         writeTx.delete(datastore, path.getParent());
         final InstanceIdentifierContext instanceIdentifier =
-                ParserIdentifier.toInstanceIdentifier(point, schemaContext, Optional.absent());
+                ParserIdentifier.toInstanceIdentifier(point, schemaContext, Optional.empty());
         int lastItemPosition = 0;
         for (final MapEntryNode mapEntryNode : readList.getValue()) {
             if (mapEntryNode.getIdentifier().equals(instanceIdentifier.getInstanceIdentifier().getLastPathArgument())) {
@@ -365,7 +363,7 @@ public final class PutDataTransactionUtil {
     }
 
     private static void listPut(final LogicalDatastoreType datastore, final YangInstanceIdentifier path,
-            final DOMDataReadWriteTransaction writeTx, final SchemaContext schemaContext,
+            final DOMDataTreeWriteTransaction writeTx, final SchemaContext schemaContext,
             final OrderedLeafSetNode payload) {
         final NormalizedNode emptySubtree = ImmutableNodes.fromInstanceId(schemaContext, path);
         writeTx.merge(datastore, YangInstanceIdentifier.create(emptySubtree.getIdentifier()), emptySubtree);
@@ -377,7 +375,7 @@ public final class PutDataTransactionUtil {
     }
 
     private static void listPut(final LogicalDatastoreType datastore, final YangInstanceIdentifier path,
-            final DOMDataReadWriteTransaction writeTx, final SchemaContext schemaContext,
+            final DOMDataTreeWriteTransaction writeTx, final SchemaContext schemaContext,
             final OrderedMapNode payload) {
         final NormalizedNode emptySubtree = ImmutableNodes.fromInstanceId(schemaContext, path);
         writeTx.merge(datastore, YangInstanceIdentifier.create(emptySubtree.getIdentifier()), emptySubtree);
@@ -389,17 +387,18 @@ public final class PutDataTransactionUtil {
     }
 
     private static void simplePut(final LogicalDatastoreType configuration, final YangInstanceIdentifier path,
-            final DOMDataReadWriteTransaction writeTx, final SchemaContext schemaContext,
+            final DOMDataTreeWriteTransaction writeTx, final SchemaContext schemaContext,
             final NormalizedNode data) {
         TransactionUtil.ensureParentsByMerge(path, schemaContext, writeTx);
         writeTx.put(LogicalDatastoreType.CONFIGURATION, path, data);
     }
 
-    private static CheckedFuture makePut(final YangInstanceIdentifier path,
-            final SchemaContext schemaContext, final DOMDataWriteTransaction writeTx, final NormalizedNode data) {
+    private static FluentFuture makePut(final YangInstanceIdentifier path,
+            final SchemaContext schemaContext, final DOMDataTreeWriteTransaction writeTx,
+            final NormalizedNode data) {
         TransactionUtil.ensureParentsByMerge(path, schemaContext, writeTx);
         writeTx.put(LogicalDatastoreType.CONFIGURATION, path, data);
-        return writeTx.submit();
+        return writeTx.commit();
     }
 
     public static DataSchemaNode checkListAndOrderedType(final SchemaContext ctx, final YangInstanceIdentifier path) {
diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtil.java
index b54afbac50..a309c03552 100644
--- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtil.java
+++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtil.java
@@ -10,24 +10,23 @@ package org.opendaylight.restconf.nb.rfc8040.rests.utils;
 import static org.opendaylight.restconf.nb.rfc8040.rests.utils.RestconfStreamsConstants.STREAMS_PATH;
 import static org.opendaylight.restconf.nb.rfc8040.rests.utils.RestconfStreamsConstants.STREAM_PATH_PART;
 
-import com.google.common.base.Optional;
 import com.google.common.collect.Iterables;
 import com.google.common.primitives.Ints;
-import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.FluentFuture;
 import java.net.URI;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.ws.rs.core.UriInfo;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.context.WriterParameters;
 import org.opendaylight.restconf.common.context.WriterParameters.WriterParametersBuilder;
@@ -278,7 +277,7 @@ public final class ReadDataTransactionUtil {
                                                 final SchemaContextRef schemaContextRef, final UriInfo uriInfo) {
         final SchemaContext schemaContext = schemaContextRef.get();
         if (identifier.contains(STREAMS_PATH) && !identifier.contains(STREAM_PATH_PART)) {
-            final DOMDataReadWriteTransaction wTx = transactionNode.getTransactionChain().newReadWriteTransaction();
+            final DOMDataTreeReadWriteTransaction wTx = transactionNode.getTransactionChain().newReadWriteTransaction();
             final boolean exist = SubscribeToStreamUtil.checkExist(schemaContext, wTx);
 
             for (final NotificationDefinition notificationDefinition : schemaContextRef.get().getNotifications()) {
@@ -441,8 +440,8 @@ public final class ReadDataTransactionUtil {
     private static NormalizedNode readDataViaTransaction(
             @Nonnull final TransactionVarsWrapper transactionNode) {
         final NormalizedNodeFactory dataFactory = new NormalizedNodeFactory();
-        try (DOMDataReadOnlyTransaction tx = transactionNode.getTransactionChain().newReadOnlyTransaction()) {
-            final CheckedFuture>, ReadFailedException> listenableFuture = tx.read(
+        try (DOMDataTreeReadTransaction tx = transactionNode.getTransactionChain().newReadOnlyTransaction()) {
+            final FluentFuture>> listenableFuture = tx.read(
                 transactionNode.getLogicalDatastoreType(),
                 transactionNode.getInstanceIdentifier().getInstanceIdentifier());
             FutureCallbackTx.addCallback(listenableFuture, RestconfDataServiceConstant.ReadData.READ_TYPE_TX,
diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ResponseFactory.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ResponseFactory.java
index 713c39002c..b8c60f571e 100644
--- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ResponseFactory.java
+++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ResponseFactory.java
@@ -11,9 +11,10 @@ import java.net.URI;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.ResponseBuilder;
 import javax.ws.rs.core.Response.Status;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.yangtools.concepts.Builder;
 
-final class ResponseFactory extends FutureDataFactory implements Builder {
+final class ResponseFactory extends FutureDataFactory implements Builder {
 
     private ResponseBuilder responseBuilder;
 
diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfInvokeOperationsUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfInvokeOperationsUtil.java
index 1f023c4ca7..918a415d61 100644
--- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfInvokeOperationsUtil.java
+++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfInvokeOperationsUtil.java
@@ -7,14 +7,13 @@
  */
 package org.opendaylight.restconf.nb.rfc8040.rests.utils;
 
-import com.google.common.base.Optional;
-import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.FluentFuture;
+import java.util.Optional;
 import java.util.concurrent.CancellationException;
 import javax.ws.rs.core.Response.Status;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint;
-import org.opendaylight.controller.md.sal.dom.api.DOMRpcException;
-import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult;
-import org.opendaylight.controller.md.sal.dom.api.DOMRpcService;
+import org.opendaylight.mdsal.dom.api.DOMMountPoint;
+import org.opendaylight.mdsal.dom.api.DOMRpcResult;
+import org.opendaylight.mdsal.dom.api.DOMRpcService;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.common.errors.RestconfError.ErrorTag;
 import org.opendaylight.restconf.common.errors.RestconfError.ErrorType;
@@ -45,14 +44,13 @@ public final class RestconfInvokeOperationsUtil {
      *             input data
      * @param schemaPath
      *             schema path of data
-     * @return {@link CheckedFuture}
+     * @return {@link DOMRpcResult}
      */
     public static DOMRpcResult invokeRpcViaMountPoint(final DOMMountPoint mountPoint, final NormalizedNode data,
             final SchemaPath schemaPath) {
         final Optional mountPointService = mountPoint.getService(DOMRpcService.class);
         if (mountPointService.isPresent()) {
-            final CheckedFuture rpc = mountPointService.get().invokeRpc(schemaPath,
-                    data);
+            final FluentFuture rpc = mountPointService.get().invokeRpc(schemaPath, data);
             return prepareResult(rpc);
         }
         final String errmsg = "RPC service is missing.";
@@ -69,7 +67,7 @@ public final class RestconfInvokeOperationsUtil {
      *             schema path of data
      * @param rpcServiceHandler
      *             rpc service handler to invoke rpc
-     * @return {@link CheckedFuture}
+     * @return {@link DOMRpcResult}
      */
     public static DOMRpcResult invokeRpc(final NormalizedNode data, final SchemaPath schemaPath,
             final RpcServiceHandler rpcServiceHandler) {
@@ -78,7 +76,7 @@ public final class RestconfInvokeOperationsUtil {
             throw new RestconfDocumentedException(Status.SERVICE_UNAVAILABLE);
         }
 
-        final CheckedFuture rpc = rpcService.invokeRpc(schemaPath, data);
+        final FluentFuture rpc = rpcService.invokeRpc(schemaPath, data);
         return prepareResult(rpc);
     }
 
@@ -106,7 +104,7 @@ public final class RestconfInvokeOperationsUtil {
         }
     }
 
-    private static DOMRpcResult prepareResult(final CheckedFuture rpc) {
+    private static DOMRpcResult prepareResult(final FluentFuture rpc) {
         final RpcResultFactory dataFactory = new RpcResultFactory();
         FutureCallbackTx.addCallback(rpc, RestconfDataServiceConstant.PostData.POST_TX_TYPE, dataFactory);
         return dataFactory.build();
diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfStreamsConstants.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfStreamsConstants.java
index 6fffcb0f8c..94aab8f84f 100644
--- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfStreamsConstants.java
+++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfStreamsConstants.java
@@ -9,7 +9,7 @@ package org.opendaylight.restconf.nb.rfc8040.rests.utils;
 
 import com.google.common.collect.ImmutableSet;
 import java.net.URI;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.restconf.common.util.DataChangeScope;
 import org.opendaylight.restconf.nb.rfc8040.utils.RestconfConstants;
 import org.opendaylight.restconf.nb.rfc8040.utils.parser.builder.ParserBuilderConstants;
diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RpcResultFactory.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RpcResultFactory.java
index 5dc0b5a873..c5a6f4868f 100644
--- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RpcResultFactory.java
+++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RpcResultFactory.java
@@ -7,7 +7,7 @@
  */
 package org.opendaylight.restconf.nb.rfc8040.rests.utils;
 
-import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult;
+import org.opendaylight.mdsal.dom.api.DOMRpcResult;
 import org.opendaylight.yangtools.concepts.Builder;
 
 public class RpcResultFactory extends FutureDataFactory implements Builder {
diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/SubscribeToStreamUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/SubscribeToStreamUtil.java
index c7ed256350..527e27deef 100644
--- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/SubscribeToStreamUtil.java
+++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/SubscribeToStreamUtil.java
@@ -21,16 +21,16 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.concurrent.ExecutionException;
 import javax.ws.rs.core.UriBuilder;
 import javax.ws.rs.core.UriInfo;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeService;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeIdentifier;
-import org.opendaylight.controller.md.sal.dom.api.DOMNotificationListener;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+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.DOMDataTreeReadWriteTransaction;
+import org.opendaylight.mdsal.dom.api.DOMNotificationListener;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.common.errors.RestconfError.ErrorTag;
@@ -67,7 +67,6 @@ import org.slf4j.LoggerFactory;
 
 /**
  * Subscribe to stream util class.
- *
  */
 public final class SubscribeToStreamUtil {
 
@@ -119,7 +118,7 @@ public final class SubscribeToStreamUtil {
                     ErrorTag.UNKNOWN_ELEMENT);
         }
 
-        final DOMDataReadWriteTransaction wTx =
+        final DOMDataTreeReadWriteTransaction wTx =
                 handlersHolder.getTransactionChainHandler().get().newReadWriteTransaction();
         final SchemaContext schemaContext = handlersHolder.getSchemaHandler().get();
         final boolean exist = checkExist(schemaContext, wTx);
@@ -223,7 +222,7 @@ public final class SubscribeToStreamUtil {
 
         final URI uri = prepareUriByStreamName(uriInfo, streamName);
 
-        final DOMDataReadWriteTransaction wTx =
+        final DOMDataTreeReadWriteTransaction wTx =
                 handlersHolder.getTransactionChainHandler().get().newReadWriteTransaction();
         final SchemaContext schemaContext = handlersHolder.getSchemaHandler().get();
         final boolean exist = checkExist(schemaContext, wTx);
@@ -266,7 +265,7 @@ public final class SubscribeToStreamUtil {
 
     @SuppressWarnings("rawtypes")
     static void writeDataToDS(final SchemaContext schemaContext,
-                              final String name, final DOMDataReadWriteTransaction readWriteTransaction,
+                              final String name, final DOMDataTreeReadWriteTransaction readWriteTransaction,
                               final boolean exist, final NormalizedNode mapToStreams) {
         String pathId = "";
         if (exist) {
@@ -278,10 +277,10 @@ public final class SubscribeToStreamUtil {
                 mapToStreams);
     }
 
-    static void submitData(final DOMDataReadWriteTransaction readWriteTransaction) {
+    static void submitData(final DOMDataTreeReadWriteTransaction readWriteTransaction) {
         try {
-            readWriteTransaction.submit().checkedGet();
-        } catch (final TransactionCommitFailedException e) {
+            readWriteTransaction.commit().get();
+        } catch (final InterruptedException | ExecutionException e) {
             throw new RestconfDocumentedException("Problem while putting data to DS.", e);
         }
     }
@@ -331,8 +330,8 @@ public final class SubscribeToStreamUtil {
             return;
         }
 
-        final DOMDataTreeChangeService changeService = (DOMDataTreeChangeService)domDataBroker.getSupportedExtensions()
-                .get(DOMDataTreeChangeService.class);
+        final DOMDataTreeChangeService changeService = domDataBroker.getExtensions()
+                .getInstance(DOMDataTreeChangeService.class);
         if (changeService == null) {
             throw new UnsupportedOperationException("DOMDataBroker does not support the DOMDataTreeChangeService");
         }
@@ -359,13 +358,13 @@ public final class SubscribeToStreamUtil {
     }
 
     static boolean checkExist(final SchemaContext schemaContext,
-                              final DOMDataReadWriteTransaction readWriteTransaction) {
+                              final DOMDataTreeReadTransaction readWriteTransaction) {
         boolean exist;
         try {
             exist = readWriteTransaction.exists(LogicalDatastoreType.OPERATIONAL,
-                    IdentifierCodec.deserialize(MonitoringModule.PATH_TO_STREAMS, schemaContext)).checkedGet();
-        } catch (final ReadFailedException e1) {
-            throw new RestconfDocumentedException("Problem while checking data if exists", e1);
+                    IdentifierCodec.deserialize(MonitoringModule.PATH_TO_STREAMS, schemaContext)).get();
+        } catch (final InterruptedException | ExecutionException e) {
+            throw new RestconfDocumentedException("Problem while checking data if exists", e);
         }
         return exist;
     }
diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/TransactionUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/TransactionUtil.java
index 50d61dec77..3cfddd6935 100644
--- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/TransactionUtil.java
+++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/TransactionUtil.java
@@ -5,18 +5,16 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.restconf.nb.rfc8040.rests.utils;
 
 import com.google.common.base.Preconditions;
-import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.FluentFuture;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.common.errors.RestconfError.ErrorTag;
 import org.opendaylight.restconf.common.errors.RestconfError.ErrorType;
@@ -52,7 +50,7 @@ public final class TransactionUtil {
      *             write transaction
      */
     public static void ensureParentsByMerge(final YangInstanceIdentifier path, final SchemaContext schemaContext,
-            final DOMDataWriteTransaction writeTx) {
+            final DOMDataTreeWriteTransaction writeTx) {
         final List normalizedPathWithoutChildArgs = new ArrayList<>();
         YangInstanceIdentifier rootNormalizedPath = null;
 
@@ -90,10 +88,10 @@ public final class TransactionUtil {
      * @param operationType Type of operation (READ, POST, PUT, DELETE...)
      */
     public static void checkItemExists(final TransactionChainHandler transactionChainHandler,
-                                       final DOMDataReadWriteTransaction rwTransaction,
+                                       final DOMDataTreeReadWriteTransaction rwTransaction,
                                        final LogicalDatastoreType store, final YangInstanceIdentifier path,
                                        final String operationType) {
-        final CheckedFuture future = rwTransaction.exists(store, path);
+        final FluentFuture future = rwTransaction.exists(store, path);
         final FutureDataFactory response = new FutureDataFactory<>();
 
         FutureCallbackTx.addCallback(future, operationType, response);
@@ -120,10 +118,10 @@ public final class TransactionUtil {
      * @param operationType Type of operation (READ, POST, PUT, DELETE...)
      */
     public static void checkItemDoesNotExists(final TransactionChainHandler transactionChainHandler,
-                                              final DOMDataReadWriteTransaction rwTransaction,
+                                              final DOMDataTreeReadWriteTransaction rwTransaction,
                                               final LogicalDatastoreType store, final YangInstanceIdentifier path,
                                               final String operationType) {
-        final CheckedFuture future = rwTransaction.exists(store, path);
+        final FluentFuture future = rwTransaction.exists(store, path);
         final FutureDataFactory response = new FutureDataFactory<>();
 
         FutureCallbackTx.addCallback(future, operationType, response);
diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/services/simple/impl/RestconfOperationsServiceImpl.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/services/simple/impl/RestconfOperationsServiceImpl.java
index f25fc62f30..ac06d24fae 100644
--- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/services/simple/impl/RestconfOperationsServiceImpl.java
+++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/services/simple/impl/RestconfOperationsServiceImpl.java
@@ -7,14 +7,14 @@
  */
 package org.opendaylight.restconf.nb.rfc8040.services.simple.impl;
 
-import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableSet;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Optional;
 import java.util.Set;
 import javax.ws.rs.Path;
 import javax.ws.rs.core.UriInfo;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint;
+import org.opendaylight.mdsal.dom.api.DOMMountPoint;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.context.NormalizedNodeContext;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/AbstractNotificationsData.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/AbstractNotificationsData.java
index 598d4b15cf..da575164f9 100644
--- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/AbstractNotificationsData.java
+++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/AbstractNotificationsData.java
@@ -24,8 +24,8 @@ import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMResult;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.restconf.nb.rfc8040.Rfc8040.MonitoringModule;
 import org.opendaylight.restconf.nb.rfc8040.handlers.SchemaContextHandler;
 import org.opendaylight.restconf.nb.rfc8040.handlers.TransactionChainHandler;
@@ -77,10 +77,10 @@ abstract class AbstractNotificationsData {
      * Delete data in DS.
      */
     protected void deleteDataInDS() throws Exception {
-        final DOMDataWriteTransaction wTx = this.transactionChainHandler.get().newWriteOnlyTransaction();
+        final DOMDataTreeWriteTransaction wTx = this.transactionChainHandler.get().newWriteOnlyTransaction();
         wTx.delete(LogicalDatastoreType.OPERATIONAL, IdentifierCodec
                 .deserialize(MonitoringModule.PATH_TO_STREAM_WITHOUT_KEY + this.localName, this.schemaHandler.get()));
-        wTx.submit().checkedGet();
+        wTx.commit().get();
     }
 
     /**
diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/ListenerAdapter.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/ListenerAdapter.java
index 0296e469d5..69744bac1d 100644
--- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/ListenerAdapter.java
+++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/ListenerAdapter.java
@@ -16,7 +16,7 @@ import java.util.Optional;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.transform.dom.DOMResult;
 import org.json.XML;
-import org.opendaylight.controller.md.sal.dom.api.ClusteredDOMDataTreeChangeListener;
+import org.opendaylight.mdsal.dom.api.ClusteredDOMDataTreeChangeListener;
 import org.opendaylight.yang.gen.v1.urn.sal.restconf.event.subscription.rev140708.NotificationOutputTypeGrouping.NotificationOutputType;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
@@ -255,7 +255,7 @@ public class ListenerAdapter extends AbstractCommonSubscriber implements Cluster
     }
 
     private Node createCreatedChangedDataChangeEventElement(final Document doc,
-            final YangInstanceIdentifier eventPath, NormalizedNode normalized, final Operation operation,
+            final YangInstanceIdentifier eventPath, final NormalizedNode normalized, final Operation operation,
             final SchemaContext schemaContext, final DataSchemaContextTree dataSchemaContextTree) {
         final Element dataChangeEventElement = doc.createElement("data-change-event");
         final Element pathElement = doc.createElement("path");
diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/NotificationListenerAdapter.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/NotificationListenerAdapter.java
index f4218481ad..947c454b36 100644
--- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/NotificationListenerAdapter.java
+++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/NotificationListenerAdapter.java
@@ -18,8 +18,8 @@ import java.time.Instant;
 import java.util.Collection;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.transform.dom.DOMResult;
-import org.opendaylight.controller.md.sal.dom.api.DOMNotification;
-import org.opendaylight.controller.md.sal.dom.api.DOMNotificationListener;
+import org.opendaylight.mdsal.dom.api.DOMNotification;
+import org.opendaylight.mdsal.dom.api.DOMNotificationListener;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/mapping/RestconfMappingNodeUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/mapping/RestconfMappingNodeUtil.java
index b0eb474b0a..a37f65850c 100644
--- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/mapping/RestconfMappingNodeUtil.java
+++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/mapping/RestconfMappingNodeUtil.java
@@ -7,13 +7,13 @@
  */
 package org.opendaylight.restconf.nb.rfc8040.utils.mapping;
 
-import com.google.common.base.Optional;
 import java.net.URI;
 import java.time.Instant;
 import java.time.OffsetDateTime;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.Collection;
+import java.util.Optional;
 import java.util.Set;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.nb.rfc8040.Rfc8040.IetfYangLibrary;
@@ -581,7 +581,7 @@ public final class RestconfMappingNodeUtil {
             final Module monitoringModule, final boolean existParent, final SchemaContext schemaContext) {
         final SchemaNode schemaNode = ParserIdentifier
                 .toInstanceIdentifier(ParserIdentifier.stringFromYangInstanceIdentifier(path, schemaContext),
-                        schemaContext, Optional.absent())
+                        schemaContext, Optional.empty())
                 .getSchemaNode();
         final DataSchemaNode streamListSchema = ((ContainerSchemaNode) ((ContainerSchemaNode) monitoringModule
                 .getDataChildByName(MonitoringModule.CONT_RESTCONF_STATE_QNAME))
diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/ParserIdentifier.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/ParserIdentifier.java
index ee26e83723..cadc7854fb 100644
--- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/ParserIdentifier.java
+++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/ParserIdentifier.java
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.restconf.nb.rfc8040.utils.parser;
 
-import com.google.common.base.Optional;
 import com.google.common.base.Splitter;
 import com.google.common.collect.Iterables;
 import java.time.format.DateTimeParseException;
@@ -16,8 +15,9 @@ import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map.Entry;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
+import java.util.Optional;
+import org.opendaylight.mdsal.dom.api.DOMMountPoint;
+import org.opendaylight.mdsal.dom.api.DOMMountPointService;
 import org.opendaylight.mdsal.dom.api.DOMYangTextSourceProvider;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
diff --git a/restconf/restconf-nb-rfc8040/src/main/resources/org/opendaylight/blueprint/restconf-bp.xml b/restconf/restconf-nb-rfc8040/src/main/resources/org/opendaylight/blueprint/restconf-bp.xml
index 0a3a31e739..758a0ed8e2 100644
--- a/restconf/restconf-nb-rfc8040/src/main/resources/org/opendaylight/blueprint/restconf-bp.xml
+++ b/restconf/restconf-nb-rfc8040/src/main/resources/org/opendaylight/blueprint/restconf-bp.xml
@@ -26,10 +26,10 @@
     
   
 
-  
-  
-  
-  
+  
+  
+  
   
 
diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/TestRestconfUtils.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/TestRestconfUtils.java
index 86a36649bb..4249b206c8 100644
--- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/TestRestconfUtils.java
+++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/TestRestconfUtils.java
@@ -5,10 +5,8 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.restconf.nb.rfc8040;
 
-import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -18,6 +16,7 @@ import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.Optional;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.transform.dom.DOMSource;
@@ -75,7 +74,7 @@ public final class TestRestconfUtils {
     public static NormalizedNodeContext loadNormalizedContextFromXmlFile(final String pathToInputFile,
             final String uri, final SchemaContext schemaContext) {
         final InstanceIdentifierContext iiContext =
-                ParserIdentifier.toInstanceIdentifier(uri, schemaContext, Optional.absent());
+                ParserIdentifier.toInstanceIdentifier(uri, schemaContext, Optional.empty());
         final InputStream inputStream = TestRestconfUtils.class.getResourceAsStream(pathToInputFile);
         try {
             final Document doc = UntrustedXML.newDocumentBuilder().parse(inputStream);
diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/TestUtils.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/TestUtils.java
index 0bb4cd28b3..b9a5a4c867 100644
--- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/TestUtils.java
+++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/TestUtils.java
@@ -13,7 +13,6 @@ import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 
 import com.google.common.base.Preconditions;
-import com.google.common.util.concurrent.Futures;
 import java.io.BufferedReader;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
@@ -40,10 +39,11 @@ import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 import org.mockito.Mockito;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
+import org.opendaylight.mdsal.common.api.CommitInfo;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
+import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
 import org.opendaylight.restconf.nb.rfc8040.handlers.SchemaContextHandler;
 import org.opendaylight.restconf.nb.rfc8040.handlers.TransactionChainHandler;
 import org.opendaylight.yangtools.util.xml.UntrustedXML;
@@ -275,11 +275,11 @@ public final class TestUtils {
         return mapEntryNode.build();
     }
 
-    public static SchemaContextHandler newSchemaContextHandler(SchemaContext schemaContext) {
+    public static SchemaContextHandler newSchemaContextHandler(final SchemaContext schemaContext) {
         DOMDataBroker mockDataBroker = mock(DOMDataBroker.class);
         DOMTransactionChain mockChain = mock(DOMTransactionChain.class);
-        DOMDataWriteTransaction mockTx = mock(DOMDataWriteTransaction.class);
-        doReturn(Futures.immediateCheckedFuture(null)).when(mockTx).submit();
+        DOMDataTreeWriteTransaction mockTx = mock(DOMDataTreeWriteTransaction.class);
+        doReturn(CommitInfo.emptyFluentFuture()).when(mockTx).commit();
         doReturn(mockTx).when(mockChain).newWriteOnlyTransaction();
 
         doReturn(mockChain).when(mockDataBroker).createTransactionChain(any());
diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/handlers/SchemaContextHandlerTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/handlers/SchemaContextHandlerTest.java
index 8ea9b45275..2f3e738e62 100644
--- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/handlers/SchemaContextHandlerTest.java
+++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/handlers/SchemaContextHandlerTest.java
@@ -11,14 +11,13 @@ package org.opendaylight.restconf.nb.rfc8040.handlers;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
 
-import com.google.common.util.concurrent.CheckedFuture;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
+import org.opendaylight.mdsal.common.api.CommitInfo;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
+import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
 import org.opendaylight.restconf.nb.rfc8040.TestRestconfUtils;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
@@ -41,12 +40,9 @@ public class SchemaContextHandlerTest {
         final TransactionChainHandler txHandler = Mockito.mock(TransactionChainHandler.class);
         final DOMTransactionChain domTx = Mockito.mock(DOMTransactionChain.class);
         Mockito.when(txHandler.get()).thenReturn(domTx);
-        final DOMDataWriteTransaction wTx = Mockito.mock(DOMDataWriteTransaction.class);
+        final DOMDataTreeWriteTransaction wTx = Mockito.mock(DOMDataTreeWriteTransaction.class);
         Mockito.when(domTx.newWriteOnlyTransaction()).thenReturn(wTx);
-        final CheckedFuture checked = Mockito.mock(CheckedFuture.class);
-        Mockito.when(wTx.submit()).thenReturn(checked);
-        Mockito.when(checked.checkedGet()).thenReturn(null);
-
+        Mockito.doReturn(CommitInfo.emptyFluentFuture()).when(wTx).commit();
 
         this.schemaContextHandler = SchemaContextHandler.newInstance(txHandler, mockDOMSchemaService);
 
diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlBodyReaderMountPointTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlBodyReaderMountPointTest.java
index 578bcd7e8c..c6d1d13324 100644
--- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlBodyReaderMountPointTest.java
+++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/XmlBodyReaderMountPointTest.java
@@ -5,7 +5,6 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.restconf.nb.rfc8040.jersey.providers;
 
 import static org.junit.Assert.assertEquals;
@@ -20,7 +19,7 @@ import javax.ws.rs.core.MediaType;
 import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint;
+import org.opendaylight.mdsal.dom.api.DOMMountPoint;
 import org.opendaylight.restconf.common.context.NormalizedNodeContext;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.common.errors.RestconfError;
diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/AbstractBodyReaderTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/AbstractBodyReaderTest.java
index 17138a9ea6..30eba6a651 100644
--- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/AbstractBodyReaderTest.java
+++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/test/AbstractBodyReaderTest.java
@@ -5,7 +5,6 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.restconf.nb.rfc8040.jersey.providers.test;
 
 import static org.junit.Assert.assertNotNull;
@@ -14,15 +13,15 @@ import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-import com.google.common.base.Optional;
 import java.util.Collections;
+import java.util.Optional;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.MultivaluedHashMap;
 import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.Request;
 import javax.ws.rs.core.UriInfo;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
+import org.opendaylight.mdsal.dom.api.DOMMountPoint;
+import org.opendaylight.mdsal.dom.api.DOMMountPointService;
 import org.opendaylight.restconf.common.context.NormalizedNodeContext;
 import org.opendaylight.restconf.common.patch.PatchContext;
 import org.opendaylight.restconf.nb.rfc8040.TestRestconfUtils;
@@ -40,7 +39,8 @@ public abstract class AbstractBodyReaderTest {
     protected final SchemaContextHandler schemaContextHandler;
     protected final DOMMountPointServiceHandler mountPointServiceHandler;
 
-    protected AbstractBodyReaderTest(SchemaContext schemaContext) throws NoSuchFieldException, IllegalAccessException {
+    protected AbstractBodyReaderTest(final SchemaContext schemaContext) throws NoSuchFieldException,
+            IllegalAccessException {
         mediaType = getMediaType();
 
         schemaContextHandler = TestUtils.newSchemaContextHandler(schemaContext);
diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/JSONRestconfServiceRfc8040ImplTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/JSONRestconfServiceRfc8040ImplTest.java
index 0fe0e08f84..78c1999f1b 100644
--- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/JSONRestconfServiceRfc8040ImplTest.java
+++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/JSONRestconfServiceRfc8040ImplTest.java
@@ -10,8 +10,10 @@ package org.opendaylight.restconf.nb.rfc8040.rests.services.impl;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.ArgumentMatchers.isNull;
@@ -20,38 +22,42 @@ import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
+import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFailedFluentFuture;
+import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFalseFluentFuture;
+import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFluentFuture;
+import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateTrueFluentFuture;
 
-import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableClassToInstanceMap;
 import com.google.common.io.Resources;
-import com.google.common.util.concurrent.Futures;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
-import org.opendaylight.controller.md.sal.dom.api.DOMNotificationService;
-import org.opendaylight.controller.md.sal.dom.api.DOMRpcException;
-import org.opendaylight.controller.md.sal.dom.api.DOMRpcImplementationNotAvailableException;
-import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult;
-import org.opendaylight.controller.md.sal.dom.api.DOMRpcService;
-import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
-import org.opendaylight.controller.md.sal.dom.spi.DefaultDOMRpcResult;
+import org.opendaylight.mdsal.common.api.CommitInfo;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker;
+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.DOMMountPoint;
+import org.opendaylight.mdsal.dom.api.DOMMountPointService;
+import org.opendaylight.mdsal.dom.api.DOMNotificationService;
+import org.opendaylight.mdsal.dom.api.DOMRpcException;
+import org.opendaylight.mdsal.dom.api.DOMRpcImplementationNotAvailableException;
+import org.opendaylight.mdsal.dom.api.DOMRpcResult;
+import org.opendaylight.mdsal.dom.api.DOMRpcService;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
+import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
+import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult;
 import org.opendaylight.restconf.nb.rfc8040.TestUtils;
 import org.opendaylight.restconf.nb.rfc8040.handlers.DOMDataBrokerHandler;
 import org.opendaylight.restconf.nb.rfc8040.handlers.DOMMountPointServiceHandler;
@@ -117,13 +123,13 @@ public class JSONRestconfServiceRfc8040ImplTest {
     private DOMTransactionChain mockTxChain;
 
     @Mock
-    private DOMDataReadWriteTransaction mockReadWriteTx;
+    private DOMDataTreeReadWriteTransaction mockReadWriteTx;
 
     @Mock
-    private DOMDataReadOnlyTransaction mockReadOnlyTx;
+    private DOMDataTreeReadTransaction mockReadOnlyTx;
 
     @Mock
-    private DOMDataWriteTransaction mockWriteTx;
+    private DOMDataTreeWriteTransaction mockWriteTx;
 
     @Mock
     private DOMMountPointService mockMountPointService;
@@ -153,7 +159,7 @@ public class JSONRestconfServiceRfc8040ImplTest {
 
         doReturn(ImmutableClassToInstanceMap.of()).when(domSchemaService).getExtensions();
 
-        doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadOnlyTx).read(
+        doReturn(immediateFluentFuture(Optional.empty())).when(mockReadOnlyTx).read(
                 eq(LogicalDatastoreType.CONFIGURATION), any(YangInstanceIdentifier.class));
 
         doNothing().when(mockWriteTx).put(eq(LogicalDatastoreType.CONFIGURATION), any(YangInstanceIdentifier.class),
@@ -161,14 +167,14 @@ public class JSONRestconfServiceRfc8040ImplTest {
         doNothing().when(mockWriteTx).merge(eq(LogicalDatastoreType.CONFIGURATION), any(YangInstanceIdentifier.class),
                 any(NormalizedNode.class));
         doNothing().when(mockWriteTx).delete(eq(LogicalDatastoreType.CONFIGURATION), any(YangInstanceIdentifier.class));
-        doReturn(Futures.immediateCheckedFuture(null)).when(mockWriteTx).submit();
+        doReturn(CommitInfo.emptyFluentFuture()).when(mockWriteTx).commit();
 
         doNothing().when(mockReadWriteTx).put(eq(LogicalDatastoreType.CONFIGURATION), any(YangInstanceIdentifier.class),
                 any(NormalizedNode.class));
-        doReturn(Futures.immediateCheckedFuture(null)).when(mockReadWriteTx).submit();
-        doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadWriteTx).read(
+        doReturn(CommitInfo.emptyFluentFuture()).when(mockReadWriteTx).commit();
+        doReturn(immediateFluentFuture(Optional.empty())).when(mockReadWriteTx).read(
                 eq(LogicalDatastoreType.CONFIGURATION), any(YangInstanceIdentifier.class));
-        doReturn(Futures.immediateCheckedFuture(Boolean.FALSE)).when(mockReadWriteTx).exists(
+        doReturn(immediateFalseFluentFuture()).when(mockReadWriteTx).exists(
                 eq(LogicalDatastoreType.CONFIGURATION), any(YangInstanceIdentifier.class));
 
         doReturn(mockReadOnlyTx).when(mockTxChain).newReadOnlyTransaction();
@@ -254,8 +260,8 @@ public class JSONRestconfServiceRfc8040ImplTest {
     @Test(expected = OperationFailedException.class)
     @SuppressWarnings("checkstyle:IllegalThrows")
     public void testPutFailure() throws Throwable {
-        doReturn(Futures.immediateFailedCheckedFuture(new TransactionCommitFailedException("mock")))
-                .when(mockReadWriteTx).submit();
+        doReturn(immediateFailedFluentFuture(new TransactionCommitFailedException("mock")))
+                .when(mockReadWriteTx).commit();
 
         final String uriPath = "ietf-interfaces:interfaces/interface=eth0";
         final String payload = loadData("/parts/ietf-interfaces_interfaces.json");
@@ -327,20 +333,19 @@ public class JSONRestconfServiceRfc8040ImplTest {
         verifyLeafNode(actualNode, TEST_LF12_QNAME, "lf12 data");
     }
 
-    @Test(expected = TransactionCommitFailedException.class)
-    @SuppressWarnings({ "checkstyle:IllegalThrows", "checkstyle:avoidHidingCauseException" })
-    public void testPostFailure() throws Throwable {
-        doReturn(Futures.immediateFailedCheckedFuture(new TransactionCommitFailedException("mock")))
-                .when(mockReadWriteTx).submit();
+    @Test
+    public void testPostFailure() throws IOException {
+        final Exception failure = new TransactionCommitFailedException("mock");
+        doReturn(immediateFailedFluentFuture(failure)).when(mockReadWriteTx).commit();
 
-        final String uriPath = null;
         final String payload = loadData("/parts/ietf-interfaces_interfaces_absolute_path.json");
-
         try {
-            this.service.post(uriPath, payload);
+            this.service.post(null, payload);
+            fail();
         } catch (final OperationFailedException e) {
-            assertNotNull(e.getCause());
-            throw e.getCause();
+            final Throwable cause = e.getCause();
+            assertNotNull(cause);
+            assertSame(failure, cause.getCause());
         }
     }
 
@@ -403,8 +408,8 @@ public class JSONRestconfServiceRfc8040ImplTest {
     @Test
     @SuppressWarnings("checkstyle:IllegalThrows")
     public void testPatchFailure() throws Throwable {
-        doReturn(Futures.immediateFailedCheckedFuture(new TransactionCommitFailedException("mock")))
-                .when(mockReadWriteTx).submit();
+        doReturn(immediateFailedFluentFuture(new TransactionCommitFailedException("mock")))
+                .when(mockReadWriteTx).commit();
 
         final String uriPath = "ietf-interfaces:interfaces/interface=eth0";
 
@@ -418,7 +423,7 @@ public class JSONRestconfServiceRfc8040ImplTest {
 
     @Test
     public void testDelete() throws Exception {
-        doReturn(Futures.immediateCheckedFuture(Boolean.TRUE)).when(mockReadWriteTx).exists(
+        doReturn(immediateTrueFluentFuture()).when(mockReadWriteTx).exists(
                 eq(LogicalDatastoreType.CONFIGURATION), any(YangInstanceIdentifier.class));
 
         final String uriPath = "ietf-interfaces:interfaces/interface=eth0";
@@ -469,8 +474,7 @@ public class JSONRestconfServiceRfc8040ImplTest {
         final SchemaPath path = SchemaPath.create(true, MAKE_TOAST_QNAME);
 
         final DOMRpcResult expResult = new DefaultDOMRpcResult((NormalizedNode)null);
-        doReturn(Futures.immediateCheckedFuture(expResult)).when(mockRpcService).invokeRpc(eq(path),
-                any(NormalizedNode.class));
+        doReturn(immediateFluentFuture(expResult)).when(mockRpcService).invokeRpc(eq(path), any(NormalizedNode.class));
 
         final String uriPath = "toaster:make-toast";
         final String input = loadData("/full-versions/make-toast-rpc-input.json");
@@ -494,11 +498,11 @@ public class JSONRestconfServiceRfc8040ImplTest {
         final SchemaPath path = SchemaPath.create(true, CANCEL_TOAST_QNAME);
 
         final DOMRpcResult expResult = new DefaultDOMRpcResult((NormalizedNode)null);
-        doReturn(Futures.immediateCheckedFuture(expResult)).when(mockRpcService).invokeRpc(eq(path), isNull());
+        doReturn(immediateFluentFuture(expResult)).when(mockRpcService).invokeRpc(eq(path), isNull());
 
         final String uriPath = "toaster:cancel-toast";
 
-        final Optional output = this.service.invokeRpc(uriPath, Optional.absent());
+        final Optional output = this.service.invokeRpc(uriPath, Optional.empty());
 
         assertEquals("Output present", false, output.isPresent());
 
@@ -513,11 +517,11 @@ public class JSONRestconfServiceRfc8040ImplTest {
                 .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(TEST_OUTPUT_QNAME))
                 .withChild(ImmutableNodes.leafNode(TEXT_OUT_QNAME, "foo")).build();
         final DOMRpcResult expResult = new DefaultDOMRpcResult(outputNode);
-        doReturn(Futures.immediateCheckedFuture(expResult)).when(mockRpcService).invokeRpc(eq(path), isNull());
+        doReturn(immediateFluentFuture(expResult)).when(mockRpcService).invokeRpc(eq(path), isNull());
 
         final String uriPath = "toaster:testOutput";
 
-        final Optional output = this.service.invokeRpc(uriPath, Optional.absent());
+        final Optional output = this.service.invokeRpc(uriPath, Optional.empty());
 
         assertEquals("Output present", true, output.isPresent());
         assertNotNull("Returned null response", output.get());
@@ -529,12 +533,12 @@ public class JSONRestconfServiceRfc8040ImplTest {
     @Test(expected = OperationFailedException.class)
     public void testInvokeRpcFailure() throws Exception {
         final DOMRpcException exception = new DOMRpcImplementationNotAvailableException("testExeption");
-        doReturn(Futures.immediateFailedCheckedFuture(exception)).when(mockRpcService).invokeRpc(any(SchemaPath.class),
+        doReturn(immediateFailedFluentFuture(exception)).when(mockRpcService).invokeRpc(any(SchemaPath.class),
                 any(NormalizedNode.class));
 
         final String uriPath = "toaster:cancel-toast";
 
-        this.service.invokeRpc(uriPath, Optional.absent());
+        this.service.invokeRpc(uriPath, Optional.empty());
     }
 
     void testGet(final LogicalDatastoreType datastoreType) throws OperationFailedException {
@@ -545,7 +549,7 @@ public class JSONRestconfServiceRfc8040ImplTest {
                 .withChild(ImmutableNodes.leafNode(DESC_QNAME, "eth interface"))
                 .build();
 
-        doReturn(Futures.immediateCheckedFuture(Optional.of(entryNode))).when(mockReadOnlyTx).read(
+        doReturn(immediateFluentFuture(Optional.of(entryNode))).when(mockReadOnlyTx).read(
                 eq(datastoreType), any(YangInstanceIdentifier.class));
 
         final String uriPath = "ietf-interfaces:interfaces/interface=eth0";
diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImplTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImplTest.java
index d11b10f0e8..e98dbf0add 100644
--- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImplTest.java
+++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImplTest.java
@@ -19,13 +19,15 @@ import static org.opendaylight.restconf.common.patch.PatchEditOperation.CREATE;
 import static org.opendaylight.restconf.common.patch.PatchEditOperation.DELETE;
 import static org.opendaylight.restconf.common.patch.PatchEditOperation.REMOVE;
 import static org.opendaylight.restconf.common.patch.PatchEditOperation.REPLACE;
+import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFalseFluentFuture;
+import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFluentFuture;
+import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateTrueFluentFuture;
 
-import com.google.common.base.Optional;
-import com.google.common.util.concurrent.Futures;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Optional;
 import javax.ws.rs.core.MultivaluedHashMap;
 import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.Response;
@@ -36,16 +38,17 @@ import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
-import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
+import org.opendaylight.mdsal.common.api.CommitInfo;
+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.DOMDataTreeReadWriteTransaction;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
+import org.opendaylight.mdsal.dom.api.DOMMountPoint;
+import org.opendaylight.mdsal.dom.api.DOMMountPointService;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
+import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
+import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.context.NormalizedNodeContext;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
@@ -95,11 +98,11 @@ public class RestconfDataServiceImplTest {
     @Mock
     private UriInfo uriInfo;
     @Mock
-    private DOMDataReadWriteTransaction readWrite;
+    private DOMDataTreeReadWriteTransaction readWrite;
     @Mock
-    private DOMDataReadOnlyTransaction read;
+    private DOMDataTreeReadTransaction read;
     @Mock
-    private DOMDataWriteTransaction write;
+    private DOMDataTreeWriteTransaction write;
     @Mock
     private DOMMountPointService mountPointService;
     @Mock
@@ -171,8 +174,8 @@ public class RestconfDataServiceImplTest {
                 YangParserTestUtils.parseYangFiles(TestRestconfUtils.loadFiles(PATH_FOR_NEW_SCHEMA_CONTEXT)));
         this.schemaNode = DataSchemaContextTree.from(this.contextRef.get()).getChild(this.iidBase).getDataSchemaNode();
 
-        doReturn(Futures.immediateCheckedFuture(null)).when(this.write).submit();
-        doReturn(Futures.immediateCheckedFuture(null)).when(this.readWrite).submit();
+        doReturn(CommitInfo.emptyFluentFuture()).when(this.write).commit();
+        doReturn(CommitInfo.emptyFluentFuture()).when(this.readWrite).commit();
 
         doReturn(this.read).when(domTransactionChain).newReadOnlyTransaction();
         doReturn(this.readWrite).when(domTransactionChain).newReadWriteTransaction();
@@ -194,7 +197,7 @@ public class RestconfDataServiceImplTest {
         doReturn(this.contextRef.get()).when(this.mountPoint).getSchemaContext();
         doReturn(Optional.of(this.mountDataBroker)).when(this.mountPoint).getService(DOMDataBroker.class);
         doReturn(this.mountTransactionChain).when(this.mountDataBroker)
-                .createTransactionChain(any(TransactionChainListener.class));
+                .createTransactionChain(any(DOMTransactionChainListener.class));
         doReturn(this.read).when(this.mountTransactionChain).newReadOnlyTransaction();
         doReturn(this.readWrite).when(this.mountTransactionChain).newReadWriteTransaction();
     }
@@ -202,9 +205,9 @@ public class RestconfDataServiceImplTest {
     @Test
     public void testReadData() {
         doReturn(new MultivaluedHashMap()).when(this.uriInfo).getQueryParameters();
-        doReturn(Futures.immediateCheckedFuture(Optional.of(this.buildBaseCont))).when(this.read)
+        doReturn(immediateFluentFuture(Optional.of(this.buildBaseCont))).when(this.read)
                 .read(LogicalDatastoreType.CONFIGURATION, this.iidBase);
-        doReturn(Futures.immediateCheckedFuture(Optional.absent()))
+        doReturn(immediateFluentFuture(Optional.empty()))
                 .when(this.read).read(LogicalDatastoreType.OPERATIONAL, this.iidBase);
         final Response response = this.dataService.readData("example-jukebox:jukebox", this.uriInfo);
         assertNotNull(response);
@@ -219,9 +222,9 @@ public class RestconfDataServiceImplTest {
     @Test
     public void testReadDataMountPoint() {
         doReturn(new MultivaluedHashMap()).when(this.uriInfo).getQueryParameters();
-        doReturn(Futures.immediateCheckedFuture(Optional.of(this.buildBaseContConfig))).when(this.read)
+        doReturn(immediateFluentFuture(Optional.of(this.buildBaseContConfig))).when(this.read)
                 .read(LogicalDatastoreType.CONFIGURATION, this.iidBase);
-        doReturn(Futures.immediateCheckedFuture(Optional.of(this.buildBaseContOperational))).when(this.read)
+        doReturn(immediateFluentFuture(Optional.of(this.buildBaseContOperational))).when(this.read)
                 .read(LogicalDatastoreType.OPERATIONAL, this.iidBase);
 
         final Response response = this.dataService.readData(
@@ -242,9 +245,9 @@ public class RestconfDataServiceImplTest {
     @Test(expected = RestconfDocumentedException.class)
     public void testReadDataNoData() {
         doReturn(new MultivaluedHashMap()).when(this.uriInfo).getQueryParameters();
-        doReturn(Futures.immediateCheckedFuture(Optional.absent()))
+        doReturn(immediateFluentFuture(Optional.empty()))
                 .when(this.read).read(LogicalDatastoreType.CONFIGURATION, this.iidBase);
-        doReturn(Futures.immediateCheckedFuture(Optional.absent()))
+        doReturn(immediateFluentFuture(Optional.empty()))
                 .when(this.read).read(LogicalDatastoreType.OPERATIONAL, this.iidBase);
         this.dataService.readData("example-jukebox:jukebox", this.uriInfo);
     }
@@ -258,9 +261,9 @@ public class RestconfDataServiceImplTest {
         parameters.put("content", Collections.singletonList("config"));
 
         doReturn(parameters).when(this.uriInfo).getQueryParameters();
-        doReturn(Futures.immediateCheckedFuture(Optional.of(this.buildBaseContConfig))).when(this.read)
+        doReturn(immediateFluentFuture(Optional.of(this.buildBaseContConfig))).when(this.read)
                 .read(LogicalDatastoreType.CONFIGURATION, this.iidBase);
-        doReturn(Futures.immediateCheckedFuture(Optional.of(this.buildBaseContOperational))).when(this.read)
+        doReturn(immediateFluentFuture(Optional.of(this.buildBaseContOperational))).when(this.read)
                 .read(LogicalDatastoreType.OPERATIONAL, this.iidBase);
 
         final Response response = this.dataService.readData("example-jukebox:jukebox", this.uriInfo);
@@ -288,9 +291,9 @@ public class RestconfDataServiceImplTest {
         parameters.put("content", Collections.singletonList("nonconfig"));
 
         doReturn(parameters).when(this.uriInfo).getQueryParameters();
-        doReturn(Futures.immediateCheckedFuture(Optional.of(this.buildBaseContConfig))).when(this.read)
+        doReturn(immediateFluentFuture(Optional.of(this.buildBaseContConfig))).when(this.read)
                 .read(LogicalDatastoreType.CONFIGURATION, this.iidBase);
-        doReturn(Futures.immediateCheckedFuture(Optional.of(this.buildBaseContOperational))).when(this.read)
+        doReturn(immediateFluentFuture(Optional.of(this.buildBaseContOperational))).when(this.read)
                 .read(LogicalDatastoreType.OPERATIONAL, this.iidBase);
 
         final Response response = this.dataService.readData("example-jukebox:jukebox", this.uriInfo);
@@ -315,7 +318,7 @@ public class RestconfDataServiceImplTest {
                 new InstanceIdentifierContext<>(this.iidBase, this.schemaNode, null, this.contextRef.get());
         final NormalizedNodeContext payload = new NormalizedNodeContext(iidContext, this.buildBaseCont);
 
-        doReturn(Futures.immediateCheckedFuture(Boolean.TRUE)).when(this.readWrite)
+        doReturn(immediateTrueFluentFuture()).when(this.readWrite)
                 .exists(LogicalDatastoreType.CONFIGURATION, this.iidBase);
         doNothing().when(this.readWrite).put(LogicalDatastoreType.CONFIGURATION, this.iidBase, payload.getData());
         final Response response = this.dataService.putData(null, payload, this.uriInfo);
@@ -333,7 +336,7 @@ public class RestconfDataServiceImplTest {
                 new InstanceIdentifierContext<>(this.iidBase, this.schemaNode, mountPoint, this.contextRef.get());
         final NormalizedNodeContext payload = new NormalizedNodeContext(iidContext, this.buildBaseCont);
 
-        doReturn(Futures.immediateCheckedFuture(Boolean.TRUE)).when(this.readWrite)
+        doReturn(immediateTrueFluentFuture()).when(this.readWrite)
                 .exists(LogicalDatastoreType.CONFIGURATION, this.iidBase);
         doNothing().when(this.readWrite).put(LogicalDatastoreType.CONFIGURATION, this.iidBase, payload.getData());
         final Response response = this.dataService.putData(null, payload, this.uriInfo);
@@ -369,14 +372,14 @@ public class RestconfDataServiceImplTest {
         final InstanceIdentifierContext iidContext =
                 new InstanceIdentifierContext<>(this.iidBase, null, null, this.contextRef.get());
         final NormalizedNodeContext payload = new NormalizedNodeContext(iidContext, buildList);
-        doReturn(Futures.immediateCheckedFuture(Optional.absent()))
+        doReturn(immediateFluentFuture(Optional.empty()))
                 .when(this.read).read(LogicalDatastoreType.CONFIGURATION, this.iidBase);
         final MapNode data = (MapNode) payload.getData();
         final YangInstanceIdentifier.NodeIdentifierWithPredicates identifier =
                 data.getValue().iterator().next().getIdentifier();
         final YangInstanceIdentifier node =
                 payload.getInstanceIdentifierContext().getInstanceIdentifier().node(identifier);
-        doReturn(Futures.immediateCheckedFuture(false))
+        doReturn(immediateFalseFluentFuture())
                 .when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, node);
         doNothing().when(this.readWrite).put(LogicalDatastoreType.CONFIGURATION, node, payload.getData());
         doReturn(UriBuilder.fromUri("http://localhost:8181/restconf/15/")).when(this.uriInfo).getBaseUriBuilder();
@@ -388,7 +391,7 @@ public class RestconfDataServiceImplTest {
     @Test
     public void testDeleteData() {
         doNothing().when(this.readWrite).delete(LogicalDatastoreType.CONFIGURATION, this.iidBase);
-        doReturn(Futures.immediateCheckedFuture(true))
+        doReturn(immediateTrueFluentFuture())
                 .when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, this.iidBase);
         final Response response = this.dataService.deleteData("example-jukebox:jukebox");
         assertNotNull(response);
@@ -401,7 +404,7 @@ public class RestconfDataServiceImplTest {
     @Test
     public void testDeleteDataMountPoint() {
         doNothing().when(this.readWrite).delete(LogicalDatastoreType.CONFIGURATION, this.iidBase);
-        doReturn(Futures.immediateCheckedFuture(true))
+        doReturn(immediateTrueFluentFuture())
                 .when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, this.iidBase);
         final Response response =
                 this.dataService.deleteData("example-jukebox:jukebox/yang-ext:mount/example-jukebox:jukebox");
@@ -423,13 +426,13 @@ public class RestconfDataServiceImplTest {
         entity.add(new PatchEntity("delete data", DELETE, iidleaf));
         final PatchContext patch = new PatchContext(iidContext, entity, "test patch id");
 
-        doReturn(Futures.immediateCheckedFuture(Optional.of(this.buildBaseCont))).when(this.read)
+        doReturn(immediateFluentFuture(Optional.of(this.buildBaseCont))).when(this.read)
                 .read(LogicalDatastoreType.CONFIGURATION, this.iidBase);
         doNothing().when(this.write).put(LogicalDatastoreType.CONFIGURATION, this.iidBase, this.buildBaseCont);
         doNothing().when(this.readWrite).delete(LogicalDatastoreType.CONFIGURATION, iidleaf);
-        doReturn(Futures.immediateCheckedFuture(false))
+        doReturn(immediateFalseFluentFuture())
                 .when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, this.iidBase);
-        doReturn(Futures.immediateCheckedFuture(true))
+        doReturn(immediateTrueFluentFuture())
                 .when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, iidleaf);
         final PatchStatusContext status = this.dataService.patchData(patch, this.uriInfo);
         assertTrue(status.isOk());
@@ -451,14 +454,13 @@ public class RestconfDataServiceImplTest {
         entity.add(new PatchEntity("delete data", DELETE, iidleaf));
         final PatchContext patch = new PatchContext(iidContext, entity, "test patch id");
 
-        doReturn(Futures.immediateCheckedFuture(Optional.of(this.buildBaseCont))).when(this.read)
+        doReturn(immediateFluentFuture(Optional.of(this.buildBaseCont))).when(this.read)
                 .read(LogicalDatastoreType.CONFIGURATION, this.iidBase);
         doNothing().when(this.write).put(LogicalDatastoreType.CONFIGURATION, this.iidBase, this.buildBaseCont);
         doNothing().when(this.readWrite).delete(LogicalDatastoreType.CONFIGURATION, iidleaf);
-        doReturn(Futures.immediateCheckedFuture(false))
+        doReturn(immediateFalseFluentFuture())
                 .when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, this.iidBase);
-        doReturn(Futures.immediateCheckedFuture(true))
-                .when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, iidleaf);
+        doReturn(immediateTrueFluentFuture()).when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, iidleaf);
 
         final PatchStatusContext status = this.dataService.patchData(patch, this.uriInfo);
         assertTrue(status.isOk());
@@ -480,13 +482,13 @@ public class RestconfDataServiceImplTest {
         entity.add(new PatchEntity("delete data", DELETE, iidleaf));
         final PatchContext patch = new PatchContext(iidContext, entity, "test patch id");
 
-        doReturn(Futures.immediateCheckedFuture(Optional.of(this.buildBaseCont))).when(this.read)
+        doReturn(immediateFluentFuture(Optional.of(this.buildBaseCont))).when(this.read)
                 .read(LogicalDatastoreType.CONFIGURATION, this.iidBase);
         doNothing().when(this.write).put(LogicalDatastoreType.CONFIGURATION, this.iidBase, this.buildBaseCont);
         doNothing().when(this.readWrite).delete(LogicalDatastoreType.CONFIGURATION, iidleaf);
-        doReturn(Futures.immediateCheckedFuture(false))
+        doReturn(immediateFalseFluentFuture())
                 .when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, this.iidBase);
-        doReturn(Futures.immediateCheckedFuture(false))
+        doReturn(immediateFalseFluentFuture())
                 .when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, iidleaf);
         doReturn(true).when(this.readWrite).cancel();
         final PatchStatusContext status = this.dataService.patchData(patch, this.uriInfo);
diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImplTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImplTest.java
index f8ab905c79..1508efaab0 100644
--- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImplTest.java
+++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImplTest.java
@@ -5,25 +5,25 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.restconf.nb.rfc8040.rests.services.impl;
 
-import com.google.common.util.concurrent.CheckedFuture;
-import com.google.common.util.concurrent.Futures;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFluentFuture;
+
 import javax.ws.rs.core.UriInfo;
-import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
-import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMRpcException;
-import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult;
-import org.opendaylight.controller.md.sal.dom.api.DOMRpcService;
-import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
+import org.opendaylight.mdsal.common.api.CommitInfo;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
+import org.opendaylight.mdsal.dom.api.DOMRpcResult;
+import org.opendaylight.mdsal.dom.api.DOMRpcService;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
+import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.context.NormalizedNodeContext;
 import org.opendaylight.restconf.nb.rfc8040.TestRestconfUtils;
@@ -54,47 +54,43 @@ public class RestconfInvokeOperationsServiceImplTest {
         MockitoAnnotations.initMocks(this);
         final SchemaContextRef contextRef = new SchemaContextRef(
                 YangParserTestUtils.parseYangFiles(TestRestconfUtils.loadFiles(PATH_FOR_NEW_SCHEMA_CONTEXT)));
-        final TransactionChainHandler txHandler = Mockito.mock(TransactionChainHandler.class);
-        final DOMTransactionChain domTx = Mockito.mock(DOMTransactionChain.class);
-        Mockito.when(txHandler.get()).thenReturn(domTx);
-        final DOMDataWriteTransaction wTx = Mockito.mock(DOMDataWriteTransaction.class);
-        Mockito.when(domTx.newWriteOnlyTransaction()).thenReturn(wTx);
-        final CheckedFuture checked = Mockito.mock(CheckedFuture.class);
-        Mockito.when(wTx.submit()).thenReturn(checked);
-        Mockito.when(checked.checkedGet()).thenReturn(null);
-        final SchemaContextHandler schemaContextHandler =
-                SchemaContextHandler.newInstance(txHandler, Mockito.mock(DOMSchemaService.class));
+        final TransactionChainHandler txHandler = mock(TransactionChainHandler.class);
+        final DOMTransactionChain domTx = mock(DOMTransactionChain.class);
+        when(txHandler.get()).thenReturn(domTx);
+        final DOMDataTreeWriteTransaction wTx = mock(DOMDataTreeWriteTransaction.class);
+        when(domTx.newWriteOnlyTransaction()).thenReturn(wTx);
+        doReturn(CommitInfo.emptyFluentFuture()).when(wTx).commit();
+        final SchemaContextHandler schemaContextHandler = SchemaContextHandler.newInstance(txHandler,
+            mock(DOMSchemaService.class));
         schemaContextHandler.onGlobalContextUpdated(contextRef.get());
         this.invokeOperationsService =
                 new RestconfInvokeOperationsServiceImpl(this.rpcServiceHandler, schemaContextHandler);
-        Mockito.when(this.rpcServiceHandler.get()).thenReturn(this.rpcService);
+        when(this.rpcServiceHandler.get()).thenReturn(this.rpcService);
     }
 
     @Test
     public void testInvokeRpc() throws Exception {
         final String identifier = "invoke-rpc-module:rpcTest";
-        final NormalizedNode result = Mockito.mock(NormalizedNode.class);
+        final NormalizedNode result = mock(NormalizedNode.class);
         final NormalizedNodeContext payload = prepNNC(result);
-        final UriInfo uriInfo = Mockito.mock(UriInfo.class);
+        final UriInfo uriInfo = mock(UriInfo.class);
 
         final NormalizedNodeContext rpc = this.invokeOperationsService.invokeRpc(identifier, payload, uriInfo);
-        Assert.assertEquals(result, rpc.getData());
+        assertEquals(result, rpc.getData());
     }
 
-    private NormalizedNodeContext prepNNC(final NormalizedNode result) {
-        final InstanceIdentifierContext context = Mockito.mock(InstanceIdentifierContext.class);
-        final RpcDefinition schemaNode = Mockito.mock(RpcDefinition.class);
+    private NormalizedNodeContext prepNNC(final NormalizedNode result) {
+        final InstanceIdentifierContext context = mock(InstanceIdentifierContext.class);
+        final RpcDefinition schemaNode = mock(RpcDefinition.class);
         final QName qname = QName.create("invoke:rpc:module", "2013-12-03", "rpcTest");
         final SchemaPath schemaPath = SchemaPath.create(true, qname);
-        Mockito.when(schemaNode.getPath()).thenReturn(schemaPath);
-        Mockito.when(schemaNode.getQName()).thenReturn(qname);
-        Mockito.when(context.getSchemaNode()).thenReturn(schemaNode);
-        final NormalizedNode data = Mockito.mock(NormalizedNode.class);
-        final DOMRpcResult domRpcResult = Mockito.mock(DOMRpcResult.class);
-        final CheckedFuture checkdFuture = Futures.immediateCheckedFuture(domRpcResult);
-        Mockito.when(this.rpcService.invokeRpc(schemaPath, data)).thenReturn(checkdFuture);
-        Mockito.when(domRpcResult.getResult()).thenReturn(result);
+        when(schemaNode.getPath()).thenReturn(schemaPath);
+        when(schemaNode.getQName()).thenReturn(qname);
+        doReturn(schemaNode).when(context).getSchemaNode();
+        final NormalizedNode data = mock(NormalizedNode.class);
+        final DOMRpcResult domRpcResult = mock(DOMRpcResult.class);
+        when(this.rpcService.invokeRpc(schemaPath, data)).thenReturn(immediateFluentFuture(domRpcResult));
+        doReturn(result).when(domRpcResult).getResult();
         return new NormalizedNodeContext(context, data);
     }
-
 }
diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfStreamsSubscriptionServiceImplTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfStreamsSubscriptionServiceImplTest.java
index 55ca771e87..f28981dde1 100644
--- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfStreamsSubscriptionServiceImplTest.java
+++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfStreamsSubscriptionServiceImplTest.java
@@ -5,19 +5,18 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.restconf.nb.rfc8040.rests.services.impl;
 
 import static org.junit.Assert.assertEquals;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateTrueFluentFuture;
 
-import com.google.common.util.concurrent.CheckedFuture;
-import com.google.common.util.concurrent.Futures;
+import com.google.common.collect.ImmutableClassToInstanceMap;
 import java.lang.reflect.Field;
 import java.net.URI;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -33,16 +32,14 @@ import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.mockito.Mock;
-import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
-import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeService;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
+import org.opendaylight.mdsal.common.api.CommitInfo;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
+import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
 import org.opendaylight.restconf.common.context.NormalizedNodeContext;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.common.util.SimpleUriInfo;
@@ -58,7 +55,6 @@ import org.opendaylight.yang.gen.v1.urn.sal.restconf.event.subscription.rev14070
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
-@SuppressWarnings("deprecation")
 public class RestconfStreamsSubscriptionServiceImplTest {
 
     private static final String URI = "/restconf/18/data/ietf-restconf-monitoring:restconf-state/streams/stream/"
@@ -81,41 +77,36 @@ public class RestconfStreamsSubscriptionServiceImplTest {
         MockitoAnnotations.initMocks(this);
 
         final DOMTransactionChain domTx = mock(DOMTransactionChain.class);
-        final DOMDataWriteTransaction wTx = Mockito.mock(DOMDataWriteTransaction.class);
-        Mockito.when(domTx.newWriteOnlyTransaction()).thenReturn(wTx);
-        final DOMDataReadWriteTransaction rwTx = Mockito.mock(DOMDataReadWriteTransaction.class);
-        final CheckedFuture checkedFuture = Futures.immediateCheckedFuture(Boolean.TRUE);
-        Mockito.when(rwTx.exists(Mockito.any(), Mockito.any())).thenReturn(checkedFuture);
-        final CheckedFuture checkedFutureEmpty =
-                Futures.immediateCheckedFuture(null);
-        Mockito.when(rwTx.submit()).thenReturn(checkedFutureEmpty);
-        Mockito.when(domTx.newReadWriteTransaction()).thenReturn(rwTx);
-        final CheckedFuture checked = mock(CheckedFuture.class);
-        Mockito.when(wTx.submit()).thenReturn(checked);
-        Mockito.when(checked.checkedGet()).thenReturn(null);
+        final DOMDataTreeWriteTransaction wTx = mock(DOMDataTreeWriteTransaction.class);
+        when(domTx.newWriteOnlyTransaction()).thenReturn(wTx);
+        final DOMDataTreeReadWriteTransaction rwTx = mock(DOMDataTreeReadWriteTransaction.class);
+        when(rwTx.exists(any(), any())).thenReturn(immediateTrueFluentFuture());
+        doReturn(CommitInfo.emptyFluentFuture()).when(rwTx).commit();
+        when(domTx.newReadWriteTransaction()).thenReturn(rwTx);
+        doReturn(CommitInfo.emptyFluentFuture()).when(wTx).commit();
 
         final DOMDataBroker dataBroker = mock(DOMDataBroker.class);
         doReturn(domTx).when(dataBroker).createTransactionChain(any());
 
         transactionHandler = new TransactionChainHandler(dataBroker);
-        schemaHandler = SchemaContextHandler.newInstance(transactionHandler, Mockito.mock(DOMSchemaService.class));
+        schemaHandler = SchemaContextHandler.newInstance(transactionHandler, mock(DOMSchemaService.class));
 
         DOMDataTreeChangeService dataTreeChangeService = mock(DOMDataTreeChangeService.class);
         doReturn(mock(ListenerRegistration.class)).when(dataTreeChangeService)
                 .registerDataTreeChangeListener(any(), any());
 
-        doReturn(Collections.singletonMap(DOMDataTreeChangeService.class, dataTreeChangeService))
-                .when(dataBroker).getSupportedExtensions();
+        doReturn(ImmutableClassToInstanceMap.of(DOMDataTreeChangeService.class, dataTreeChangeService))
+                .when(dataBroker).getExtensions();
 
         doReturn(dataBroker).when(this.dataBrokerHandler).get();
 
         final MultivaluedMap map = mock(MultivaluedMap.class);
         final Set>> set = new HashSet<>();
-        Mockito.when(map.entrySet()).thenReturn(set);
-        Mockito.when(this.uriInfo.getQueryParameters()).thenReturn(map);
+        when(map.entrySet()).thenReturn(set);
+        when(this.uriInfo.getQueryParameters()).thenReturn(map);
         final UriBuilder baseUriBuilder = new LocalUriInfo().getBaseUriBuilder();
-        Mockito.when(uriInfo.getBaseUri()).thenReturn(baseUriBuilder.build());
-        Mockito.when(uriInfo.getBaseUriBuilder()).thenReturn(baseUriBuilder);
+        when(uriInfo.getBaseUri()).thenReturn(baseUriBuilder.build());
+        when(uriInfo.getBaseUriBuilder()).thenReturn(baseUriBuilder);
         this.schemaHandler.onGlobalContextUpdated(
                 YangParserTestUtils.parseYangFiles(TestRestconfUtils.loadFiles("/notifications")));
     }
diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/CreateStreamUtilTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/CreateStreamUtilTest.java
index 97dde3fdd5..6b289e4afd 100644
--- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/CreateStreamUtilTest.java
+++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/CreateStreamUtilTest.java
@@ -17,7 +17,7 @@ import java.util.Set;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.MockitoAnnotations;
-import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult;
+import org.opendaylight.mdsal.dom.api.DOMRpcResult;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.context.NormalizedNodeContext;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/DeleteDataTransactionUtilTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/DeleteDataTransactionUtilTest.java
index 7db5afee60..0f95c8eebd 100644
--- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/DeleteDataTransactionUtilTest.java
+++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/DeleteDataTransactionUtilTest.java
@@ -5,13 +5,13 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.restconf.nb.rfc8040.rests.utils;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
+import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFalseFluentFuture;
+import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateTrueFluentFuture;
 
-import com.google.common.util.concurrent.Futures;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
 import org.junit.Before;
@@ -19,10 +19,11 @@ import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
+import org.opendaylight.mdsal.common.api.CommitInfo;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
+import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.common.errors.RestconfError.ErrorTag;
@@ -37,7 +38,7 @@ public class DeleteDataTransactionUtilTest {
     @Mock
     private InstanceIdentifierContext context;
     @Mock
-    private DOMDataReadWriteTransaction readWrite;
+    private DOMDataTreeReadWriteTransaction readWrite;
     @Mock
     private DOMDataBroker mockDataBroker;
 
@@ -47,7 +48,7 @@ public class DeleteDataTransactionUtilTest {
     public void init() throws Exception {
         MockitoAnnotations.initMocks(this);
         Mockito.when(this.transactionChain.newReadWriteTransaction()).thenReturn(this.readWrite);
-        Mockito.when(this.readWrite.submit()).thenReturn(Futures.immediateCheckedFuture(null));
+        Mockito.doReturn(CommitInfo.emptyFluentFuture()).when(this.readWrite).commit();
         Mockito.when(this.context.getInstanceIdentifier()).thenReturn(YangInstanceIdentifier.EMPTY);
 
         Mockito.doReturn(transactionChain).when(mockDataBroker).createTransactionChain(Mockito.any());
@@ -61,8 +62,7 @@ public class DeleteDataTransactionUtilTest {
     public void deleteData() throws Exception {
         // assert that data to delete exists
         Mockito.when(this.transactionChain.newReadWriteTransaction().exists(LogicalDatastoreType.CONFIGURATION,
-                YangInstanceIdentifier.EMPTY))
-                .thenReturn(Futures.immediateCheckedFuture(Boolean.TRUE));
+                YangInstanceIdentifier.EMPTY)).thenReturn(immediateTrueFluentFuture());
 
         // test
         final Response response = DeleteDataTransactionUtil.deleteData(
@@ -79,8 +79,7 @@ public class DeleteDataTransactionUtilTest {
     public void deleteDataNegativeTest() throws Exception {
         // assert that data to delete does NOT exist
         Mockito.when(this.transactionChain.newReadWriteTransaction().exists(LogicalDatastoreType.CONFIGURATION,
-                YangInstanceIdentifier.EMPTY))
-                .thenReturn(Futures.immediateCheckedFuture(Boolean.FALSE));
+                YangInstanceIdentifier.EMPTY)).thenReturn(immediateFalseFluentFuture());
 
         // test and assert error
         try {
diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtilTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtilTest.java
index 2f084cb5d4..9446e5c478 100644
--- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtilTest.java
+++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtilTest.java
@@ -5,12 +5,12 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.restconf.nb.rfc8040.rests.utils;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.MockitoAnnotations.initMocks;
 import static org.opendaylight.restconf.common.patch.PatchEditOperation.CREATE;
@@ -18,18 +18,19 @@ import static org.opendaylight.restconf.common.patch.PatchEditOperation.DELETE;
 import static org.opendaylight.restconf.common.patch.PatchEditOperation.MERGE;
 import static org.opendaylight.restconf.common.patch.PatchEditOperation.REMOVE;
 import static org.opendaylight.restconf.common.patch.PatchEditOperation.REPLACE;
+import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFalseFluentFuture;
+import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateTrueFluentFuture;
 
-import com.google.common.util.concurrent.Futures;
 import java.util.ArrayList;
 import java.util.List;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
+import org.opendaylight.mdsal.common.api.CommitInfo;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
+import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.errors.RestconfError;
 import org.opendaylight.restconf.common.patch.PatchContext;
@@ -58,7 +59,7 @@ public class PatchDataTransactionUtilTest {
     private DOMTransactionChain transactionChain;
 
     @Mock
-    private DOMDataReadWriteTransaction rwTransaction;
+    private DOMDataTreeReadWriteTransaction rwTransaction;
 
     @Mock
     private DOMDataBroker mockDataBroker;
@@ -77,7 +78,7 @@ public class PatchDataTransactionUtilTest {
     public void setUp() throws Exception {
         initMocks(this);
 
-        Mockito.doReturn(transactionChain).when(mockDataBroker).createTransactionChain(Mockito.any());
+        doReturn(transactionChain).when(mockDataBroker).createTransactionChain(any());
         transactionChainHandler = new TransactionChainHandler(mockDataBroker);
 
         this.refSchemaCtx = new SchemaContextRef(
@@ -161,12 +162,12 @@ public class PatchDataTransactionUtilTest {
 
         /* Mocks */
         doReturn(this.rwTransaction).when(this.transactionChain).newReadWriteTransaction();
-        doReturn(Futures.immediateCheckedFuture(null)).when(this.rwTransaction).submit();
+        doReturn(CommitInfo.emptyFluentFuture()).when(this.rwTransaction).commit();
     }
 
     @Test
     public void testPatchDataReplaceMergeAndRemove() {
-        doReturn(Futures.immediateCheckedFuture(false)).doReturn(Futures.immediateCheckedFuture(true))
+        doReturn(immediateFalseFluentFuture()).doReturn(immediateTrueFluentFuture())
                 .when(this.rwTransaction).exists(LogicalDatastoreType.CONFIGURATION, this.targetNodeMerge);
 
         final PatchEntity entityReplace =
@@ -194,10 +195,10 @@ public class PatchDataTransactionUtilTest {
 
     @Test
     public void testPatchDataCreateAndDelete() throws Exception {
-        doReturn(Futures.immediateCheckedFuture(false))
-                .when(this.rwTransaction).exists(LogicalDatastoreType.CONFIGURATION, this.instanceIdContainer);
-        doReturn(Futures.immediateCheckedFuture(true))
-        .when(this.rwTransaction).exists(LogicalDatastoreType.CONFIGURATION, this.targetNodeForCreateAndDelete);
+        doReturn(immediateFalseFluentFuture()).when(this.rwTransaction).exists(LogicalDatastoreType.CONFIGURATION,
+            this.instanceIdContainer);
+        doReturn(immediateTrueFluentFuture()).when(this.rwTransaction).exists(LogicalDatastoreType.CONFIGURATION,
+            this.targetNodeForCreateAndDelete);
 
         final PatchEntity entityCreate =
                 new PatchEntity("edit1", CREATE, this.instanceIdContainer, this.buildBaseContainerForTests);
@@ -223,11 +224,10 @@ public class PatchDataTransactionUtilTest {
 
     @Test
     public void deleteNonexistentDataTest() {
-        doReturn(Futures.immediateCheckedFuture(false))
-                .when(this.rwTransaction).exists(LogicalDatastoreType.CONFIGURATION, this.targetNodeForCreateAndDelete);
+        doReturn(immediateFalseFluentFuture()).when(this.rwTransaction).exists(LogicalDatastoreType.CONFIGURATION,
+            this.targetNodeForCreateAndDelete);
 
-        final PatchEntity entityDelete =
-                new PatchEntity("edit", DELETE, this.targetNodeForCreateAndDelete);
+        final PatchEntity entityDelete = new PatchEntity("edit", DELETE, this.targetNodeForCreateAndDelete);
         final List entities = new ArrayList<>();
 
         entities.add(entityDelete);
@@ -248,7 +248,7 @@ public class PatchDataTransactionUtilTest {
 
     @Test
     public void testPatchMergePutContainer() throws Exception {
-        doReturn(Futures.immediateCheckedFuture(false)).doReturn(Futures.immediateCheckedFuture(true))
+        doReturn(immediateFalseFluentFuture()).doReturn(immediateTrueFluentFuture())
                 .when(this.rwTransaction).exists(LogicalDatastoreType.CONFIGURATION, this.targetNodeForCreateAndDelete);
 
         final PatchEntity entityMerge =
diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PostDataTransactionUtilTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PostDataTransactionUtilTest.java
index 105e527048..2b33730f9d 100644
--- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PostDataTransactionUtilTest.java
+++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PostDataTransactionUtilTest.java
@@ -5,7 +5,6 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.restconf.nb.rfc8040.rests.utils;
 
 import static org.junit.Assert.assertEquals;
@@ -14,8 +13,9 @@ import static org.junit.Assert.fail;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.verify;
+import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFailedFluentFuture;
+import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFalseFluentFuture;
 
-import com.google.common.util.concurrent.Futures;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriBuilder;
 import javax.ws.rs.core.UriInfo;
@@ -24,12 +24,13 @@ import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
+import org.opendaylight.mdsal.common.api.CommitInfo;
+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.DOMDataTreeReadWriteTransaction;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
+import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.context.NormalizedNodeContext;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
@@ -57,11 +58,11 @@ public class PostDataTransactionUtilTest {
     @Mock
     private DOMTransactionChain transactionChain;
     @Mock
-    private DOMDataReadWriteTransaction readWrite;
+    private DOMDataTreeReadWriteTransaction readWrite;
     @Mock
-    private DOMDataReadOnlyTransaction read;
+    private DOMDataTreeReadTransaction read;
     @Mock
-    private DOMDataWriteTransaction write;
+    private DOMDataTreeWriteTransaction write;
     @Mock
     private UriInfo uriInfo;
     @Mock
@@ -139,16 +140,15 @@ public class PostDataTransactionUtilTest {
                 new InstanceIdentifierContext<>(this.iid2, null, null, this.schema);
         final NormalizedNodeContext payload = new NormalizedNodeContext(iidContext, this.buildBaseCont);
 
-        doReturn(Futures.immediateCheckedFuture(false))
-                .when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, this.iid2);
+        doReturn(immediateFalseFluentFuture()).when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION,
+            this.iid2);
         final YangInstanceIdentifier.NodeIdentifier identifier =
                 ((ContainerNode) ((SingletonSet) payload.getData().getValue()).iterator().next()).getIdentifier();
         final YangInstanceIdentifier node =
                 payload.getInstanceIdentifierContext().getInstanceIdentifier().node(identifier);
-        doReturn(Futures.immediateCheckedFuture(false))
-                .when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, node);
+        doReturn(immediateFalseFluentFuture()).when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, node);
         doNothing().when(this.readWrite).put(LogicalDatastoreType.CONFIGURATION, node, payload.getData());
-        doReturn(Futures.immediateCheckedFuture(null)).when(this.readWrite).submit();
+        doReturn(CommitInfo.emptyFluentFuture()).when(this.readWrite).commit();
         final TransactionVarsWrapper wrapper =
                 new TransactionVarsWrapper(payload.getInstanceIdentifierContext(), null, transactionChainHandler);
         final Response response =
@@ -170,10 +170,9 @@ public class PostDataTransactionUtilTest {
                 data.getValue().iterator().next().getIdentifier();
         final YangInstanceIdentifier node =
                 payload.getInstanceIdentifierContext().getInstanceIdentifier().node(identifier);
-        doReturn(Futures.immediateCheckedFuture(false))
-                .when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, node);
+        doReturn(immediateFalseFluentFuture()).when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, node);
         doNothing().when(this.readWrite).put(LogicalDatastoreType.CONFIGURATION, node, payload.getData());
-        doReturn(Futures.immediateCheckedFuture(null)).when(this.readWrite).submit();
+        doReturn(CommitInfo.emptyFluentFuture()).when(this.readWrite).commit();
         final TransactionVarsWrapper wrapper =
                 new TransactionVarsWrapper(payload.getInstanceIdentifierContext(), null, transactionChainHandler);
         final Response response =
@@ -189,18 +188,16 @@ public class PostDataTransactionUtilTest {
                 new InstanceIdentifierContext<>(this.iid2, null, null, this.schema);
         final NormalizedNodeContext payload = new NormalizedNodeContext(iidContext, this.buildBaseCont);
 
-        doReturn(Futures.immediateCheckedFuture(false))
-                .when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, this.iid2);
+        doReturn(immediateFalseFluentFuture()).when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION,
+            this.iid2);
         final YangInstanceIdentifier.NodeIdentifier identifier =
                 ((ContainerNode) ((SingletonSet) payload.getData().getValue()).iterator().next()).getIdentifier();
         final YangInstanceIdentifier node =
                 payload.getInstanceIdentifierContext().getInstanceIdentifier().node(identifier);
-        doReturn(Futures.immediateCheckedFuture(false))
-                .when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, node);
-        doNothing().when(this.readWrite).put(LogicalDatastoreType.CONFIGURATION, node,
-                payload.getData());
+        doReturn(immediateFalseFluentFuture()).when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, node);
+        doNothing().when(this.readWrite).put(LogicalDatastoreType.CONFIGURATION, node, payload.getData());
         final DOMException domException = new DOMException((short) 414, "Post request failed");
-        doReturn(Futures.immediateFailedCheckedFuture(domException)).when(this.readWrite).submit();
+        doReturn(immediateFailedFluentFuture(domException)).when(this.readWrite).commit();
         final TransactionVarsWrapper wrapper =
                 new TransactionVarsWrapper(payload.getInstanceIdentifierContext(), null, transactionChainHandler);
 
@@ -216,5 +213,4 @@ public class PostDataTransactionUtilTest {
         verify(this.readWrite).put(LogicalDatastoreType.CONFIGURATION,
                 payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData());
     }
-
 }
diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtilTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtilTest.java
index e44d3da1f4..dfb3ad4e32 100644
--- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtilTest.java
+++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtilTest.java
@@ -5,25 +5,25 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.restconf.nb.rfc8040.rests.utils;
 
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.verify;
+import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFalseFluentFuture;
 
-import com.google.common.util.concurrent.Futures;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
+import org.opendaylight.mdsal.common.api.CommitInfo;
+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.DOMDataTreeReadWriteTransaction;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
+import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.context.NormalizedNodeContext;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
@@ -50,11 +50,11 @@ public class PutDataTransactionUtilTest {
     @Mock
     private DOMTransactionChain transactionChain;
     @Mock
-    private DOMDataReadWriteTransaction readWrite;
+    private DOMDataTreeReadWriteTransaction readWrite;
     @Mock
-    private DOMDataReadOnlyTransaction read;
+    private DOMDataTreeReadTransaction read;
     @Mock
-    private DOMDataWriteTransaction write;
+    private DOMDataTreeWriteTransaction write;
     @Mock
     private DOMDataBroker mockDataBroker;
 
@@ -214,11 +214,11 @@ public class PutDataTransactionUtilTest {
         doReturn(this.readWrite).when(this.transactionChain).newReadWriteTransaction();
         doReturn(this.read).when(this.transactionChain).newReadOnlyTransaction();
         doReturn(this.write).when(this.transactionChain).newWriteOnlyTransaction();
-        doReturn(Futures.immediateCheckedFuture(Boolean.FALSE))
+        doReturn(immediateFalseFluentFuture())
                 .when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, this.iid2);
         doNothing().when(this.readWrite).put(LogicalDatastoreType.CONFIGURATION,
                 payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData());
-        doReturn(Futures.immediateCheckedFuture(null)).when(this.readWrite).submit();
+        doReturn(CommitInfo.emptyFluentFuture()).when(this.readWrite).commit();
 
         PutDataTransactionUtil.putData(payload, this.refSchemaCtx,
                 new TransactionVarsWrapper(payload.getInstanceIdentifierContext(), null, transactionChainHandler), null,
@@ -238,11 +238,11 @@ public class PutDataTransactionUtilTest {
         doReturn(this.readWrite).when(this.transactionChain).newReadWriteTransaction();
         doReturn(this.read).when(this.transactionChain).newReadOnlyTransaction();
         doReturn(this.write).when(this.transactionChain).newWriteOnlyTransaction();
-        doReturn(Futures.immediateCheckedFuture(Boolean.FALSE))
+        doReturn(immediateFalseFluentFuture())
                 .when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, this.iid);
         doNothing().when(this.readWrite).put(LogicalDatastoreType.CONFIGURATION,
                 payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData());
-        doReturn(Futures.immediateCheckedFuture(null)).when(this.readWrite).submit();
+        doReturn(CommitInfo.emptyFluentFuture()).when(this.readWrite).commit();
 
         PutDataTransactionUtil.putData(payload, this.refSchemaCtx,
                 new TransactionVarsWrapper(payload.getInstanceIdentifierContext(), null, transactionChainHandler), null,
@@ -262,17 +262,15 @@ public class PutDataTransactionUtilTest {
         doReturn(this.readWrite).when(this.transactionChain).newReadWriteTransaction();
         doReturn(this.read).when(this.transactionChain).newReadOnlyTransaction();
         doReturn(this.write).when(this.transactionChain).newWriteOnlyTransaction();
-        doReturn(Futures.immediateCheckedFuture(Boolean.FALSE))
+        doReturn(immediateFalseFluentFuture())
                 .when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, this.iid2);
         doNothing().when(this.readWrite).put(LogicalDatastoreType.CONFIGURATION,
                 payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData());
-        doReturn(Futures.immediateCheckedFuture(null)).when(this.readWrite).submit();
+        doReturn(CommitInfo.emptyFluentFuture()).when(this.readWrite).commit();
         PutDataTransactionUtil.putData(payload, this.refSchemaCtx,
                 new TransactionVarsWrapper(payload.getInstanceIdentifierContext(), null, transactionChainHandler), null,
                 null);
         verify(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, this.iid2);
         verify(this.readWrite).put(LogicalDatastoreType.CONFIGURATION, this.iid2, payload.getData());
     }
-
 }
-
diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtilTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtilTest.java
index 718f050fe0..709fc73eff 100644
--- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtilTest.java
+++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtilTest.java
@@ -5,7 +5,6 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.restconf.nb.rfc8040.rests.utils;
 
 import static org.junit.Assert.assertEquals;
@@ -14,11 +13,11 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.fail;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.when;
+import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFluentFuture;
 
-import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableList;
-import com.google.common.util.concurrent.Futures;
 import java.util.Collections;
+import java.util.Optional;
 import javax.ws.rs.core.MultivaluedHashMap;
 import javax.ws.rs.core.UriInfo;
 import org.junit.Before;
@@ -26,10 +25,10 @@ import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
+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.DOMTransactionChain;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.context.WriterParameters;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
@@ -62,7 +61,7 @@ public class ReadDataTransactionUtilTest {
     @Mock
     private InstanceIdentifierContext context;
     @Mock
-    private DOMDataReadOnlyTransaction read;
+    private DOMDataTreeReadTransaction read;
     @Mock
     private SchemaContext schemaContext;
     @Mock
@@ -91,7 +90,7 @@ public class ReadDataTransactionUtilTest {
 
     @Test
     public void readDataConfigTest() {
-        doReturn(Futures.immediateCheckedFuture(Optional.of(DATA.data3))).when(read)
+        doReturn(immediateFluentFuture(Optional.of(DATA.data3))).when(read)
                 .read(LogicalDatastoreType.CONFIGURATION, DATA.path);
         doReturn(DATA.path).when(context).getInstanceIdentifier();
         final String valueOfContent = RestconfDataServiceConstant.ReadData.CONFIG;
@@ -102,9 +101,9 @@ public class ReadDataTransactionUtilTest {
 
     @Test
     public void readAllHavingOnlyConfigTest() {
-        doReturn(Futures.immediateCheckedFuture(Optional.of(DATA.data3))).when(read)
+        doReturn(immediateFluentFuture(Optional.of(DATA.data3))).when(read)
                 .read(LogicalDatastoreType.CONFIGURATION, DATA.path);
-        doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(read)
+        doReturn(immediateFluentFuture(Optional.empty())).when(read)
                 .read(LogicalDatastoreType.OPERATIONAL, DATA.path);
         doReturn(DATA.path).when(context).getInstanceIdentifier();
         final String valueOfContent = RestconfDataServiceConstant.ReadData.ALL;
@@ -115,9 +114,9 @@ public class ReadDataTransactionUtilTest {
 
     @Test
     public void readAllHavingOnlyNonConfigTest() {
-        doReturn(Futures.immediateCheckedFuture(Optional.of(DATA.data2))).when(read)
+        doReturn(immediateFluentFuture(Optional.of(DATA.data2))).when(read)
                 .read(LogicalDatastoreType.OPERATIONAL, DATA.path2);
-        doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(read)
+        doReturn(immediateFluentFuture(Optional.empty())).when(read)
                 .read(LogicalDatastoreType.CONFIGURATION, DATA.path2);
         doReturn(DATA.path2).when(context).getInstanceIdentifier();
         final String valueOfContent = RestconfDataServiceConstant.ReadData.ALL;
@@ -128,7 +127,7 @@ public class ReadDataTransactionUtilTest {
 
     @Test
     public void readDataNonConfigTest() {
-        doReturn(Futures.immediateCheckedFuture(Optional.of(DATA.data2))).when(read)
+        doReturn(immediateFluentFuture(Optional.of(DATA.data2))).when(read)
                 .read(LogicalDatastoreType.OPERATIONAL, DATA.path2);
         doReturn(DATA.path2).when(context).getInstanceIdentifier();
         final String valueOfContent = RestconfDataServiceConstant.ReadData.NONCONFIG;
@@ -139,9 +138,9 @@ public class ReadDataTransactionUtilTest {
 
     @Test
     public void readContainerDataAllTest() {
-        doReturn(Futures.immediateCheckedFuture(Optional.of(DATA.data3))).when(read)
+        doReturn(immediateFluentFuture(Optional.of(DATA.data3))).when(read)
                 .read(LogicalDatastoreType.CONFIGURATION, DATA.path);
-        doReturn(Futures.immediateCheckedFuture(Optional.of(DATA.data4))).when(read)
+        doReturn(immediateFluentFuture(Optional.of(DATA.data4))).when(read)
                 .read(LogicalDatastoreType.OPERATIONAL, DATA.path);
         doReturn(DATA.path).when(context).getInstanceIdentifier();
         final String valueOfContent = RestconfDataServiceConstant.ReadData.ALL;
@@ -158,9 +157,9 @@ public class ReadDataTransactionUtilTest {
 
     @Test
     public void readContainerDataConfigNoValueOfContentTest() {
-        doReturn(Futures.immediateCheckedFuture(Optional.of(DATA.data3))).when(read)
+        doReturn(immediateFluentFuture(Optional.of(DATA.data3))).when(read)
                 .read(LogicalDatastoreType.CONFIGURATION, DATA.path);
-        doReturn(Futures.immediateCheckedFuture(Optional.of(DATA.data4))).when(read)
+        doReturn(immediateFluentFuture(Optional.of(DATA.data4))).when(read)
                 .read(LogicalDatastoreType.OPERATIONAL, DATA.path);
         doReturn(DATA.path).when(context).getInstanceIdentifier();
         final NormalizedNode normalizedNode = ReadDataTransactionUtil.readData(
@@ -176,9 +175,9 @@ public class ReadDataTransactionUtilTest {
 
     @Test
     public void readListDataAllTest() {
-        doReturn(Futures.immediateCheckedFuture(Optional.of(DATA.listData))).when(read)
+        doReturn(immediateFluentFuture(Optional.of(DATA.listData))).when(read)
                 .read(LogicalDatastoreType.OPERATIONAL, DATA.path3);
-        doReturn(Futures.immediateCheckedFuture(Optional.of(DATA.listData2))).when(read)
+        doReturn(immediateFluentFuture(Optional.of(DATA.listData2))).when(read)
                 .read(LogicalDatastoreType.CONFIGURATION, DATA.path3);
         doReturn(DATA.path3).when(context).getInstanceIdentifier();
         final String valueOfContent = RestconfDataServiceConstant.ReadData.ALL;
@@ -194,9 +193,9 @@ public class ReadDataTransactionUtilTest {
 
     @Test
     public void readOrderedListDataAllTest() {
-        doReturn(Futures.immediateCheckedFuture(Optional.of(DATA.orderedMapNode1))).when(read)
+        doReturn(immediateFluentFuture(Optional.of(DATA.orderedMapNode1))).when(read)
                 .read(LogicalDatastoreType.OPERATIONAL, DATA.path3);
-        doReturn(Futures.immediateCheckedFuture(Optional.of(DATA.orderedMapNode2))).when(read)
+        doReturn(immediateFluentFuture(Optional.of(DATA.orderedMapNode2))).when(read)
                 .read(LogicalDatastoreType.CONFIGURATION, DATA.path3);
         doReturn(DATA.path3).when(context).getInstanceIdentifier();
 
@@ -211,9 +210,9 @@ public class ReadDataTransactionUtilTest {
 
     @Test
     public void readUnkeyedListDataAllTest() {
-        doReturn(Futures.immediateCheckedFuture(Optional.of(DATA.unkeyedListNode1))).when(read)
+        doReturn(immediateFluentFuture(Optional.of(DATA.unkeyedListNode1))).when(read)
                 .read(LogicalDatastoreType.OPERATIONAL, DATA.path3);
-        doReturn(Futures.immediateCheckedFuture(Optional.of(DATA.unkeyedListNode2))).when(read)
+        doReturn(immediateFluentFuture(Optional.of(DATA.unkeyedListNode2))).when(read)
                 .read(LogicalDatastoreType.CONFIGURATION, DATA.path3);
         doReturn(DATA.path3).when(context).getInstanceIdentifier();
 
@@ -231,9 +230,9 @@ public class ReadDataTransactionUtilTest {
 
     @Test
     public void readLeafListDataAllTest() {
-        doReturn(Futures.immediateCheckedFuture(Optional.of(DATA.leafSetNode1))).when(read)
+        doReturn(immediateFluentFuture(Optional.of(DATA.leafSetNode1))).when(read)
                 .read(LogicalDatastoreType.OPERATIONAL, DATA.leafSetNodePath);
-        doReturn(Futures.immediateCheckedFuture(Optional.of(DATA.leafSetNode2))).when(read)
+        doReturn(immediateFluentFuture(Optional.of(DATA.leafSetNode2))).when(read)
                 .read(LogicalDatastoreType.CONFIGURATION, DATA.leafSetNodePath);
         doReturn(DATA.leafSetNodePath).when(context).getInstanceIdentifier();
 
@@ -249,9 +248,9 @@ public class ReadDataTransactionUtilTest {
 
     @Test
     public void readOrderedLeafListDataAllTest() {
-        doReturn(Futures.immediateCheckedFuture(Optional.of(DATA.orderedLeafSetNode1))).when(read)
+        doReturn(immediateFluentFuture(Optional.of(DATA.orderedLeafSetNode1))).when(read)
                 .read(LogicalDatastoreType.OPERATIONAL, DATA.leafSetNodePath);
-        doReturn(Futures.immediateCheckedFuture(Optional.of(DATA.orderedLeafSetNode2))).when(read)
+        doReturn(immediateFluentFuture(Optional.of(DATA.orderedLeafSetNode2))).when(read)
                 .read(LogicalDatastoreType.CONFIGURATION, DATA.leafSetNodePath);
         doReturn(DATA.leafSetNodePath).when(context).getInstanceIdentifier();
 
@@ -267,7 +266,7 @@ public class ReadDataTransactionUtilTest {
 
     @Test
     public void readDataWrongPathOrNoContentTest() {
-        doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(read)
+        doReturn(immediateFluentFuture(Optional.empty())).when(read)
                 .read(LogicalDatastoreType.CONFIGURATION, DATA.path2);
         doReturn(DATA.path2).when(context).getInstanceIdentifier();
         final String valueOfContent = RestconfDataServiceConstant.ReadData.CONFIG;
diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfInvokeOperationsUtilTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfInvokeOperationsUtilTest.java
index 5285d85cda..b9e6b67256 100644
--- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfInvokeOperationsUtilTest.java
+++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfInvokeOperationsUtilTest.java
@@ -5,29 +5,29 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.restconf.nb.rfc8040.rests.utils;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.mockito.Mockito.doReturn;
+import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFailedFluentFuture;
+import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFluentFuture;
 
-import com.google.common.base.Optional;
-import com.google.common.util.concurrent.Futures;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Optional;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint;
-import org.opendaylight.controller.md.sal.dom.api.DOMRpcException;
-import org.opendaylight.controller.md.sal.dom.api.DOMRpcImplementationNotAvailableException;
-import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult;
-import org.opendaylight.controller.md.sal.dom.api.DOMRpcService;
-import org.opendaylight.controller.md.sal.dom.spi.DefaultDOMRpcResult;
+import org.opendaylight.mdsal.dom.api.DOMMountPoint;
+import org.opendaylight.mdsal.dom.api.DOMRpcException;
+import org.opendaylight.mdsal.dom.api.DOMRpcImplementationNotAvailableException;
+import org.opendaylight.mdsal.dom.api.DOMRpcResult;
+import org.opendaylight.mdsal.dom.api.DOMRpcService;
+import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.nb.rfc8040.handlers.RpcServiceHandler;
 import org.opendaylight.yangtools.yang.common.RpcError;
@@ -51,7 +51,7 @@ public class RestconfInvokeOperationsUtilTest {
     @Test
     public void invokeRpcTest() {
         final DOMRpcResult mockResult = new DefaultDOMRpcResult(DATA.output, Collections.emptyList());
-        doReturn(Futures.immediateCheckedFuture(mockResult)).when(rpcService).invokeRpc(DATA.rpc, DATA.input);
+        doReturn(immediateFluentFuture(mockResult)).when(rpcService).invokeRpc(DATA.rpc, DATA.input);
         final DOMRpcResult rpcResult = RestconfInvokeOperationsUtil.invokeRpc(DATA.input, DATA.rpc, serviceHandler);
         Assert.assertTrue(rpcResult.getErrors().isEmpty());
         assertEquals(DATA.output, rpcResult.getResult());
@@ -61,7 +61,7 @@ public class RestconfInvokeOperationsUtilTest {
     public void invokeRpcErrorsAndCheckTestTest() {
         final DOMRpcException exception = new DOMRpcImplementationNotAvailableException(
                 "No implementation of RPC " + DATA.errorRpc.toString() + " available.");
-        doReturn(Futures.immediateFailedCheckedFuture(exception)).when(rpcService).invokeRpc(DATA.errorRpc, DATA.input);
+        doReturn(immediateFailedFluentFuture(exception)).when(rpcService).invokeRpc(DATA.errorRpc, DATA.input);
         final DOMRpcResult rpcResult =
                 RestconfInvokeOperationsUtil.invokeRpc(DATA.input, DATA.errorRpc, serviceHandler);
         assertNull(rpcResult.getResult());
@@ -76,9 +76,9 @@ public class RestconfInvokeOperationsUtilTest {
 
     @Test
     public void invokeRpcViaMountPointTest() {
-        doReturn(Optional.fromNullable(rpcService)).when(moutPoint).getService(DOMRpcService.class);
+        doReturn(Optional.ofNullable(rpcService)).when(moutPoint).getService(DOMRpcService.class);
         final DOMRpcResult mockResult = new DefaultDOMRpcResult(DATA.output, Collections.emptyList());
-        doReturn(Futures.immediateCheckedFuture(mockResult)).when(rpcService).invokeRpc(DATA.rpc, DATA.input);
+        doReturn(immediateFluentFuture(mockResult)).when(rpcService).invokeRpc(DATA.rpc, DATA.input);
         final DOMRpcResult rpcResult =
                 RestconfInvokeOperationsUtil.invokeRpcViaMountPoint(moutPoint, DATA.input, DATA.rpc);
         Assert.assertTrue(rpcResult.getErrors().isEmpty());
@@ -87,9 +87,9 @@ public class RestconfInvokeOperationsUtilTest {
 
     @Test(expected = RestconfDocumentedException.class)
     public void invokeRpcMissingMountPointServiceTest() {
-        doReturn(Optional.absent()).when(moutPoint).getService(DOMRpcService.class);
+        doReturn(Optional.empty()).when(moutPoint).getService(DOMRpcService.class);
         final DOMRpcResult mockResult = new DefaultDOMRpcResult(DATA.output, Collections.emptyList());
-        doReturn(Futures.immediateCheckedFuture(mockResult)).when(rpcService).invokeRpc(DATA.rpc, DATA.input);
+        doReturn(immediateFluentFuture(mockResult)).when(rpcService).invokeRpc(DATA.rpc, DATA.input);
         final DOMRpcResult rpcResult =
                 RestconfInvokeOperationsUtil.invokeRpcViaMountPoint(moutPoint, DATA.input, DATA.rpc);
     }
@@ -97,11 +97,10 @@ public class RestconfInvokeOperationsUtilTest {
     @Test
     public void checkResponseTest() {
         final DOMRpcResult mockResult = new DefaultDOMRpcResult(DATA.output, Collections.emptyList());
-        doReturn(Futures.immediateCheckedFuture(mockResult)).when(rpcService).invokeRpc(DATA.rpc, DATA.input);
+        doReturn(immediateFluentFuture(mockResult)).when(rpcService).invokeRpc(DATA.rpc, DATA.input);
         final DOMRpcResult rpcResult = RestconfInvokeOperationsUtil.invokeRpc(DATA.input, DATA.rpc, serviceHandler);
         Assert.assertTrue(rpcResult.getErrors().isEmpty());
         assertEquals(DATA.output, rpcResult.getResult());
         assertNotNull(RestconfInvokeOperationsUtil.checkResponse(rpcResult));
     }
-
 }
diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/services/simple/impl/RestconfOperationsServiceTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/services/simple/impl/RestconfOperationsServiceTest.java
index 70ac788844..6db9b954e9 100644
--- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/services/simple/impl/RestconfOperationsServiceTest.java
+++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/services/simple/impl/RestconfOperationsServiceTest.java
@@ -18,7 +18,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
+import org.opendaylight.mdsal.dom.api.DOMMountPointService;
 import org.opendaylight.restconf.common.context.NormalizedNodeContext;
 import org.opendaylight.restconf.nb.rfc8040.TestRestconfUtils;
 import org.opendaylight.restconf.nb.rfc8040.TestUtils;
diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/services/simple/impl/RestconfSchemaServiceTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/services/simple/impl/RestconfSchemaServiceTest.java
index 22278e304e..667925bfaf 100644
--- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/services/simple/impl/RestconfSchemaServiceTest.java
+++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/services/simple/impl/RestconfSchemaServiceTest.java
@@ -5,7 +5,6 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.restconf.nb.rfc8040.services.simple.impl;
 
 import static org.junit.Assert.assertEquals;
@@ -20,9 +19,9 @@ import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
-import org.opendaylight.controller.md.sal.dom.broker.impl.mount.DOMMountPointServiceImpl;
+import org.opendaylight.mdsal.dom.api.DOMMountPointService;
 import org.opendaylight.mdsal.dom.api.DOMYangTextSourceProvider;
+import org.opendaylight.mdsal.dom.broker.DOMMountPointServiceImpl;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.common.errors.RestconfError;
 import org.opendaylight.restconf.common.schema.SchemaExportContext;
diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/ListenerAdapterTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/ListenerAdapterTest.java
index a1cb417bdf..4021be2c8d 100644
--- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/ListenerAdapterTest.java
+++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/ListenerAdapterTest.java
@@ -5,7 +5,6 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.restconf.nb.rfc8040.streams.listeners;
 
 import static java.time.Instant.EPOCH;
@@ -25,13 +24,13 @@ import org.json.JSONObject;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.controller.md.sal.binding.test.AbstractConcurrentDataBrokerTest;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeService;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeIdentifier;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.WriteTransaction;
+import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractConcurrentDataBrokerTest;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+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.DOMSchemaService;
 import org.opendaylight.restconf.nb.rfc8040.handlers.SchemaContextHandler;
 import org.opendaylight.restconf.nb.rfc8040.handlers.TransactionChainHandler;
@@ -134,8 +133,8 @@ public class ListenerAdapterTest extends AbstractConcurrentDataBrokerTest {
                                         NotificationOutputTypeGrouping.NotificationOutputType.JSON, true);
         adapter.setCloseVars(transactionChainHandler, schemaContextHandler);
 
-        DOMDataTreeChangeService changeService = (DOMDataTreeChangeService)
-                domDataBroker.getSupportedExtensions().get(DOMDataTreeChangeService.class);
+        DOMDataTreeChangeService changeService = domDataBroker.getExtensions()
+                .getInstance(DOMDataTreeChangeService.class);
         DOMDataTreeIdentifier root = new DOMDataTreeIdentifier(LogicalDatastoreType.CONFIGURATION, PATCH_CONT_YIID);
         changeService.registerDataTreeChangeListener(root, adapter);
 
@@ -144,18 +143,18 @@ public class ListenerAdapterTest extends AbstractConcurrentDataBrokerTest {
         InstanceIdentifier iid = InstanceIdentifier.create(PatchCont.class)
                 .child(MyList1.class, new MyList1Key("Althea"));
         writeTransaction.put(LogicalDatastoreType.CONFIGURATION, iid, builder.build(), true);
-        writeTransaction.submit();
+        writeTransaction.commit();
         adapter.assertGot(getNotifJson(JSON_NOTIF_LEAVES_CREATE));
 
         writeTransaction = dataBroker.newWriteOnlyTransaction();
         builder = new MyList1Builder().withKey(new MyList1Key("Althea")).setMyLeaf12("Bertha");
         writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, iid, builder.build(), true);
-        writeTransaction.submit();
+        writeTransaction.commit();
         adapter.assertGot(getNotifJson(JSON_NOTIF_LEAVES_UPDATE));
 
         writeTransaction = dataBroker.newWriteOnlyTransaction();
         writeTransaction.delete(LogicalDatastoreType.CONFIGURATION, iid);
-        writeTransaction.submit();
+        writeTransaction.commit();
         adapter.assertGot(getNotifJson(JSON_NOTIF_LEAVES_DEL));
     }
 
@@ -165,8 +164,8 @@ public class ListenerAdapterTest extends AbstractConcurrentDataBrokerTest {
                 NotificationOutputTypeGrouping.NotificationOutputType.JSON, false);
         adapter.setCloseVars(transactionChainHandler, schemaContextHandler);
 
-        DOMDataTreeChangeService changeService = (DOMDataTreeChangeService)
-                domDataBroker.getSupportedExtensions().get(DOMDataTreeChangeService.class);
+        DOMDataTreeChangeService changeService = domDataBroker.getExtensions()
+                .getInstance(DOMDataTreeChangeService.class);
         DOMDataTreeIdentifier root = new DOMDataTreeIdentifier(LogicalDatastoreType.CONFIGURATION, PATCH_CONT_YIID);
         changeService.registerDataTreeChangeListener(root, adapter);
 
@@ -175,18 +174,18 @@ public class ListenerAdapterTest extends AbstractConcurrentDataBrokerTest {
         InstanceIdentifier iid = InstanceIdentifier.create(PatchCont.class)
                 .child(MyList1.class, new MyList1Key("Althea"));
         writeTransaction.put(LogicalDatastoreType.CONFIGURATION, iid, builder.build(), true);
-        writeTransaction.submit();
+        writeTransaction.commit();
         adapter.assertGot(getNotifJson(JSON_NOTIF_CREATE));
 
         writeTransaction = dataBroker.newWriteOnlyTransaction();
         builder = new MyList1Builder().withKey(new MyList1Key("Althea")).setMyLeaf12("Bertha");
         writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, iid, builder.build(), true);
-        writeTransaction.submit();
+        writeTransaction.commit();
         adapter.assertGot(getNotifJson(JSON_NOTIF_UPDATE));
 
         writeTransaction = dataBroker.newWriteOnlyTransaction();
         writeTransaction.delete(LogicalDatastoreType.CONFIGURATION, iid);
-        writeTransaction.submit();
+        writeTransaction.commit();
         adapter.assertGot(getNotifJson(JSON_NOTIF_DEL));
     }
 }
diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/NotificationListenerTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/NotificationListenerTest.java
index 62434c8a16..0fb8f3b4ab 100644
--- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/NotificationListenerTest.java
+++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/streams/listeners/NotificationListenerTest.java
@@ -24,7 +24,7 @@ import java.util.Optional;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.MockitoAnnotations;
-import org.opendaylight.controller.md.sal.dom.api.DOMNotification;
+import org.opendaylight.mdsal.dom.api.DOMNotification;
 import org.opendaylight.restconf.nb.rfc8040.TestUtils;
 import org.opendaylight.yang.gen.v1.urn.sal.restconf.event.subscription.rev140708.NotificationOutputTypeGrouping.NotificationOutputType;
 import org.opendaylight.yangtools.util.SingletonSet;
diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/ParserIdentifierTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/ParserIdentifierTest.java
index 4d29d7eca7..c2158038b1 100644
--- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/ParserIdentifierTest.java
+++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/ParserIdentifierTest.java
@@ -5,7 +5,6 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.restconf.nb.rfc8040.utils.parser;
 
 import static org.junit.Assert.assertEquals;
@@ -14,19 +13,19 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.fail;
 import static org.mockito.Mockito.when;
 
-import com.google.common.base.Optional;
 import java.util.Map.Entry;
+import java.util.Optional;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
-import org.opendaylight.controller.md.sal.dom.broker.impl.mount.DOMMountPointServiceImpl;
+import org.opendaylight.mdsal.dom.api.DOMMountPoint;
+import org.opendaylight.mdsal.dom.api.DOMMountPointService;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
 import org.opendaylight.mdsal.dom.api.DOMYangTextSourceProvider;
+import org.opendaylight.mdsal.dom.broker.DOMMountPointServiceImpl;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.common.errors.RestconfError;
@@ -142,7 +141,7 @@ public class ParserIdentifierTest {
     @Test
     public void toInstanceIdentifierTest() {
         final InstanceIdentifierContext context = ParserIdentifier.toInstanceIdentifier(
-                TEST_IDENT, this.schemaContext, Optional.absent());
+                TEST_IDENT, this.schemaContext, Optional.empty());
 
         assertEquals("Returned not expected identifier",
                 TEST_IDENT_RESULT, context .getInstanceIdentifier().toString());
@@ -155,7 +154,7 @@ public class ParserIdentifierTest {
     @Test
     public void toInstanceIdentifierOtherModulesTest() {
         final InstanceIdentifierContext context = ParserIdentifier.toInstanceIdentifier(
-                TEST_IDENT_OTHERS, this.schemaContext, Optional.absent());
+                TEST_IDENT_OTHERS, this.schemaContext, Optional.empty());
 
         assertEquals("Returned not expected identifier",
                 TEST_IDENT_OTHERS_RESULT, context.getInstanceIdentifier().toString());
@@ -187,7 +186,7 @@ public class ParserIdentifierTest {
     @Test
     public void toInstanceIdentifierNullIdentifierTest() {
         final InstanceIdentifierContext context = ParserIdentifier.toInstanceIdentifier(
-                null, this.schemaContext, Optional.absent());
+                null, this.schemaContext, Optional.empty());
         assertEquals("Returned not expected identifier",
                 YangInstanceIdentifier.EMPTY, context.getInstanceIdentifier());
     }
@@ -199,7 +198,7 @@ public class ParserIdentifierTest {
     @Test
     public void toInstanceIdentifierNullSchemaContextNegativeTest() {
         this.thrown.expect(NullPointerException.class);
-        ParserIdentifier.toInstanceIdentifier(TEST_IDENT, null, Optional.absent());
+        ParserIdentifier.toInstanceIdentifier(TEST_IDENT, null, Optional.empty());
     }
 
     /**
@@ -208,7 +207,7 @@ public class ParserIdentifierTest {
     @Test
     public void toInstanceIdentifierEmptyIdentifierTest() {
         final InstanceIdentifierContext context = ParserIdentifier.toInstanceIdentifier(
-                "", this.schemaContext, Optional.absent());
+                "", this.schemaContext, Optional.empty());
         assertEquals("Returned not expected identifier",
                 YangInstanceIdentifier.EMPTY, context.getInstanceIdentifier());
     }
@@ -219,7 +218,7 @@ public class ParserIdentifierTest {
     @Test
     public void toInstanceIdentifierInvalidIdentifierNegativeTest() {
         this.thrown.expect(IllegalArgumentException.class);
-        ParserIdentifier.toInstanceIdentifier(INVALID_TEST_IDENT, this.schemaContext, Optional.absent());
+        ParserIdentifier.toInstanceIdentifier(INVALID_TEST_IDENT, this.schemaContext, Optional.empty());
     }
 
     /**
@@ -262,7 +261,7 @@ public class ParserIdentifierTest {
     @Test
     public void toInstanceIdentifierMissingMountPointServiceNegativeTest() {
         try {
-            ParserIdentifier.toInstanceIdentifier(RestconfConstants.MOUNT, this.schemaContext, Optional.absent());
+            ParserIdentifier.toInstanceIdentifier(RestconfConstants.MOUNT, this.schemaContext, Optional.empty());
             fail("Test should fail due to absent mount point service");
         } catch (final RestconfDocumentedException e) {
             assertEquals("Not expected error type",
@@ -661,7 +660,7 @@ public class ParserIdentifierTest {
     @Test
     public void invokeRpcTest() {
         final InstanceIdentifierContext result = ParserIdentifier.toInstanceIdentifier(
-                INVOKE_RPC, this.schemaContext, Optional.absent());
+                INVOKE_RPC, this.schemaContext, Optional.empty());
 
         // RPC schema node
         final QName rpcQName = result.getSchemaNode().getQName();