diff options
author | Michal Cmarada <mcmarada@cisco.com> | 2018-10-08 09:51:04 +0200 |
---|---|---|
committer | Michal Cmarada <mcmarada@cisco.com> | 2018-10-08 09:51:04 +0200 |
commit | 819618ee3920c8277509bc2add888328c722cf10 (patch) | |
tree | 35e6a4d9e85d66e862a8093b99ec0d78ad0ac747 /infra/data-impl/src/main/java/io/fd/honeycomb/data/impl/WriteTransaction.java | |
parent | 556a0f59abc9b09005d40945bc20948d69e4f98e (diff) |
HONEYCOMB-431: add support for <validate> RPC
This patch introduces ValidableTransaction interface,
used by Honeycomb's DataBroker to implement
Netconf's DOMDataTransactionValidator.
WriteTransaction implements ValidableTransaction
by delegating validate to DataModification
for both config and operational modifications.
This patch requires ODL Fluorine (HONEYCOMB-433),
which brings support for <candidate> validation to Netconf.
Alternatively custom ODL Oxygen build
with patches from stable/oxygen/oxygen-hc-improvements.
Change-Id: Ic3eaffaef0314d22da3ea37f9416f18ccb0b99ae
Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
Signed-off-by: Michal Cmarada <mcmarada@cisco.com>
Diffstat (limited to 'infra/data-impl/src/main/java/io/fd/honeycomb/data/impl/WriteTransaction.java')
-rw-r--r-- | infra/data-impl/src/main/java/io/fd/honeycomb/data/impl/WriteTransaction.java | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/infra/data-impl/src/main/java/io/fd/honeycomb/data/impl/WriteTransaction.java b/infra/data-impl/src/main/java/io/fd/honeycomb/data/impl/WriteTransaction.java index b2ed5265f..91b48cc10 100644 --- a/infra/data-impl/src/main/java/io/fd/honeycomb/data/impl/WriteTransaction.java +++ b/infra/data-impl/src/main/java/io/fd/honeycomb/data/impl/WriteTransaction.java @@ -32,7 +32,7 @@ import javax.annotation.concurrent.NotThreadSafe; import org.eclipse.jdt.annotation.NonNull; 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.netconf.mdsal.connector.DOMDataTransactionValidator; import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -40,7 +40,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; @NotThreadSafe -final class WriteTransaction implements DOMDataWriteTransaction { +final class WriteTransaction implements ValidableTransaction { private static final Logger LOG = LoggerFactory.getLogger(WriteTransaction.class); @@ -120,7 +120,7 @@ final class WriteTransaction implements DOMDataWriteTransaction { checkIsNew(); try { - validateAndCommit(); + doCommit(); } catch (Exception e) { status = TransactionStatus.FAILED; LOG.error("Submit failed", e); @@ -130,16 +130,8 @@ final class WriteTransaction implements DOMDataWriteTransaction { return Futures.immediateCheckedFuture(null); } - private void validateAndCommit() throws TranslationException { + private void doCommit() throws TranslationException { status = TransactionStatus.SUBMITED; - // Validate first to catch any issues before attempting commit - if (configModification != null) { - configModification.validate(); - } - if (operationalModification != null) { - operationalModification.validate(); - } - if (configModification != null) { configModification.commit(); } @@ -155,7 +147,7 @@ final class WriteTransaction implements DOMDataWriteTransaction { LOG.trace("WriteTransaction.commit()"); checkIsNew(); try { - validateAndCommit(); + doCommit(); } catch (Exception e) { status = TransactionStatus.FAILED; LOG.error("Submit failed", e); @@ -171,6 +163,21 @@ final class WriteTransaction implements DOMDataWriteTransaction { return this; } + @Override + public CheckedFuture<Void, DOMDataTransactionValidator.ValidationFailedException> validate() { + try { + if (configModification != null) { + configModification.validate(); + } + if (operationalModification != null) { + operationalModification.validate(); + } + } catch (Exception e) { + return Futures.immediateFailedCheckedFuture(new DOMDataTransactionValidator.ValidationFailedException(e.getMessage(), e.getCause())); + } + return Futures.immediateCheckedFuture(null); + } + @Nonnull static WriteTransaction createOperationalOnly(@Nonnull final DataModification operationalData) { @@ -188,7 +195,7 @@ final class WriteTransaction implements DOMDataWriteTransaction { return new WriteTransaction(requireNonNull(configData), requireNonNull(operationalData)); } - // TODO consider removing because original class was deprecated and removed, this is just temporary fix. + // TODO consider refactor based on implemented contract. enum TransactionStatus { /** * The transaction has been freshly allocated. The user is still accessing |