Migrate OSGI compendium reference
[controller.git] / opendaylight / md-sal / mdsal-trace / dom-impl / src / main / java / org / opendaylight / controller / md / sal / trace / dom / impl / AbstractTracingWriteTransaction.java
index a06ee5edfeab3094538d404c11e53810a3013b40..9064baa36a0e5ed65b09df45e1767e9cd5964422 100644 (file)
@@ -7,21 +7,20 @@
  */
 package org.opendaylight.controller.md.sal.trace.dom.impl;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.collect.ImmutableSet;
-import com.google.common.util.concurrent.CheckedFuture;
-import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.FluentFuture;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Objects;
 import java.util.Set;
-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.TransactionCommitFailedException;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
-import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 
+@Deprecated(forRemoval = true)
 abstract class AbstractTracingWriteTransaction implements DOMDataWriteTransaction {
 
     private final DOMDataWriteTransaction delegate;
@@ -29,13 +28,14 @@ abstract class AbstractTracingWriteTransaction implements DOMDataWriteTransactio
     private final List<String> logs = new ArrayList<>();
 
     AbstractTracingWriteTransaction(DOMDataWriteTransaction delegate, TracingBroker tracingBroker) {
-        this.delegate = Objects.requireNonNull(delegate);
-        this.tracingBroker = Objects.requireNonNull(tracingBroker);
+        this.delegate = requireNonNull(delegate);
+        this.tracingBroker = requireNonNull(tracingBroker);
+        recordOp(null, null, "instantiate", null);
     }
 
     private void recordOp(LogicalDatastoreType store, YangInstanceIdentifier yiid, String method,
             NormalizedNode<?, ?> node) {
-        if (!tracingBroker.isWriteWatched(yiid, store)) {
+        if (yiid != null && !tracingBroker.isWriteWatched(yiid, store)) {
             return;
         }
 
@@ -47,14 +47,22 @@ abstract class AbstractTracingWriteTransaction implements DOMDataWriteTransactio
             }
         } else {
             StringBuilder sb = new StringBuilder();
-            sb.append("Method \"").append(method);
-            sb.append("\" to ").append(store);
-            sb.append(" at ").append(tracingBroker.toPathString(yiid)).append('.');
-            sb.append(" Data: ");
-            if (node != null) {
-                sb.append(node.getValue());
-            } else {
-                sb.append("null");
+            sb.append("Method \"").append(method).append('"');
+            if (store != null) {
+                sb.append(" to ").append(store);
+            }
+            if (yiid != null) {
+                sb.append(" at ").append(tracingBroker.toPathString(yiid));
+            }
+            sb.append('.');
+            if (yiid != null) {
+                // If we don’t have an id, we don’t expect data either
+                sb.append(" Data: ");
+                if (node != null) {
+                    sb.append(node.getValue());
+                } else {
+                    sb.append("null");
+                }
             }
             sb.append(" Stack:").append(tracingBroker.getStackSummary());
             synchronized (this) {
@@ -65,7 +73,10 @@ abstract class AbstractTracingWriteTransaction implements DOMDataWriteTransactio
 
     private synchronized void logOps() {
         synchronized (this) {
-            logs.forEach(log -> TracingBroker.LOG.warn(log));
+            if (TracingBroker.LOG.isWarnEnabled()) {
+                TracingBroker.LOG.warn("Transaction {} contains the following operations:", getIdentifier());
+                logs.forEach(TracingBroker.LOG::warn);
+            }
             logs.clear();
         }
     }
@@ -87,8 +98,7 @@ abstract class AbstractTracingWriteTransaction implements DOMDataWriteTransactio
         synchronized (this) {
             logs.clear();
         }
-        boolean result = delegate.cancel();
-        return result;
+        return delegate.cancel();
     }
 
     @Override
@@ -98,13 +108,8 @@ abstract class AbstractTracingWriteTransaction implements DOMDataWriteTransactio
     }
 
     @Override
-    public CheckedFuture<Void, TransactionCommitFailedException> submit() {
-        logOps();
-        return delegate.submit();
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<TransactionStatus>> commit() {
+    public FluentFuture<? extends CommitInfo> commit() {
+        recordOp(null, null, "commit", null);
         logOps();
         return delegate.commit();
     }
@@ -113,4 +118,21 @@ abstract class AbstractTracingWriteTransaction implements DOMDataWriteTransactio
     public Object getIdentifier() {
         return delegate.getIdentifier();
     }
+
+    // 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;
+    }
 }