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=a51dc64816d0822778ff1b690bd10fdd19268afa;hp=e99fc0f24c16d424524c2d1642d2109a5193c173;hb=80bcd6f5ae8541df5590d69aa1b46c1d2692bba1;hpb=fa3bc33c3103f8b52a57954d024e4b390ea01c94 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..a51dc64816 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 @@ -59,7 +59,18 @@ 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 Rpcs. getRpcResult(true, TransactionStatus.COMMITED, + Collections. emptySet()); + } final ImmutableList.Builder> listenersBuilder = ImmutableList.builder(); listenersBuilder.addAll(dataBroker.affectedListeners(changedPaths)); @@ -87,7 +98,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,19 +112,19 @@ 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, @@ -211,14 +222,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); } } }