X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-common-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fcommon%2Fimpl%2Fservice%2FTwoPhaseCommit.java;h=007122e41df26eaf6c3c9e803e2d3f75abcf8deb;hb=8decf2dbd1e08651d98c9292ba012b3a46005549;hp=e99fc0f24c16d424524c2d1642d2109a5193c173;hpb=2e7347fdc0eb7734ff59a4f902227a93ab6afece;p=controller.git 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..007122e41d 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; @@ -59,7 +57,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 +95,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 +109,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 +218,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 +236,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(); } }