Bug 9060: TracingBroker with transaction-debug-context-enabled
[controller.git] / opendaylight / md-sal / mdsal-trace / dom-impl / src / main / java / org / opendaylight / controller / md / sal / trace / dom / impl / TracingReadWriteTransaction.java
index b770e5da3789a7260dac245c8f29d80a5ad7f9c8..68c4786317abfb32d1a3d21e9dd9f8fb1e80577c 100644 (file)
@@ -9,19 +9,32 @@ package org.opendaylight.controller.md.sal.trace.dom.impl;
 
 import com.google.common.base.Optional;
 import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.ListenableFuture;
+import java.time.Instant;
 import java.util.Objects;
+import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
+import org.opendaylight.controller.md.sal.trace.closetracker.impl.CloseTracked;
+import org.opendaylight.controller.md.sal.trace.closetracker.impl.CloseTrackedRegistry;
+import org.opendaylight.controller.md.sal.trace.closetracker.impl.CloseTrackedTrait;
+import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 
-class TracingReadWriteTransaction extends TracingWriteTransaction implements DOMDataReadWriteTransaction {
+class TracingReadWriteTransaction
+    extends AbstractTracingWriteTransaction
+        implements DOMDataReadWriteTransaction, CloseTracked<TracingReadWriteTransaction> {
 
+    private final CloseTrackedTrait<TracingReadWriteTransaction> closeTracker;
     private final DOMDataReadWriteTransaction delegate;
 
-    TracingReadWriteTransaction(DOMDataReadWriteTransaction delegate, TracingBroker tracingBroker) {
+    TracingReadWriteTransaction(DOMDataReadWriteTransaction delegate, TracingBroker tracingBroker,
+            CloseTrackedRegistry<TracingReadWriteTransaction> readWriteTransactionsRegistry) {
         super(delegate, tracingBroker);
+        this.closeTracker = new CloseTrackedTrait<>(readWriteTransactionsRegistry);
         this.delegate = Objects.requireNonNull(delegate);
     }
 
@@ -35,4 +48,32 @@ class TracingReadWriteTransaction extends TracingWriteTransaction implements DOM
     public CheckedFuture<Boolean, ReadFailedException> exists(LogicalDatastoreType store, YangInstanceIdentifier yiid) {
         return delegate.exists(store, yiid);
     }
+
+    @Override
+    public CheckedFuture<Void, TransactionCommitFailedException> submit() {
+        closeTracker.removeFromTrackedRegistry();
+        return super.submit();
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<TransactionStatus>> commit() {
+        closeTracker.removeFromTrackedRegistry();
+        return super.commit();
+    }
+
+    @Override
+    public boolean cancel() {
+        closeTracker.removeFromTrackedRegistry();
+        return super.cancel();
+    }
+
+    @Override
+    public Instant getObjectCreated() {
+        return closeTracker.getObjectCreated();
+    }
+
+    @Override
+    public Throwable getAllocationContext() {
+        return closeTracker.getAllocationContext();
+    }
 }