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=68191fbbc2827d182cf4fc53c5bf77cfb8c64f42;hb=c43554ce37301ff2c5bf76ca5bbd3f2ce87f8009;hp=45b82ddec5f660a33d28e623076096c7a63aa664;hpb=925cb4a228d0fda99c7bfeb432eb25285a223887;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 45b82ddec5..68191fbbc2 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 @@ -11,7 +11,7 @@ package org.opendaylight.controller.cluster.databroker; import static com.google.common.base.Preconditions.checkState; import com.google.common.collect.ImmutableMap; -import java.util.Collections; +import com.google.common.collect.ImmutableMap.Builder; import java.util.EnumMap; import java.util.Map; import java.util.concurrent.atomic.AtomicLong; @@ -22,18 +22,21 @@ import org.opendaylight.controller.md.sal.dom.api.DOMDataBrokerExtension; import org.opendaylight.controller.md.sal.dom.api.DOMDataChangeListener; import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeListener; import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeService; +import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeCommitCohortRegistry; import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeIdentifier; import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain; import org.opendaylight.controller.sal.core.spi.data.DOMStore; import org.opendaylight.controller.sal.core.spi.data.DOMStoreTransactionChain; import org.opendaylight.controller.sal.core.spi.data.DOMStoreTreeChangePublisher; +import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohort; +import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohortRegistration; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; abstract class AbstractDOMBroker extends AbstractDOMTransactionFactory - implements DOMDataBroker, AutoCloseable { + implements DOMDataBroker { private static final Logger LOG = LoggerFactory.getLogger(AbstractDOMBroker.class); @@ -45,29 +48,58 @@ abstract class AbstractDOMBroker extends AbstractDOMTransactionFactory protected AbstractDOMBroker(final Map datastores) { super(datastores); - boolean treeChange = true; - for (DOMStore ds : datastores.values()) { - if (!(ds instanceof DOMStoreTreeChangePublisher)) { - treeChange = false; - break; - } - } - - if (treeChange) { - extensions = ImmutableMap.of(DOMDataTreeChangeService.class, new DOMDataTreeChangeService() { + Builder, DOMDataBrokerExtension> extBuilder = ImmutableMap.builder(); + if (isSupported(datastores, DOMStoreTreeChangePublisher.class)) { + extBuilder.put(DOMDataTreeChangeService.class, new DOMDataTreeChangeService() { @Override public ListenerRegistration registerDataTreeChangeListener( final DOMDataTreeIdentifier treeId, final L listener) { - DOMStore publisher = getTxFactories().get(treeId.getDatastoreType()); - checkState(publisher != null, "Requested logical data store is not available."); + DOMStore store = getTxFactories().get(treeId.getDatastoreType()); + checkState(store != null, "Requested logical data store is not available."); - return ((DOMStoreTreeChangePublisher) publisher).registerTreeChangeListener( + return ((DOMStoreTreeChangePublisher) store).registerTreeChangeListener( treeId.getRootIdentifier(), listener); } }); - } else { - extensions = Collections.emptyMap(); } + + if (isSupported(datastores, org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohortRegistry.class)) { + extBuilder.put(DOMDataTreeCommitCohortRegistry.class, new DOMDataTreeCommitCohortRegistry() { + @Override + public DOMDataTreeCommitCohortRegistration registerCommitCohort( + org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier path, T cohort) { + DOMStore store = getTxFactories().get(toLegacy(path.getDatastoreType())); + checkState(store != null, "Requested logical data store is not available."); + + return ((org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohortRegistry) store) + .registerCommitCohort(path, cohort); + } + }); + } + + extensions = extBuilder.build(); + } + + private static LogicalDatastoreType toLegacy(org.opendaylight.mdsal.common.api.LogicalDatastoreType datastoreType) { + switch (datastoreType) { + case CONFIGURATION: + return LogicalDatastoreType.CONFIGURATION; + case OPERATIONAL: + return LogicalDatastoreType.OPERATIONAL; + default: + throw new IllegalArgumentException("Unsupported data store type: " + datastoreType); + } + } + + private static boolean isSupported(Map datastores, + Class expDOMStoreInterface) { + for (DOMStore ds : datastores.values()) { + if (!expDOMStoreInterface.isAssignableFrom(ds.getClass())) { + return false; + } + } + + return true; } public void setCloseable(final AutoCloseable closeable) {