Bug 9060: Filter TracingBroker stack trace elements
authorMichael Vorburger <vorburger@redhat.com>
Mon, 4 Sep 2017 15:24:49 +0000 (17:24 +0200)
committerStephen Kitt <skitt@redhat.com>
Thu, 7 Sep 2017 11:29:44 +0000 (11:29 +0000)
Just to make them a lot easier to read, because what is really
interesting in them is the "middle part" (before the trace close
tracking infra classes and after the lower level e.g. BP set up class
stack frames).

Change-Id: I5f90b69a10ec0ea3f3e3407279c523751813418d
Signed-off-by: Michael Vorburger <vorburger@redhat.com>
dom-impl/src/main/java/org/opendaylight/controller/md/sal/trace/dom/impl/TracingBroker.java
dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/tests/CloseTrackedRegistryTest.java [moved from dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/closetracker/impl/tests/CloseTrackedRegistryTest.java with 98% similarity]
dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/tests/TracingBrokerTest.java [moved from dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/closetracker/impl/tests/TracingBrokerTest.java with 92% similarity]

index 2150e28905a8cfbee60116324f1e6cb3aa11b652..84e8c02fadebd426587b71d18cb7b7a691e72686 100644 (file)
@@ -391,7 +391,7 @@ public class TracingBroker implements TracingDOMDataBroker {
         }
         entries.forEach(entry -> {
             ps.println("    " + entry.getNumberAddedNotRemoved() + "x TransactionChains opened but not closed here:");
-            entry.getStackTraceElements().forEach(line -> ps.println("      " + line));
+            printStackTraceElements(ps, "      ", entry.getStackTraceElements());
             @SuppressWarnings("resource")
             TracingTransactionChain txChain = (TracingTransactionChain) entry
                 .getExampleCloseTracked().getRealCloseTracked();
@@ -413,10 +413,33 @@ public class TracingBroker implements TracingDOMDataBroker {
         entries.forEach(entry -> {
             ps.println(indent + "  " + entry.getNumberAddedNotRemoved()
                 + "x transactions opened here, which are not closed:");
-            entry.getStackTraceElements().forEach(line -> ps.println(indent + "    " + line));
+            printStackTraceElements(ps, indent + "    ", entry.getStackTraceElements());
         });
         if (!entries.isEmpty()) {
             ps.println();
         }
     }
+
+    private void printStackTraceElements(PrintStream ps, String indent, List<StackTraceElement> stackTraceElements) {
+        stackTraceElements.forEach(line -> {
+            if (isStackTraceElementInteresting(line)) {
+                ps.println(indent + line);
+            } else {
+                ps.println(indent + "(...)");
+            }
+        });
+    }
+
+    private boolean isStackTraceElementInteresting(StackTraceElement element) {
+        final String className = element.getClassName();
+        return !className.startsWith(getClass().getPackage().getName())
+            && !className.startsWith(CloseTracked.class.getPackage().getName())
+            && !className.startsWith("Proxy")
+            && !className.startsWith("akka")
+            && !className.startsWith("scala")
+            && !className.startsWith("sun.reflect")
+            && !className.startsWith("java.lang.reflect")
+            && !className.startsWith("org.apache.aries.blueprint")
+            && !className.startsWith("org.osgi.util.tracker");
+    }
 }
similarity index 98%
rename from dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/closetracker/impl/tests/CloseTrackedRegistryTest.java
rename to dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/tests/CloseTrackedRegistryTest.java
index a3a8b495bcde65fff339b5066b38237860afcfb2..c91080ceef0a2e14cbe1dc0708102519640b3327 100644 (file)
@@ -5,7 +5,7 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-package org.opendaylight.controller.md.sal.trace.closetracker.impl.tests;
+package org.opendaylight.controller.md.sal.trace.tests;
 
 import static com.google.common.truth.Truth.assertThat;
 import static org.junit.Assert.fail;
similarity index 92%
rename from dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/closetracker/impl/tests/TracingBrokerTest.java
rename to dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/tests/TracingBrokerTest.java
index 0c4c6c57d1fb685a9c036b876cf2f2bf5b634ec7..3179b2a20d5957a6fe6cfa7de3b7890c9a7a4b81 100644 (file)
@@ -5,7 +5,7 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-package org.opendaylight.controller.md.sal.trace.closetracker.impl.tests;
+package org.opendaylight.controller.md.sal.trace.tests;
 
 import static com.google.common.truth.Truth.assertThat;
 import static java.nio.charset.StandardCharsets.UTF_8;
@@ -48,7 +48,9 @@ public class TracingBrokerTest {
         String output = new String(baos.toByteArray(), UTF_8);
 
         assertThat(printReturnValue).isTrue();
-        assertThat(output).contains("testPrintOpenTransactions(TracingBrokerTest.java:41)"); // in a stack trace
+        // Assert expections about stack trace
+        assertThat(output).contains("testPrintOpenTransactions(TracingBrokerTest.java:41)");
+        assertThat(output).doesNotContain(TracingBroker.class.getName());
 
         // We don't do any verify/times on the mocks,
         // because the main point of the test is just to verify that