X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatabroker%2FConcurrentDOMDataBroker.java;h=bdaa6db6c1a1f1d3fc08b10c25f8f83ee27b5a60;hp=e8b19b8346cecbb4c8b9d740b434cfbee7d0be7e;hb=281fa4f5d175c989619098ed4099085ae3aa4da7;hpb=b30c169bfb4e94d7a519be55dd1f97ccdec5327c diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/ConcurrentDOMDataBroker.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/ConcurrentDOMDataBroker.java index e8b19b8346..bdaa6db6c1 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/ConcurrentDOMDataBroker.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/ConcurrentDOMDataBroker.java @@ -29,6 +29,10 @@ import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; import org.opendaylight.controller.md.sal.dom.broker.impl.TransactionCommitFailedExceptionMapper; import org.opendaylight.controller.sal.core.spi.data.DOMStore; import org.opendaylight.controller.sal.core.spi.data.DOMStoreThreePhaseCommitCohort; +import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohort; +import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohortRegistration; +import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohortRegistry; +import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; import org.opendaylight.yangtools.util.DurationStatisticsTracker; import org.opendaylight.yangtools.util.concurrent.MappingCheckedFuture; import org.slf4j.Logger; @@ -42,7 +46,7 @@ import org.slf4j.LoggerFactory; * @author Thomas Pantelis */ @Beta -public class ConcurrentDOMDataBroker extends AbstractDOMBroker { +public class ConcurrentDOMDataBroker extends AbstractDOMBroker implements DOMDataTreeCommitCohortRegistry { private static final Logger LOG = LoggerFactory.getLogger(ConcurrentDOMDataBroker.class); private static final String CAN_COMMIT = "CAN_COMMIT"; private static final String PRE_COMMIT = "PRE_COMMIT"; @@ -259,7 +263,7 @@ public class ConcurrentDOMDataBroker extends AbstractDOMBroker { /** * ThreadLocal used to detect if the task completion thread is running the future listener Runnables. */ - private static final ThreadLocal ON_TASK_COMPLETION_THREAD_TL = new ThreadLocal(); + private static final ThreadLocal ON_TASK_COMPLETION_THREAD_TL = new ThreadLocal<>(); private final Executor listenerExecutor; @@ -325,4 +329,30 @@ public class ConcurrentDOMDataBroker extends AbstractDOMBroker { } } } + + @Override + public DOMDataTreeCommitCohortRegistration registerCommitCohort( + DOMDataTreeIdentifier path, T cohort) { + DOMStore store = getTxFactories().get(toLegacy(path.getDatastoreType())); + if (store instanceof DOMDataTreeCommitCohortRegistry) { + return ((DOMDataTreeCommitCohortRegistry) store).registerCommitCohort(path, cohort); + } + throw new UnsupportedOperationException("Commit cohort is not supported for " + path); + } + + 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); + } + } + + @Override + public String toString() { + return "Clustered ConcurrentDOMDataBroker"; + } }