make never written to WriteTransaction cancel themselves
[genius.git] / mdsalutil / mdsalutil-api / src / main / java / org / opendaylight / genius / infra / WriteTrackingReadWriteTransaction.java
index ba620e5655d935c5eea3d64130a8584551f7f1d1..c89d66c54f6e1ce48f69afcae3221da3299e56f1 100644 (file)
@@ -7,58 +7,26 @@
  */
 package org.opendaylight.genius.infra;
 
-import org.opendaylight.controller.md.sal.binding.api.ForwardingReadWriteTransaction;
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.CheckedFuture;
 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
 /**
  * Read-write transaction which keeps track of writes.
  */
-class WriteTrackingReadWriteTransaction extends ForwardingReadWriteTransaction implements WriteTrackingTransaction {
-    // This is volatile to ensure we get the latest value; transactions aren't supposed to be used in multiple threads,
-    // but the cost here is tiny (one read penalty at the end of a transaction) so we play it safe
-    private volatile boolean written;
+class WriteTrackingReadWriteTransaction extends WriteTrackingWriteTransaction implements ReadWriteTransaction {
 
     WriteTrackingReadWriteTransaction(ReadWriteTransaction delegate) {
         super(delegate);
     }
 
     @Override
-    public <T extends DataObject> void put(LogicalDatastoreType store, InstanceIdentifier<T> path, T data) {
-        super.put(store, path, data);
-        written = true;
-    }
-
-    @Override
-    public <T extends DataObject> void put(LogicalDatastoreType store, InstanceIdentifier<T> path, T data,
-        boolean createMissingParents) {
-        super.put(store, path, data, createMissingParents);
-        written = true;
-    }
-
-    @Override
-    public <T extends DataObject> void merge(LogicalDatastoreType store, InstanceIdentifier<T> path, T data) {
-        super.merge(store, path, data);
-        written = true;
-    }
-
-    @Override
-    public <T extends DataObject> void merge(LogicalDatastoreType store, InstanceIdentifier<T> path, T data,
-        boolean createMissingParents) {
-        super.merge(store, path, data, createMissingParents);
-        written = true;
-    }
-
-    @Override
-    public void delete(LogicalDatastoreType store, InstanceIdentifier<?> path) {
-        super.delete(store, path);
-        written = true;
-    }
-
-    @Override
-    public boolean isWritten() {
-        return written;
+    public <T extends DataObject> CheckedFuture<Optional<T>, ReadFailedException> read(LogicalDatastoreType store,
+            InstanceIdentifier<T> path) {
+        return ((ReadWriteTransaction) delegate()).read(store, path);
     }
 }