X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-netconf-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fconnect%2Fnetconf%2Fsal%2Ftx%2FAbstractWriteTx.java;h=f896559c1c8bc33ef46158c84c4ed8512bedb783;hp=165d9c452d201b5a123da1869c6eaf3a9ace1c85;hb=354897d76dbaa234b92d61591b5bbeaac220c3b9;hpb=294e250fa1c11f36a6ddb9470f985df978039355 diff --git a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/sal/tx/AbstractWriteTx.java b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/sal/tx/AbstractWriteTx.java index 165d9c452d..f896559c1c 100644 --- a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/sal/tx/AbstractWriteTx.java +++ b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/sal/tx/AbstractWriteTx.java @@ -1,7 +1,5 @@ package org.opendaylight.controller.sal.connect.netconf.sal.tx; -import static org.opendaylight.controller.sal.connect.netconf.util.NetconfMessageTransformUtil.createEditConfigStructure; - import com.google.common.base.Function; import com.google.common.base.Optional; import com.google.common.base.Preconditions; @@ -11,34 +9,38 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import org.opendaylight.controller.md.sal.common.api.TransactionStatus; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizer; import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; +import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult; import org.opendaylight.controller.netconf.api.NetconfDocumentedException; -import org.opendaylight.controller.sal.connect.netconf.listener.NetconfSessionCapabilities; import org.opendaylight.controller.sal.connect.netconf.util.NetconfBaseOps; import org.opendaylight.controller.sal.connect.util.RemoteDeviceId; import org.opendaylight.yangtools.yang.common.RpcResult; -import org.opendaylight.yangtools.yang.data.api.CompositeNode; import org.opendaylight.yangtools.yang.data.api.ModifyAction; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; public abstract class AbstractWriteTx implements DOMDataWriteTransaction { + + private final long defaultRequestTimeoutMillis; protected final RemoteDeviceId id; protected final NetconfBaseOps netOps; - protected final DataNormalizer normalizer; - protected final NetconfSessionCapabilities netconfSessionPreferences; + protected final boolean rollbackSupport; // Allow commit to be called only once protected boolean finished = false; - public AbstractWriteTx(final NetconfBaseOps netOps, final RemoteDeviceId id, final DataNormalizer normalizer, final NetconfSessionCapabilities netconfSessionPreferences) { + public AbstractWriteTx(final long requestTimeoutMillis, final NetconfBaseOps netOps, final RemoteDeviceId id, final boolean rollbackSupport) { + this.defaultRequestTimeoutMillis = requestTimeoutMillis; this.netOps = netOps; this.id = id; - this.normalizer = normalizer; - this.netconfSessionPreferences = netconfSessionPreferences; + this.rollbackSupport = rollbackSupport; init(); } + static boolean isSuccess(final DOMRpcResult result) { + return result.getErrors().isEmpty(); + } + protected void checkNotFinished() { Preconditions.checkState(!isFinished(), "%s: Transaction %s already finished", id, getIdentifier()); } @@ -47,10 +49,10 @@ public abstract class AbstractWriteTx implements DOMDataWriteTransaction { return finished; } - protected void invokeBlocking(final String msg, final Function>> op) throws NetconfDocumentedException { + protected void invokeBlocking(final String msg, final Function> op) throws NetconfDocumentedException { try { - final RpcResult compositeNodeRpcResult = op.apply(netOps).get(1L, TimeUnit.MINUTES); - if(compositeNodeRpcResult.isSuccessful() == false) { + final DOMRpcResult compositeNodeRpcResult = op.apply(netOps).get(defaultRequestTimeoutMillis, TimeUnit.MILLISECONDS); + if(isSuccess(compositeNodeRpcResult) == false) { throw new NetconfDocumentedException(id + ": " + msg + " failed: " + compositeNodeRpcResult.getErrors(), NetconfDocumentedException.ErrorType.application, NetconfDocumentedException.ErrorTag.operation_failed, NetconfDocumentedException.ErrorSeverity.warning); } @@ -88,10 +90,8 @@ public abstract class AbstractWriteTx implements DOMDataWriteTransaction { checkEditable(store); try { - final YangInstanceIdentifier legacyPath = ReadOnlyTx.toLegacyPath(normalizer, path, id); - final CompositeNode legacyData = normalizer.toLegacy(path, data); editConfig( - createEditConfigStructure(legacyPath, Optional.of(ModifyAction.REPLACE), Optional.fromNullable(legacyData)), Optional.of(ModifyAction.NONE)); + netOps.createEditConfigStrcture(Optional.>fromNullable(data), Optional.of(ModifyAction.REPLACE), path), Optional.of(ModifyAction.NONE)); } catch (final NetconfDocumentedException e) { handleEditException(path, data, e, "putting"); } @@ -105,10 +105,8 @@ public abstract class AbstractWriteTx implements DOMDataWriteTransaction { checkEditable(store); try { - final YangInstanceIdentifier legacyPath = ReadOnlyTx.toLegacyPath(normalizer, path, id); - final CompositeNode legacyData = normalizer.toLegacy(path, data); editConfig( - createEditConfigStructure(legacyPath, Optional.absent(), Optional.fromNullable(legacyData)), Optional.absent()); + netOps.createEditConfigStrcture(Optional.>fromNullable(data), Optional.absent(), path), Optional.absent()); } catch (final NetconfDocumentedException e) { handleEditException(path, data, e, "merge"); } @@ -119,9 +117,8 @@ public abstract class AbstractWriteTx implements DOMDataWriteTransaction { checkEditable(store); try { - editConfig(createEditConfigStructure( - ReadOnlyTx.toLegacyPath(normalizer, path, id), Optional.of(ModifyAction.DELETE), - Optional.absent()), Optional.of(ModifyAction.NONE)); + editConfig( + netOps.createEditConfigStrcture(Optional.>absent(), Optional.of(ModifyAction.DELETE), path), Optional.of(ModifyAction.NONE)); } catch (final NetconfDocumentedException e) { handleDeleteException(path, e); } @@ -142,5 +139,5 @@ public abstract class AbstractWriteTx implements DOMDataWriteTransaction { Preconditions.checkArgument(store == LogicalDatastoreType.CONFIGURATION, "Can edit only configuration data, not %s", store); } - protected abstract void editConfig(CompositeNode editStructure, Optional defaultOperation) throws NetconfDocumentedException; + protected abstract void editConfig(DataContainerChild editStructure, Optional defaultOperation) throws NetconfDocumentedException; }