* 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.mdsal.dom.broker;
-import com.google.common.base.Preconditions;
+import static com.google.common.base.Preconditions.checkState;
+import static java.util.Objects.requireNonNull;
+
import com.google.common.collect.ClassToInstanceMap;
import com.google.common.util.concurrent.FluentFuture;
import com.google.common.util.concurrent.FutureCallback;
import java.util.EnumMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import org.opendaylight.mdsal.common.api.AsyncTransaction;
import org.opendaylight.mdsal.common.api.CommitInfo;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.common.api.TransactionChainListener;
import org.opendaylight.mdsal.dom.api.DOMDataTreeCursorAwareTransaction;
import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
import org.opendaylight.mdsal.dom.api.DOMDataTreeListener;
import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
import org.opendaylight.mdsal.dom.api.DOMDataTreeService;
import org.opendaylight.mdsal.dom.api.DOMDataTreeServiceExtension;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeTransaction;
import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
+import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
public class ShardedDOMTransactionChainAdapter implements DOMTransactionChain {
private final DOMDataTreeService dataTreeService;
private final Object txChainIdentifier;
private final AtomicLong txNum = new AtomicLong();
- private final TransactionChainListener txChainListener;
+ private final DOMTransactionChainListener txChainListener;
private final CachedDataTreeService cachedDataTreeService;
private TransactionChainWriteTransaction writeTx;
private TransactionChainReadTransaction readTx;
private boolean finished = false;
public ShardedDOMTransactionChainAdapter(final Object txChainIdentifier,
- final DOMDataTreeService dataTreeService,
- final TransactionChainListener txChainListener) {
- Preconditions.checkNotNull(dataTreeService);
- Preconditions.checkNotNull(txChainIdentifier);
- this.dataTreeService = dataTreeService;
- this.txChainIdentifier = txChainIdentifier;
+ final DOMDataTreeService dataTreeService, final DOMTransactionChainListener txChainListener) {
+ this.dataTreeService = requireNonNull(dataTreeService);
+ this.txChainIdentifier = requireNonNull(txChainIdentifier);
this.txChainListener = txChainListener;
this.cachedDataTreeService = new CachedDataTreeService(dataTreeService);
}
checkWriteTxClosed();
writeTxCommitFuture.addCallback(new FutureCallback<CommitInfo>() {
@Override
- public void onSuccess(@Nullable final CommitInfo result) {
+ public void onSuccess(final CommitInfo result) {
txChainListener.onTransactionChainSuccessful(ShardedDOMTransactionChainAdapter.this);
}
}
private void checkWriteTxClosed() {
- Preconditions.checkState(writeTx == null);
+ checkState(writeTx == null);
}
private void checkReadTxClosed() {
- Preconditions.checkState(readTx == null);
+ checkState(readTx == null);
}
private void checkRunning() {
- Preconditions.checkState(!finished);
+ checkState(!finished);
}
- public void transactionFailed(final AsyncTransaction<?, ?> tx, final Throwable cause) {
+ public void transactionFailed(final DOMDataTreeTransaction tx, final Throwable cause) {
txChainListener.onTransactionChainFailed(this, tx, cause);
if (writeTx != null) {
writeTx.cancel();
finished = true;
}
- static class CachedDataTreeService implements DOMDataTreeService {
+ private static class CachedDataTreeService implements DOMDataTreeService {
private final DOMDataTreeService delegateTreeService;
private final Map<LogicalDatastoreType, NoopCloseDataProducer> producersMap =
producersMap.values().forEach(NoopCloseDataProducer::closeDelegate);
}
- @Nonnull
@Override
- public <T extends DOMDataTreeListener> ListenerRegistration<T> registerListener(
- @Nonnull final T listener, @Nonnull final Collection<DOMDataTreeIdentifier> subtrees,
- final boolean allowRxMerges, @Nonnull final Collection<DOMDataTreeProducer> producers)
- throws DOMDataTreeLoopException {
+ public <T extends DOMDataTreeListener> ListenerRegistration<T> registerListener(final T listener,
+ final Collection<DOMDataTreeIdentifier> subtrees, final boolean allowRxMerges,
+ final Collection<DOMDataTreeProducer> producers) throws DOMDataTreeLoopException {
return delegateTreeService.registerListener(listener, subtrees, allowRxMerges, producers);
}
}
@Override
- public DOMDataTreeProducer createProducer(@Nonnull final Collection<DOMDataTreeIdentifier> subtrees) {
- Preconditions.checkState(subtrees.size() == 1);
- NoopCloseDataProducer producer = null;
- for (final DOMDataTreeIdentifier treeId : subtrees) {
- producer =
- new NoopCloseDataProducer(delegateTreeService.createProducer(Collections.singleton(treeId)));
- producersMap.putIfAbsent(treeId.getDatastoreType(),
- producer);
- }
+ public DOMDataTreeProducer createProducer(final Collection<DOMDataTreeIdentifier> subtrees) {
+ checkState(subtrees.size() == 1);
+ DOMDataTreeIdentifier treeId = subtrees.iterator().next();
+ NoopCloseDataProducer producer = new NoopCloseDataProducer(delegateTreeService.createProducer(
+ Collections.singleton(treeId)));
+ producersMap.putIfAbsent(treeId.getDatastoreType(), producer);
return producer;
}
+ }
- static class NoopCloseDataProducer implements DOMDataTreeProducer {
-
- private final DOMDataTreeProducer delegateTreeProducer;
+ private static final class NoopCloseDataProducer implements DOMDataTreeProducer {
+ private final DOMDataTreeProducer delegateTreeProducer;
- NoopCloseDataProducer(final DOMDataTreeProducer delegateTreeProducer) {
- this.delegateTreeProducer = delegateTreeProducer;
- }
+ NoopCloseDataProducer(final DOMDataTreeProducer delegateTreeProducer) {
+ this.delegateTreeProducer = delegateTreeProducer;
+ }
- @Nonnull
- @Override
- public DOMDataTreeCursorAwareTransaction createTransaction(final boolean isolated) {
- return delegateTreeProducer.createTransaction(isolated);
- }
+ @Override
+ public DOMDataTreeCursorAwareTransaction createTransaction(final boolean isolated) {
+ return delegateTreeProducer.createTransaction(isolated);
+ }
- @Nonnull
- @Override
- public DOMDataTreeProducer createProducer(@Nonnull final Collection<DOMDataTreeIdentifier> subtrees) {
- return delegateTreeProducer.createProducer(subtrees);
- }
+ @Override
+ public DOMDataTreeProducer createProducer(final Collection<DOMDataTreeIdentifier> subtrees) {
+ return delegateTreeProducer.createProducer(subtrees);
+ }
- @Override
- public void close() throws DOMDataTreeProducerException {
- // noop
- }
+ @Override
+ public void close() {
+ // noop
+ }
- public void closeDelegate() {
- try {
- delegateTreeProducer.close();
- } catch (final DOMDataTreeProducerException e) {
- throw new IllegalStateException("Trying to close DOMDataTreeProducer with open transaction", e);
- }
+ public void closeDelegate() {
+ try {
+ delegateTreeProducer.close();
+ } catch (final DOMDataTreeProducerException e) {
+ throw new IllegalStateException("Trying to close DOMDataTreeProducer with open transaction", e);
}
}
}