X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatabroker%2FAbstractDOMBroker.java;h=91fd64d366f5fd5c9658e1236eff5991d036af40;hb=e258e0fef2bc38e35f09354f0fdd5136c69ad1a7;hp=e3b1c3039bfd92d926cd8129e92ede1d95796dea;hpb=f41c5e6e6f6e10b36b1e4b1992877e38e718c8fb;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBroker.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBroker.java index e3b1c3039b..91fd64d366 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBroker.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBroker.java @@ -5,19 +5,18 @@ * 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.cluster.databroker; import static com.google.common.base.Preconditions.checkState; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableMap.Builder; +import com.google.common.collect.ClassToInstanceMap; +import com.google.common.collect.ImmutableClassToInstanceMap; +import com.google.common.collect.ImmutableClassToInstanceMap.Builder; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.EnumMap; import java.util.Map; import java.util.concurrent.atomic.AtomicLong; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -import org.opendaylight.mdsal.common.api.TransactionChainListener; -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; @@ -26,6 +25,8 @@ import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohortRegistration; import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohortRegistry; import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; import org.opendaylight.mdsal.dom.api.DOMTransactionChain; +import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener; +import org.opendaylight.mdsal.dom.spi.PingPongMergingDOMDataBroker; import org.opendaylight.mdsal.dom.spi.store.DOMStore; import org.opendaylight.mdsal.dom.spi.store.DOMStoreTransactionChain; import org.opendaylight.mdsal.dom.spi.store.DOMStoreTreeChangePublisher; @@ -33,19 +34,21 @@ import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public abstract class AbstractDOMBroker extends AbstractDOMTransactionFactory implements DOMDataBroker { +public abstract class AbstractDOMBroker extends AbstractDOMTransactionFactory + implements PingPongMergingDOMDataBroker { private static final Logger LOG = LoggerFactory.getLogger(AbstractDOMBroker.class); private final AtomicLong txNum = new AtomicLong(); private final AtomicLong chainNum = new AtomicLong(); - private final Map, DOMDataBrokerExtension> extensions; + private final ClassToInstanceMap extensions; + private volatile AutoCloseable closeable; protected AbstractDOMBroker(final Map datastores) { super(datastores); - Builder, DOMDataBrokerExtension> extBuilder = ImmutableMap.builder(); + Builder extBuilder = ImmutableClassToInstanceMap.builder(); if (isSupported(datastores, DOMStoreTreeChangePublisher.class)) { extBuilder.put(DOMDataTreeChangeService.class, new DOMDataTreeChangeService() { @Override @@ -62,7 +65,7 @@ public abstract class AbstractDOMBroker extends AbstractDOMTransactionFactory DOMDataTreeCommitCohortRegistration registerCommitCohort( - DOMDataTreeIdentifier path, T cohort) { + final DOMDataTreeIdentifier path, final T cohort) { DOMStore store = getDOMStore(path.getDatastoreType()); return ((DOMDataTreeCommitCohortRegistry) store).registerCommitCohort(path, cohort); } @@ -72,15 +75,9 @@ public abstract class AbstractDOMBroker extends AbstractDOMTransactionFactory datastores, - Class expDOMStoreInterface) { - for (DOMStore ds : datastores.values()) { - if (!expDOMStoreInterface.isAssignableFrom(ds.getClass())) { - return false; - } - } - - return true; + private static boolean isSupported(final Map datastores, + final Class expDOMStoreInterface) { + return datastores.values().stream().allMatch(expDOMStoreInterface::isInstance); } public void setCloseable(final AutoCloseable closeable) { @@ -107,12 +104,12 @@ public abstract class AbstractDOMBroker extends AbstractDOMTransactionFactory, DOMDataBrokerExtension> getSupportedExtensions() { + public ClassToInstanceMap getExtensions() { return extensions; } @Override - public DOMTransactionChain createTransactionChain(final TransactionChainListener listener) { + public DOMTransactionChain createTransactionChain(final DOMTransactionChainListener listener) { checkNotClosed(); final Map backingChains = @@ -127,6 +124,8 @@ public abstract class AbstractDOMBroker extends AbstractDOMTransactionFactory