From 556a0f59abc9b09005d40945bc20948d69e4f98e Mon Sep 17 00:00:00 2001 From: Michal Cmarada Date: Tue, 25 Sep 2018 11:15:35 +0200 Subject: Bump ODL dependencies to Fluorine (HONEYCOMB-433) Change-Id: I142ebd2899272feff00abe7d4bae708f093ee3ec Signed-off-by: Michal Cmarada --- .../fd/honeycomb/data/impl/WriteTransaction.java | 98 ++++++++++++++++------ 1 file changed, 71 insertions(+), 27 deletions(-) (limited to 'infra/data-impl/src/main/java/io/fd/honeycomb/data/impl/WriteTransaction.java') 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 cd47c65db..b2ed5265f 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 @@ -18,26 +18,22 @@ package io.fd.honeycomb.data.impl; import static com.google.common.base.Preconditions.checkArgument; import static java.util.Objects.requireNonNull; -import static org.opendaylight.controller.md.sal.common.api.TransactionStatus.CANCELED; -import static org.opendaylight.controller.md.sal.common.api.TransactionStatus.COMMITED; -import static org.opendaylight.controller.md.sal.common.api.TransactionStatus.FAILED; -import static org.opendaylight.controller.md.sal.common.api.TransactionStatus.NEW; -import static org.opendaylight.controller.md.sal.common.api.TransactionStatus.SUBMITED; import com.google.common.base.Preconditions; import com.google.common.util.concurrent.CheckedFuture; +import com.google.common.util.concurrent.FluentFuture; import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; import io.fd.honeycomb.data.DataModification; +import io.fd.honeycomb.translate.TranslationException; import java.util.function.Consumer; import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.annotation.concurrent.NotThreadSafe; -import org.opendaylight.controller.md.sal.common.api.TransactionStatus; +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.yangtools.yang.common.RpcResult; +import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.slf4j.Logger; @@ -52,7 +48,7 @@ final class WriteTransaction implements DOMDataWriteTransaction { private DataModification operationalModification; @Nullable private DataModification configModification; - private TransactionStatus status = NEW; + private TransactionStatus status = TransactionStatus.NEW; private WriteTransaction(@Nullable final DataModification configModification, @Nullable final DataModification operationalModification) { @@ -61,7 +57,7 @@ final class WriteTransaction implements DOMDataWriteTransaction { } private void checkIsNew() { - Preconditions.checkState(status == NEW, "Transaction was submitted or canceled"); + Preconditions.checkState(status == TransactionStatus.NEW, "Transaction was submitted or canceled"); } @Override @@ -98,14 +94,14 @@ final class WriteTransaction implements DOMDataWriteTransaction { @Override public boolean cancel() { - if (status != NEW) { + if (status != TransactionStatus.NEW) { // only NEW transactions can be cancelled return false; } else { if (configModification != null) { configModification.close(); } - status = CANCELED; + status = TransactionStatus.CANCELED; return true; } } @@ -117,35 +113,57 @@ final class WriteTransaction implements DOMDataWriteTransaction { handleOperation(store, (modification) -> modification.delete(path)); } + @Deprecated @Override public CheckedFuture submit() { LOG.trace("WriteTransaction.submit()"); checkIsNew(); try { - status = SUBMITED; - - if(configModification != null) { - configModification.commit(); - } - if(operationalModification != null) { - operationalModification.commit(); - } - - status = COMMITED; + validateAndCommit(); } catch (Exception e) { - status = FAILED; + status = TransactionStatus.FAILED; LOG.error("Submit failed", e); return Futures.immediateFailedCheckedFuture( - new TransactionCommitFailedException("Failed to validate DataTreeModification", e)); + new TransactionCommitFailedException("Failed to validate DataTreeModification", e)); } return Futures.immediateCheckedFuture(null); } + private void validateAndCommit() 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(); + } + if (operationalModification != null) { + operationalModification.commit(); + } + + status = TransactionStatus.COMMITED; + } + @Override - @Deprecated - public ListenableFuture> commit() { - throw new UnsupportedOperationException("deprecated"); + public @NonNull FluentFuture commit() { + LOG.trace("WriteTransaction.commit()"); + checkIsNew(); + try { + validateAndCommit(); + } catch (Exception e) { + status = TransactionStatus.FAILED; + LOG.error("Submit failed", e); + return FluentFuture + .from(Futures.immediateFailedFuture( + new TransactionCommitFailedException("Failed to validate DataTreeModification", e))); + } + return FluentFuture.from(Futures.immediateFuture(null)); } @Override @@ -169,4 +187,30 @@ final class WriteTransaction implements DOMDataWriteTransaction { @Nonnull final DataModification operationalData) { return new WriteTransaction(requireNonNull(configData), requireNonNull(operationalData)); } + + // TODO consider removing because original class was deprecated and removed, this is just temporary fix. + enum TransactionStatus { + /** + * The transaction has been freshly allocated. The user is still accessing + * it and it has not been sealed. + */ + NEW, + /** + * The transaction has been completed by the user and sealed. It is currently + * awaiting execution. + */ + SUBMITED, + /** + * The transaction has been successfully committed to backing store. + */ + COMMITED, + /** + * The transaction has failed to commit due to some underlying issue. + */ + FAILED, + /** + * Currently unused. + */ + CANCELED, + } } -- cgit 1.2.3-korg