import java.util.Set;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.dom.api.ClusteredDOMDataTreeChangeListener;
import org.opendaylight.mdsal.dom.api.DOMDataBroker;
-import org.opendaylight.mdsal.dom.api.DOMDataBrokerExtension;
import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
-import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener;
import org.opendaylight.mdsal.trace.api.TracingDOMDataBroker;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsaltrace.rev160908.Config;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
* </ul>
*/
public class TracingBroker implements TracingDOMDataBroker {
- @SuppressFBWarnings("SLF4J_LOGGER_SHOULD_BE_PRIVATE")
- static final Logger LOG = LoggerFactory.getLogger(TracingBroker.class);
+ private static final Logger LOG = LoggerFactory.getLogger(TracingBroker.class);
private static final int STACK_TRACE_FIRST_RELEVANT_FRAME = 2;
}
static void toPathString(final InstanceIdentifier<? extends DataObject> iid, final StringBuilder builder) {
- for (InstanceIdentifier.PathArgument pathArg : iid.getPathArguments()) {
- builder.append('/').append(pathArg.getType().getSimpleName());
+ for (var pathArg : iid.getPathArguments()) {
+ builder.append('/').append(pathArg.type().getSimpleName());
}
}
}
@Override
- public DOMTransactionChain createTransactionChain(final DOMTransactionChainListener transactionChainListener) {
- return new TracingTransactionChain(delegate.createTransactionChain(transactionChainListener), this,
- transactionChainsRegistry);
+ public DOMTransactionChain createTransactionChain() {
+ return new TracingTransactionChain(delegate.createTransactionChain(), this, transactionChainsRegistry);
}
@Override
- public DOMTransactionChain createMergingTransactionChain(
- final DOMTransactionChainListener transactionChainListener) {
- return new TracingTransactionChain(delegate.createMergingTransactionChain(transactionChainListener), this,
- transactionChainsRegistry);
+ public DOMTransactionChain createMergingTransactionChain() {
+ return new TracingTransactionChain(delegate.createMergingTransactionChain(), this, transactionChainsRegistry);
}
@Override
}
@Override
- public <T extends DOMDataBrokerExtension> T extension(final Class<T> type) {
+ public <T extends Extension> T extension(final Class<T> type) {
final var ext = delegate.extension(type);
- if (DOMDataTreeChangeService.class.equals(type) && ext instanceof DOMDataTreeChangeService treeChange) {
- return type.cast(new DOMDataTreeChangeService() {
+ if (DataTreeChangeExtension.class.equals(type) && ext instanceof DataTreeChangeExtension treeChange) {
+ return type.cast(new DataTreeChangeExtension() {
@Override
- public <L extends DOMDataTreeChangeListener> ListenerRegistration<L> registerDataTreeChangeListener(
- final DOMDataTreeIdentifier domDataTreeIdentifier, final L listener) {
- final var rootId = domDataTreeIdentifier.getRootIdentifier();
- if (isRegistrationWatched(rootId, domDataTreeIdentifier.getDatastoreType())) {
- LOG.warn("{} registration (registerDataTreeChangeListener) for {} from {}.",
- listener instanceof ClusteredDOMDataTreeChangeListener ? "Clustered" : "Non-clustered",
+ public Registration registerTreeChangeListener(final DOMDataTreeIdentifier treeId,
+ final DOMDataTreeChangeListener listener) {
+ notifyIfWatched("Non-clustered", treeId, listener);
+ return treeChange.registerTreeChangeListener(treeId, listener);
+ }
+
+ @Override
+ @Deprecated(since = "13.0.0", forRemoval = true)
+ public Registration registerLegacyTreeChangeListener(final DOMDataTreeIdentifier treeId,
+ final DOMDataTreeChangeListener listener) {
+ notifyIfWatched("Non-clustered", treeId, listener);
+ return treeChange.registerLegacyTreeChangeListener(treeId, listener);
+ }
+
+ private void notifyIfWatched(final String kind, final DOMDataTreeIdentifier treeId,
+ final DOMDataTreeChangeListener listener) {
+ final var rootId = treeId.path();
+ if (isRegistrationWatched(rootId, treeId.datastore()) && LOG.isWarnEnabled()) {
+ LOG.warn("{} registration (registerDataTreeChangeListener) for {} from {}.", kind,
toPathString(rootId), getStackSummary());
}
- return treeChange.registerDataTreeChangeListener(domDataTreeIdentifier, listener);
}
});
}
return hasFound;
}
+ final void logEmptySet(final YangInstanceIdentifier yiid) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Empty data set write to {}", toPathString(yiid));
+ }
+ }
+
+ @SuppressFBWarnings(value = "SLF4J_SIGN_ONLY_FORMAT", justification = "pre-formatted logs")
+ static final void logOperations(final Object identifier, final List<?> operations) {
+ if (LOG.isWarnEnabled()) {
+ LOG.warn("Transaction {} contains the following operations:", identifier);
+ for (var operation : operations) {
+ LOG.warn("{}", operation);
+ }
+ }
+ }
+
private <T extends CloseTracked<T>> boolean print(final CloseTrackedRegistry<T> registry, final PrintStream ps,
final String indent, final int minOpenTransactions) {
Set<CloseTrackedRegistryReportEntry<T>> unsorted = registry.getAllUnique();