From fdb974a6521e280793cf4b22d085acafb0dae036 Mon Sep 17 00:00:00 2001 From: Michael Vorburger Date: Mon, 4 Sep 2017 17:24:49 +0200 Subject: [PATCH] Bug 9060: Filter TracingBroker stack trace elements 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 --- .../md/sal/trace/dom/impl/TracingBroker.java | 27 +++++++++++++++++-- .../tests/CloseTrackedRegistryTest.java | 2 +- .../impl => }/tests/TracingBrokerTest.java | 6 +++-- 3 files changed, 30 insertions(+), 5 deletions(-) rename opendaylight/md-sal/mdsal-trace/dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/{closetracker/impl => }/tests/CloseTrackedRegistryTest.java (98%) rename opendaylight/md-sal/mdsal-trace/dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/{closetracker/impl => }/tests/TracingBrokerTest.java (92%) diff --git a/opendaylight/md-sal/mdsal-trace/dom-impl/src/main/java/org/opendaylight/controller/md/sal/trace/dom/impl/TracingBroker.java b/opendaylight/md-sal/mdsal-trace/dom-impl/src/main/java/org/opendaylight/controller/md/sal/trace/dom/impl/TracingBroker.java index 2150e28905..84e8c02fad 100644 --- a/opendaylight/md-sal/mdsal-trace/dom-impl/src/main/java/org/opendaylight/controller/md/sal/trace/dom/impl/TracingBroker.java +++ b/opendaylight/md-sal/mdsal-trace/dom-impl/src/main/java/org/opendaylight/controller/md/sal/trace/dom/impl/TracingBroker.java @@ -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 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"); + } } diff --git a/opendaylight/md-sal/mdsal-trace/dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/closetracker/impl/tests/CloseTrackedRegistryTest.java b/opendaylight/md-sal/mdsal-trace/dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/tests/CloseTrackedRegistryTest.java similarity index 98% rename from opendaylight/md-sal/mdsal-trace/dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/closetracker/impl/tests/CloseTrackedRegistryTest.java rename to opendaylight/md-sal/mdsal-trace/dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/tests/CloseTrackedRegistryTest.java index a3a8b495bc..c91080ceef 100644 --- a/opendaylight/md-sal/mdsal-trace/dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/closetracker/impl/tests/CloseTrackedRegistryTest.java +++ b/opendaylight/md-sal/mdsal-trace/dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/tests/CloseTrackedRegistryTest.java @@ -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; diff --git a/opendaylight/md-sal/mdsal-trace/dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/closetracker/impl/tests/TracingBrokerTest.java b/opendaylight/md-sal/mdsal-trace/dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/tests/TracingBrokerTest.java similarity index 92% rename from opendaylight/md-sal/mdsal-trace/dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/closetracker/impl/tests/TracingBrokerTest.java rename to opendaylight/md-sal/mdsal-trace/dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/tests/TracingBrokerTest.java index 0c4c6c57d1..3179b2a20d 100644 --- a/opendaylight/md-sal/mdsal-trace/dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/closetracker/impl/tests/TracingBrokerTest.java +++ b/opendaylight/md-sal/mdsal-trace/dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/tests/TracingBrokerTest.java @@ -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 -- 2.36.6