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%2FNetconfDeviceTwoPhaseCommitTransaction.java;h=34cd9aa47b7f82702a797ddc4bea96ed34f28b7d;hb=761a2b50e10129c5f6ccb59df940b5dd39d6e424;hp=5f14c264edb4cac6ab3dc1b81ccd8f2b1744a598;hpb=26cb66156fe0e1f533d0e6a7dd39040c7423999f;p=controller.git diff --git a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfDeviceTwoPhaseCommitTransaction.java b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfDeviceTwoPhaseCommitTransaction.java index 5f14c264ed..34cd9aa47b 100644 --- a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfDeviceTwoPhaseCommitTransaction.java +++ b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfDeviceTwoPhaseCommitTransaction.java @@ -11,9 +11,11 @@ import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.NET import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.NETCONF_COMMIT_QNAME; import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.NETCONF_CONFIG_QNAME; import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.NETCONF_EDIT_CONFIG_QNAME; +import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.NETCONF_ERROR_OPTION_QNAME; import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.NETCONF_OPERATION_QNAME; import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.NETCONF_RUNNING_QNAME; import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.NETCONF_TARGET_QNAME; +import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.ROLLBACK_ON_ERROR_OPTION; import java.util.Collection; import java.util.Collections; @@ -47,13 +49,15 @@ class NetconfDeviceTwoPhaseCommitTransaction implements DataCommitTransaction modification; private final NetconfDevice device; private final boolean candidateSupported; + private final boolean rollbackSupported; - public NetconfDeviceTwoPhaseCommitTransaction(NetconfDevice device, - DataModification modification, - boolean candidateSupported) { + public NetconfDeviceTwoPhaseCommitTransaction(final NetconfDevice device, + final DataModification modification, + final boolean candidateSupported, final boolean rollbackOnErrorSupported) { this.device = Preconditions.checkNotNull(device); this.modification = Preconditions.checkNotNull(modification); this.candidateSupported = candidateSupported; + this.rollbackSupported = rollbackOnErrorSupported; } void prepare() throws InterruptedException, ExecutionException { @@ -65,15 +69,15 @@ class NetconfDeviceTwoPhaseCommitTransaction implements DataCommitTransactionabsent(), Optional.of(value))); } - private void sendDelete(InstanceIdentifier toDelete) throws InterruptedException, ExecutionException { + private void sendDelete(final InstanceIdentifier toDelete) throws InterruptedException, ExecutionException { sendEditRpc(createEditStructure(toDelete, Optional.of("delete"), Optional. absent())); } - private void sendEditRpc(CompositeNode editStructure) throws InterruptedException, ExecutionException { + private void sendEditRpc(final CompositeNode editStructure) throws InterruptedException, ExecutionException { CompositeNodeBuilder builder = configurationRpcBuilder(); builder.setQName(NETCONF_EDIT_CONFIG_QNAME); builder.add(editStructure); @@ -91,13 +95,20 @@ class NetconfDeviceTwoPhaseCommitTransaction implements DataCommitTransaction>of()); } + Node targetWrapperNode = ImmutableCompositeNode.create(NETCONF_TARGET_QNAME, ImmutableList.>of(targetNode)); + + if(rollbackSupported) { + LOG.debug("Rollback-on-error supported, setting {} to {}", NETCONF_ERROR_OPTION_QNAME, ROLLBACK_ON_ERROR_OPTION); + ret.addLeaf(NETCONF_ERROR_OPTION_QNAME, ROLLBACK_ON_ERROR_OPTION); + } + ret.add(targetWrapperNode); return ret; } - private CompositeNode createEditStructure(InstanceIdentifier dataPath, Optional operation, - Optional lastChildOverride) { + private CompositeNode createEditStructure(final InstanceIdentifier dataPath, final Optional operation, + final Optional lastChildOverride) { List path = dataPath.getPath(); List reversed = Lists.reverse(path); CompositeNode previous = null; @@ -118,7 +129,7 @@ class NetconfDeviceTwoPhaseCommitTransaction implements DataCommitTransaction> children = lastChildOverride.get().getChildren(); + List> children = lastChildOverride.get().getValue(); for(Node child : children) { if(!predicates.containsKey(child.getKey())) { builder.add(child);