/* * Copyright (c) 2017 Red Hat, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * 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.dom.impl; import java.util.Objects; 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.DOMDataWriteTransaction; import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain; import org.opendaylight.controller.md.sal.trace.closetracker.impl.AbstractCloseTracked; import org.opendaylight.controller.md.sal.trace.closetracker.impl.CloseTrackedRegistry; @Deprecated class TracingTransactionChain extends AbstractCloseTracked implements DOMTransactionChain { private final DOMTransactionChain delegate; private final TracingBroker tracingBroker; private final CloseTrackedRegistry readOnlyTransactionsRegistry; private final CloseTrackedRegistry writeTransactionsRegistry; private final CloseTrackedRegistry readWriteTransactionsRegistry; TracingTransactionChain(DOMTransactionChain delegate, TracingBroker tracingBroker, CloseTrackedRegistry transactionChainsRegistry) { super(transactionChainsRegistry); this.delegate = Objects.requireNonNull(delegate); this.tracingBroker = Objects.requireNonNull(tracingBroker); final boolean isDebug = transactionChainsRegistry.isDebugContextEnabled(); String anchor = "TransactionChain@" + Integer.toHexString(hashCode()); this.readOnlyTransactionsRegistry = new CloseTrackedRegistry<>(anchor, "newReadOnlyTransaction()", isDebug); this.writeTransactionsRegistry = new CloseTrackedRegistry<>(anchor, "newWriteOnlyTransaction()", isDebug); this.readWriteTransactionsRegistry = new CloseTrackedRegistry<>(anchor, "newReadWriteTransaction()", isDebug); } @Override @SuppressWarnings("resource") public DOMDataReadOnlyTransaction newReadOnlyTransaction() { final DOMDataReadOnlyTransaction tx = delegate.newReadOnlyTransaction(); return new TracingReadOnlyTransaction(tx, readOnlyTransactionsRegistry); } @Override public DOMDataReadWriteTransaction newReadWriteTransaction() { return new TracingReadWriteTransaction(delegate.newReadWriteTransaction(), tracingBroker, readWriteTransactionsRegistry); } @Override public DOMDataWriteTransaction newWriteOnlyTransaction() { final DOMDataWriteTransaction tx = delegate.newWriteOnlyTransaction(); return new TracingWriteTransaction(tx, tracingBroker, writeTransactionsRegistry); } @Override public void close() { delegate.close(); super.removeFromTrackedRegistry(); } public CloseTrackedRegistry getReadOnlyTransactionsRegistry() { return readOnlyTransactionsRegistry; } public CloseTrackedRegistry getReadWriteTransactionsRegistry() { return readWriteTransactionsRegistry; } public CloseTrackedRegistry getWriteTransactionsRegistry() { return writeTransactionsRegistry; } // https://jira.opendaylight.org/browse/CONTROLLER-1792 @Override public final boolean equals(Object object) { return object == this || delegate.equals(object); } @Override public final int hashCode() { return delegate.hashCode(); } @Override public final String toString() { return getClass().getName() + "; delegate=" + delegate; } }