X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-netconf-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fconnect%2Fnetconf%2Fsal%2FNetconfDeviceDatastoreAdapter.java;h=48b41da3fa83d617211f1b7850a8380708377a4d;hb=d8d8f731bbe6c58fcbd0e616734e2e230aaf4ab4;hp=04d5e5e449e1f00305a8be995b3861d7ef24e47b;hpb=d255fdd0b14660a22ff63771d954ac3fe5d0cb7e;p=controller.git diff --git a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/sal/NetconfDeviceDatastoreAdapter.java b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/sal/NetconfDeviceDatastoreAdapter.java index 04d5e5e449..48b41da3fa 100644 --- a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/sal/NetconfDeviceDatastoreAdapter.java +++ b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/sal/NetconfDeviceDatastoreAdapter.java @@ -16,10 +16,14 @@ import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import java.util.Set; +import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; +import org.opendaylight.controller.md.sal.common.api.data.AsyncTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +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.common.api.data.TransactionCommitFailedException; import org.opendaylight.controller.sal.connect.util.RemoteDeviceId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; @@ -37,17 +41,31 @@ import org.slf4j.LoggerFactory; * Asynchronous (Binding-aware) adapter over datastore subtree for netconf device. * * All data changes are submitted to an ExecutorService to avoid Thread blocking while sal is waiting for schema. + * + * @deprecated Data is pushed into Topology instead if Inventory model */ +@Deprecated final class NetconfDeviceDatastoreAdapter implements AutoCloseable { private static final Logger logger = LoggerFactory.getLogger(NetconfDeviceDatastoreAdapter.class); private final RemoteDeviceId id; - private final DataBroker dataService; + private final BindingTransactionChain txChain; NetconfDeviceDatastoreAdapter(final RemoteDeviceId deviceId, final DataBroker dataService) { this.id = Preconditions.checkNotNull(deviceId); - this.dataService = Preconditions.checkNotNull(dataService); + this.txChain = Preconditions.checkNotNull(dataService).createTransactionChain(new TransactionChainListener() { + @Override + public void onTransactionChainFailed(TransactionChain chain, AsyncTransaction transaction, Throwable cause) { + logger.error("{}: TransactionChain({}) {} FAILED!", id, chain, transaction.getIdentifier(), cause); + throw new IllegalStateException(id + " TransactionChain(" + chain + ") not committed correctly", cause); + } + + @Override + public void onTransactionChainSuccessful(TransactionChain chain) { + logger.trace("{}: TransactionChain({}) {} SUCCESSFUL", id, chain); + } + }); initDeviceData(); } @@ -56,16 +74,16 @@ final class NetconfDeviceDatastoreAdapter implements AutoCloseable { final org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node data = buildDataForDeviceState( up, capabilities, id); - final ReadWriteTransaction transaction = dataService.newReadWriteTransaction(); + final ReadWriteTransaction transaction = txChain.newReadWriteTransaction(); logger.trace("{}: Update device state transaction {} merging operational data started.", id, transaction.getIdentifier()); - transaction.merge(LogicalDatastoreType.OPERATIONAL, id.getBindingPath(), data); + transaction.put(LogicalDatastoreType.OPERATIONAL, id.getBindingPath(), data); logger.trace("{}: Update device state transaction {} merging operational data ended.", id, transaction.getIdentifier()); commitTransaction(transaction, "update"); } private void removeDeviceConfigAndState() { - final WriteTransaction transaction = dataService.newWriteOnlyTransaction(); + final WriteTransaction transaction = txChain.newWriteOnlyTransaction(); logger.trace("{}: Close device state transaction {} removing all data started.", id, transaction.getIdentifier()); transaction.delete(LogicalDatastoreType.CONFIGURATION, id.getBindingPath()); transaction.delete(LogicalDatastoreType.OPERATIONAL, id.getBindingPath()); @@ -75,7 +93,7 @@ final class NetconfDeviceDatastoreAdapter implements AutoCloseable { } private void initDeviceData() { - final WriteTransaction transaction = dataService.newWriteOnlyTransaction(); + final WriteTransaction transaction = txChain.newWriteOnlyTransaction(); createNodesListIfNotPresent(transaction); @@ -83,11 +101,11 @@ final class NetconfDeviceDatastoreAdapter implements AutoCloseable { final Node nodeWithId = getNodeWithId(id); logger.trace("{}: Init device state transaction {} putting if absent operational data started.", id, transaction.getIdentifier()); - transaction.merge(LogicalDatastoreType.OPERATIONAL, path, nodeWithId); + transaction.put(LogicalDatastoreType.OPERATIONAL, path, nodeWithId); logger.trace("{}: Init device state transaction {} putting operational data ended.", id, transaction.getIdentifier()); logger.trace("{}: Init device state transaction {} putting if absent config data started.", id, transaction.getIdentifier()); - transaction.merge(LogicalDatastoreType.CONFIGURATION, path, nodeWithId); + transaction.put(LogicalDatastoreType.CONFIGURATION, path, nodeWithId); logger.trace("{}: Init device state transaction {} putting config data ended.", id, transaction.getIdentifier()); commitTransaction(transaction, "init"); @@ -123,6 +141,7 @@ final class NetconfDeviceDatastoreAdapter implements AutoCloseable { @Override public void close() throws Exception { removeDeviceConfigAndState(); + txChain.close(); } public static org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node buildDataForDeviceState(