diff options
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 |