X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-common-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fcommon%2Fimpl%2Fservice%2FTwoPhaseCommit.java;h=30c5898ea32c4fec3792ec934bd0182ad1104961;hp=e99fc0f24c16d424524c2d1642d2109a5193c173;hb=fda226a0b46de4b481829d5f627b90fe4df41314;hpb=f08d2774c06e55e377191b027ec9131921977e70 diff --git a/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/service/TwoPhaseCommit.java b/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/service/TwoPhaseCommit.java index e99fc0f24c..30c5898ea3 100644 --- a/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/service/TwoPhaseCommit.java +++ b/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/service/TwoPhaseCommit.java @@ -8,7 +8,6 @@ package org.opendaylight.controller.md.sal.common.impl.service; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -21,10 +20,9 @@ import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent; import org.opendaylight.controller.md.sal.common.api.data.DataChangeListener; import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler; import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler.DataCommitTransaction; -import org.opendaylight.controller.sal.common.util.Rpcs; import org.opendaylight.yangtools.concepts.Path; -import org.opendaylight.yangtools.yang.common.RpcError; import org.opendaylight.yangtools.yang.common.RpcResult; +import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,6 +33,7 @@ import com.google.common.collect.ImmutableList.Builder; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; +@Deprecated public class TwoPhaseCommit

, D extends Object, DCL extends DataChangeListener> implements Callable> { private final static Logger log = LoggerFactory.getLogger(TwoPhaseCommit.class); @@ -59,7 +58,17 @@ public class TwoPhaseCommit

, D extends Object, DCL extends Dat .addAll(transaction.getCreatedOperationalData().keySet()) .addAll(transaction.getRemovedOperationalData()).build(); - log.trace("Transaction: {} Affected Subtrees:", transactionId, changedPaths); + log.trace("Transaction: {} Affected Subtrees: {}", transactionId, changedPaths); + + // The transaction has no effects, let's just shortcut it + if (changedPaths.isEmpty()) { + dataBroker.getFinishedTransactionsCount().getAndIncrement(); + transaction.succeeded(); + + log.trace("Transaction: {} Finished successfully (no effects).", transactionId); + + return RpcResultBuilder. success( TransactionStatus.COMMITED ).build(); + } final ImmutableList.Builder> listenersBuilder = ImmutableList.builder(); listenersBuilder.addAll(dataBroker.affectedListeners(changedPaths)); @@ -87,7 +96,7 @@ public class TwoPhaseCommit

, D extends Object, DCL extends Dat } catch (Exception e) { log.error("Transaction: {} Request Commit failed", transactionId, e); dataBroker.getFailedTransactionsCount().getAndIncrement(); - this.transaction.changeStatus(TransactionStatus.FAILED); + this.transaction.failed(); return this.rollback(handlerTransactions, e); } @@ -101,23 +110,22 @@ public class TwoPhaseCommit

, D extends Object, DCL extends Dat } catch (Exception e) { log.error("Transaction: {} Finish Commit failed", transactionId, e); dataBroker.getFailedTransactionsCount().getAndIncrement(); - transaction.changeStatus(TransactionStatus.FAILED); + transaction.failed(); return this.rollback(handlerTransactions, e); } dataBroker.getFinishedTransactionsCount().getAndIncrement(); - transaction.changeStatus(TransactionStatus.COMMITED); + transaction.succeeded(); log.trace("Transaction: {} Finished successfully.", transactionId); captureFinalState(listeners); - log.trace("Transaction: {} Notifying listeners."); + log.trace("Transaction: {} Notifying listeners.", transactionId); publishDataChangeEvent(listeners); - return Rpcs. getRpcResult(true, TransactionStatus.COMMITED, - Collections. emptySet()); + return RpcResultBuilder. success(TransactionStatus.COMMITED).build(); } private void captureInitialState(ImmutableList> listeners) { @@ -211,14 +219,12 @@ public class TwoPhaseCommit

, D extends Object, DCL extends Dat @Override public void run() { for (final ListenerStateCapture listenerSet : listeners) { - { - DataChangeEvent changeEvent = listenerSet.createEvent(transaction); - for (final DataChangeListenerRegistration listener : listenerSet.getListeners()) { - try { - listener.getInstance().onDataChanged(changeEvent); - } catch (Exception e) { - log.error("Unhandled exception when invoking listener {}", listener); - } + DataChangeEvent changeEvent = listenerSet.createEvent(transaction); + for (final DataChangeListenerRegistration listener : listenerSet.getListeners()) { + try { + listener.getInstance().onDataChanged(changeEvent); + } catch (Exception e) { + log.error("Unhandled exception when invoking listener {}", listener, e); } } } @@ -231,7 +237,6 @@ public class TwoPhaseCommit

, D extends Object, DCL extends Dat for (final DataCommitTransaction transaction : transactions) { transaction.rollback(); } - Set _emptySet = Collections. emptySet(); - return Rpcs. getRpcResult(false, TransactionStatus.FAILED, _emptySet); + return RpcResultBuilder. failed().withResult(TransactionStatus.FAILED).build(); } }