From: Michael Vorburger Date: Mon, 4 Jun 2018 13:13:48 +0000 (+0200) Subject: fix tracing ping-pong DataBroker wiring bug in trace blueprint XML X-Git-Tag: release/fluorine~84 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=5fe007578adfc50cd710274b2a93a18b39bacbe8 fix tracing ping-pong DataBroker wiring bug in trace blueprint XML JIRA: CONTROLLER-1834 Change-Id: I4fda43c578ee55218acc40be1fbf4427c81c73c3 Signed-off-by: Michael Vorburger --- diff --git a/opendaylight/md-sal/mdsal-trace/binding-impl/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml b/opendaylight/md-sal/mdsal-trace/binding-impl/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml index c44d55ba69..447ea6a639 100644 --- a/opendaylight/md-sal/mdsal-trace/binding-impl/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml +++ b/opendaylight/md-sal/mdsal-trace/binding-impl/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml @@ -29,11 +29,12 @@ and is available at http://www.eclipse.org/legal/epl-v10.html interface="org.opendaylight.controller.md.sal.binding.api.DataBroker" odl:type="default" ranking="10"/> - + - + diff --git a/opendaylight/md-sal/mdsal-trace/cli/src/main/java/org/opendaylight/controller/md/sal/trace/cli/PrintOpenTransactionsCommand.java b/opendaylight/md-sal/mdsal-trace/cli/src/main/java/org/opendaylight/controller/md/sal/trace/cli/PrintOpenTransactionsCommand.java index 7f26f0dc6a..7694cebbac 100644 --- a/opendaylight/md-sal/mdsal-trace/cli/src/main/java/org/opendaylight/controller/md/sal/trace/cli/PrintOpenTransactionsCommand.java +++ b/opendaylight/md-sal/mdsal-trace/cli/src/main/java/org/opendaylight/controller/md/sal/trace/cli/PrintOpenTransactionsCommand.java @@ -7,6 +7,7 @@ */ package org.opendaylight.controller.md.sal.trace.cli; +import java.util.List; import org.apache.karaf.shell.api.action.Action; import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; @@ -25,7 +26,7 @@ import org.opendaylight.controller.md.sal.trace.api.TracingDOMDataBroker; public class PrintOpenTransactionsCommand implements Action { @Reference - private TracingDOMDataBroker tracingDOMDataBroker; + private List tracingDOMDataBrokers; // NB: Do NOT have a non-default constructor for injection of @Reference // Karaf needs a default constructor to create the command - and it works as is. @@ -33,8 +34,8 @@ public class PrintOpenTransactionsCommand implements Action { @Override @SuppressWarnings("checkstyle:RegexpSingleLineJava") public Object execute() throws Exception { - if (!tracingDOMDataBroker.printOpenTransactions(System.out)) { - System.out.println("No open transactions, great!"); + for (TracingDOMDataBroker tracingDOMDataBroker : tracingDOMDataBrokers) { + tracingDOMDataBroker.printOpenTransactions(System.out); } return null; } 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 8160b4689e..f66aa25a8a 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 @@ -7,12 +7,13 @@ */ 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.LogicalDatastoreType; @@ -104,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 registrationWatches = new ArrayList<>(); @@ -165,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) { @@ -351,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(); diff --git a/opendaylight/md-sal/mdsal-trace/dom-impl/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml b/opendaylight/md-sal/mdsal-trace/dom-impl/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml index 7535f95d4d..95f4e1fa57 100644 --- a/opendaylight/md-sal/mdsal-trace/dom-impl/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml +++ b/opendaylight/md-sal/mdsal-trace/dom-impl/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml @@ -19,11 +19,14 @@ and is available at http://www.eclipse.org/legal/epl-v10.html interface="org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer" odl:type="default" /> + + + @@ -36,12 +39,23 @@ and is available at http://www.eclipse.org/legal/epl-v10.html + + + - - + + + + + - + + + org.opendaylight.controller.md.sal.dom.api.DOMDataBroker + org.opendaylight.controller.md.sal.trace.api.TracingDOMDataBroker + + diff --git a/opendaylight/md-sal/mdsal-trace/dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/tests/TracingBrokerTest.java b/opendaylight/md-sal/mdsal-trace/dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/tests/TracingBrokerTest.java index d0731da038..bcd2d7c923 100644 --- a/opendaylight/md-sal/mdsal-trace/dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/tests/TracingBrokerTest.java +++ b/opendaylight/md-sal/mdsal-trace/dom-impl/src/test/java/org/opendaylight/controller/md/sal/trace/tests/TracingBrokerTest.java @@ -36,7 +36,7 @@ public class TracingBrokerTest { DOMDataBroker domDataBroker = mock(DOMDataBroker.class, RETURNS_DEEP_STUBS); Config config = new ConfigBuilder().setTransactionDebugContextEnabled(true).build(); BindingNormalizedNodeSerializer codec = mock(BindingNormalizedNodeSerializer.class); - TracingBroker tracingBroker = new TracingBroker(domDataBroker, config, codec); + TracingBroker tracingBroker = new TracingBroker("mock", domDataBroker, config, codec); for (int i = 0; i < 3; i++) { DOMDataReadWriteTransaction tx = tracingBroker.newReadWriteTransaction();