X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fmdsal-trace%2Fdom-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Ftrace%2Fdom%2Fimpl%2FTracingTransactionChain.java;h=a7d4048e5fc3b5055a8c799604880ee33c148d7f;hp=13312ea46992f5aba32363a78ecd8387971bf36c;hb=3ec97cd0a86ad1b79f6854dc6924eb7b06e359a3;hpb=3f4b572675562ccb338c0f307e7ea213404955d1 diff --git a/opendaylight/md-sal/mdsal-trace/dom-impl/src/main/java/org/opendaylight/controller/md/sal/trace/dom/impl/TracingTransactionChain.java b/opendaylight/md-sal/mdsal-trace/dom-impl/src/main/java/org/opendaylight/controller/md/sal/trace/dom/impl/TracingTransactionChain.java index 13312ea469..a7d4048e5f 100644 --- a/opendaylight/md-sal/mdsal-trace/dom-impl/src/main/java/org/opendaylight/controller/md/sal/trace/dom/impl/TracingTransactionChain.java +++ b/opendaylight/md-sal/mdsal-trace/dom-impl/src/main/java/org/opendaylight/controller/md/sal/trace/dom/impl/TracingTransactionChain.java @@ -12,35 +12,84 @@ import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction; import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction; import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain; +import org.opendaylight.controller.md.sal.trace.closetracker.impl.AbstractCloseTracked; +import org.opendaylight.controller.md.sal.trace.closetracker.impl.CloseTrackedRegistry; -class TracingTransactionChain implements DOMTransactionChain { +@Deprecated +class TracingTransactionChain extends AbstractCloseTracked implements DOMTransactionChain { private final DOMTransactionChain delegate; private final TracingBroker tracingBroker; + private final CloseTrackedRegistry readOnlyTransactionsRegistry; + private final CloseTrackedRegistry writeTransactionsRegistry; + private final CloseTrackedRegistry readWriteTransactionsRegistry; - TracingTransactionChain(DOMTransactionChain delegate, TracingBroker tracingBroker) { + TracingTransactionChain(DOMTransactionChain delegate, TracingBroker tracingBroker, + CloseTrackedRegistry transactionChainsRegistry) { + super(transactionChainsRegistry); this.delegate = Objects.requireNonNull(delegate); this.tracingBroker = Objects.requireNonNull(tracingBroker); + + final boolean isDebug = transactionChainsRegistry.isDebugContextEnabled(); + String anchor = "TransactionChain@" + Integer.toHexString(hashCode()); + this.readOnlyTransactionsRegistry = new CloseTrackedRegistry<>(anchor, "newReadOnlyTransaction()", isDebug); + this.writeTransactionsRegistry = new CloseTrackedRegistry<>(anchor, "newWriteOnlyTransaction()", isDebug); + this.readWriteTransactionsRegistry = new CloseTrackedRegistry<>(anchor, "newReadWriteTransaction()", isDebug); } @Override + @SuppressWarnings("resource") public DOMDataReadOnlyTransaction newReadOnlyTransaction() { - return delegate.newReadOnlyTransaction(); + final DOMDataReadOnlyTransaction tx = delegate.newReadOnlyTransaction(); + return new TracingReadOnlyTransaction(tx, readOnlyTransactionsRegistry); } @Override public DOMDataReadWriteTransaction newReadWriteTransaction() { - return new TracingReadWriteTransaction(delegate.newReadWriteTransaction(), tracingBroker); + return new TracingReadWriteTransaction(delegate.newReadWriteTransaction(), tracingBroker, + readWriteTransactionsRegistry); } @Override public DOMDataWriteTransaction newWriteOnlyTransaction() { - return new TracingWriteTransaction(delegate.newWriteOnlyTransaction(), tracingBroker); + final DOMDataWriteTransaction tx = delegate.newWriteOnlyTransaction(); + return new TracingWriteTransaction(tx, tracingBroker, writeTransactionsRegistry); } @Override public void close() { delegate.close(); + super.removeFromTrackedRegistry(); + } + + public CloseTrackedRegistry getReadOnlyTransactionsRegistry() { + return readOnlyTransactionsRegistry; + } + + public CloseTrackedRegistry getReadWriteTransactionsRegistry() { + return readWriteTransactionsRegistry; + } + + public CloseTrackedRegistry getWriteTransactionsRegistry() { + return writeTransactionsRegistry; + } + + + // https://jira.opendaylight.org/browse/CONTROLLER-1792 + + @Override + public final boolean equals(Object object) { + return object == this || delegate.equals(object); + } + + @Override + public final int hashCode() { + return delegate.hashCode(); + } + + @Override + public final String toString() { + return getClass().getName() + "; delegate=" + delegate; } }