simplify a statement in NormalizedNodeInputStreamReader
[controller.git] / opendaylight / md-sal / mdsal-trace / dom-impl / src / main / java / org / opendaylight / controller / md / sal / trace / dom / impl / TracingBroker.java
index d6b10396313ef4f13eb203f71870933ca50710a1..f66aa25a8a8c964bedce3e9a848a75d2c48eb67c 100644 (file)
@@ -7,21 +7,20 @@
  */
 package org.opendaylight.controller.md.sal.trace.dom.impl;
 
+import static java.util.Objects.requireNonNull;
+
 import java.io.PrintStream;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Objects;
 import java.util.Set;
 import javax.annotation.Nonnull;
-import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener;
 import org.opendaylight.controller.md.sal.dom.api.ClusteredDOMDataTreeChangeListener;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataBrokerExtension;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataChangeListener;
 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.DOMDataTreeChangeListener;
@@ -106,6 +105,7 @@ public class TracingBroker implements TracingDOMDataBroker {
 
     private static final int STACK_TRACE_FIRST_RELEVANT_FRAME = 2;
 
+    private final String type; // "default" VS "pingpong"
     private final BindingNormalizedNodeSerializer codec;
     private final DOMDataBroker delegate;
     private final List<Watch> registrationWatches = new ArrayList<>();
@@ -148,22 +148,13 @@ public class TracingBroker implements TracingDOMDataBroker {
         }
 
         @SuppressWarnings("checkstyle:hiddenField")
-        public boolean subtreesOverlap(YangInstanceIdentifier iid, LogicalDatastoreType store,
-                                                                AsyncDataBroker.DataChangeScope scope) {
+        public boolean subtreesOverlap(YangInstanceIdentifier iid, LogicalDatastoreType store) {
             if (this.store != null && !this.store.equals(store)) {
                 return false;
             }
 
             String otherIidString = toIidCompString(iid);
-            switch (scope) {
-                case BASE:
-                    return isParent(iidString, otherIidString);
-                case ONE: //for now just treat like SUBTREE, even though it's not
-                case SUBTREE:
-                    return isParent(iidString, otherIidString) || isParent(otherIidString, iidString);
-                default:
-                    return false;
-            }
+            return isParent(iidString, otherIidString) || isParent(otherIidString, iidString);
         }
 
         @SuppressWarnings("checkstyle:hiddenField")
@@ -176,9 +167,10 @@ public class TracingBroker implements TracingDOMDataBroker {
         }
     }
 
-    public TracingBroker(DOMDataBroker delegate, Config config, BindingNormalizedNodeSerializer codec) {
-        this.delegate = Objects.requireNonNull(delegate);
-        this.codec = Objects.requireNonNull(codec);
+    public TracingBroker(String type, DOMDataBroker delegate, Config config, BindingNormalizedNodeSerializer codec) {
+        this.type = requireNonNull(type, "type");
+        this.delegate = requireNonNull(delegate, "delegate");
+        this.codec = requireNonNull(codec, "codec");
         configure(config);
 
         if (config.isTransactionDebugContextEnabled() != null) {
@@ -232,14 +224,13 @@ public class TracingBroker implements TracingDOMDataBroker {
         writeWatches.add(watch);
     }
 
-    private boolean isRegistrationWatched(YangInstanceIdentifier iid,
-                                                            LogicalDatastoreType store, DataChangeScope scope) {
+    private boolean isRegistrationWatched(YangInstanceIdentifier iid, LogicalDatastoreType store) {
         if (registrationWatches.isEmpty()) {
             return true;
         }
 
         for (Watch regInterest : registrationWatches) {
-            if (regInterest.subtreesOverlap(iid, store, scope)) {
+            if (regInterest.subtreesOverlap(iid, store)) {
                 return true;
             }
         }
@@ -316,17 +307,6 @@ public class TracingBroker implements TracingDOMDataBroker {
         return new TracingWriteTransaction(delegate.newWriteOnlyTransaction(), this, writeTransactionsRegistry);
     }
 
-    @Override
-    public ListenerRegistration<DOMDataChangeListener> registerDataChangeListener(
-                                                        LogicalDatastoreType store, YangInstanceIdentifier yiid,
-                                                        DOMDataChangeListener listener, DataChangeScope scope) {
-        if (isRegistrationWatched(yiid, store, scope)) {
-            LOG.warn("Registration (registerDataChangeListener) for {} from {}",
-                    toPathString(yiid), getStackSummary());
-        }
-        return delegate.registerDataChangeListener(store, yiid, listener, scope);
-    }
-
     @Override
     public DOMTransactionChain createTransactionChain(TransactionChainListener transactionChainListener) {
         return new TracingTransactionChain(
@@ -335,7 +315,7 @@ public class TracingBroker implements TracingDOMDataBroker {
 
     @Override
     public DOMDataReadOnlyTransaction newReadOnlyTransaction() {
-        return new TracingReadOnlyTransaction(delegate.newReadOnlyTransaction(), this, readOnlyTransactionsRegistry);
+        return new TracingReadOnlyTransaction(delegate.newReadOnlyTransaction(), readOnlyTransactionsRegistry);
     }
 
     @Nonnull
@@ -355,7 +335,7 @@ public class TracingBroker implements TracingDOMDataBroker {
             public <L extends DOMDataTreeChangeListener> ListenerRegistration<L> registerDataTreeChangeListener(
                     @Nonnull DOMDataTreeIdentifier domDataTreeIdentifier, @Nonnull L listener) {
                 if (isRegistrationWatched(domDataTreeIdentifier.getRootIdentifier(),
-                        domDataTreeIdentifier.getDatastoreType(), DataChangeScope.SUBTREE)) {
+                        domDataTreeIdentifier.getDatastoreType())) {
                     LOG.warn("{} registration (registerDataTreeChangeListener) for {} from {}.",
                             listener instanceof ClusteredDOMDataTreeChangeListener ? "Clustered" : "Non-clustered",
                             toPathString(domDataTreeIdentifier.getRootIdentifier()), getStackSummary());
@@ -374,10 +354,12 @@ public class TracingBroker implements TracingDOMDataBroker {
             && writeTransactionsRegistry.getAllUnique().isEmpty()
             && readWriteTransactionsRegistry.getAllUnique().isEmpty()) {
 
+            ps.println(type + ": No open transactions, great!");
             return false;
         }
 
-        ps.println(getClass().getSimpleName() + " found some not yet (or never..) closed transaction[chain]s!");
+        ps.println(type + ": " + getClass().getSimpleName()
+                 + " found some not yet (or never..) closed transaction[chain]s!");
         ps.println("[NB: If no stack traces are shown below, then "
                  + "enable transaction-debug-context-enabled in mdsaltrace_config.xml]");
         ps.println();
@@ -410,7 +392,11 @@ public class TracingBroker implements TracingDOMDataBroker {
 
     private <T extends CloseTracked<T>> void printRegistryOpenTransactions(
             CloseTrackedRegistry<T> registry, PrintStream ps, String indent) {
-        Set<CloseTrackedRegistryReportEntry<T>> entries = registry.getAllUnique();
+        Set<CloseTrackedRegistryReportEntry<T>> unsorted = registry.getAllUnique();
+
+        List<CloseTrackedRegistryReportEntry<T>> entries = new ArrayList<>(unsorted);
+        entries.sort((o1, o2) -> Long.compare(o2.getNumberAddedNotRemoved(), o1.getNumberAddedNotRemoved()));
+
         if (!entries.isEmpty()) {
             ps.println(indent + registry.getAnchor() + " : " + registry.getCreateDescription());
         }