X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-dom-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyang%2Fmd%2Fsal%2Fdom%2Fimpl%2FDomInmemoryDataBrokerModule.java;h=fffee73b9e8576ea6fccdb71e3ab554cd0e8966e;hb=3cd841f641ebd8e4c3002ad3a61d06d4c276a656;hp=8f01a393c6eb28cb494fe89c063d5ab3085237be;hpb=c66e710cd61119c4779784571e59cdc3b490673f;p=controller.git diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/dom/impl/DomInmemoryDataBrokerModule.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/dom/impl/DomInmemoryDataBrokerModule.java index 8f01a393c6..fffee73b9e 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/dom/impl/DomInmemoryDataBrokerModule.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/dom/impl/DomInmemoryDataBrokerModule.java @@ -7,6 +7,7 @@ */ package org.opendaylight.controller.config.yang.md.sal.dom.impl; +import com.google.common.collect.Lists; import java.util.EnumMap; import java.util.List; import java.util.Map; @@ -15,17 +16,13 @@ import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitDeadlockException; import org.opendaylight.controller.md.sal.common.util.jmx.AbstractMXBean; import org.opendaylight.controller.md.sal.common.util.jmx.ThreadExecutorStatsMXBeanImpl; -import org.opendaylight.controller.md.sal.dom.broker.impl.DOMConcurrentDataCommitCoordinator; -import org.opendaylight.controller.md.sal.dom.broker.impl.DOMDataBrokerImpl; -import org.opendaylight.controller.md.sal.dom.broker.impl.DOMDataCommitCoordinatorImpl; -import org.opendaylight.controller.md.sal.dom.broker.impl.DOMDataCommitExecutor; +import org.opendaylight.controller.md.sal.dom.broker.impl.SerializedDOMDataBroker; import org.opendaylight.controller.md.sal.dom.broker.impl.jmx.CommitStatsMXBeanImpl; import org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStoreFactory; import org.opendaylight.controller.sal.core.spi.data.DOMStore; import org.opendaylight.yangtools.util.DurationStatisticsTracker; import org.opendaylight.yangtools.util.concurrent.DeadlockDetectingListeningExecutorService; import org.opendaylight.yangtools.util.concurrent.SpecialExecutors; -import com.google.common.collect.Lists; /** * @@ -84,45 +81,32 @@ public final class DomInmemoryDataBrokerModule extends "CommitFutures"); final List mBeans = Lists.newArrayList(); + final DurationStatisticsTracker commitStatsTracker; - DOMDataCommitExecutor commitCoordinator; - DurationStatisticsTracker commitStatsTracker = null; - - if(getAllowConcurrentCommits()) { - DOMConcurrentDataCommitCoordinator coordinator = - new DOMConcurrentDataCommitCoordinator(listenableFutureExecutor); - commitStatsTracker = coordinator.getCommitStatsTracker(); - commitCoordinator = coordinator; - } else { - /* - * We use a single-threaded executor for commits with a bounded queue capacity. If the - * queue capacity is reached, subsequent commit tasks will be rejected and the commits will - * fail. This is done to relieve back pressure. This should be an extreme scenario - either - * there's deadlock(s) somewhere and the controller is unstable or some rogue component is - * continuously hammering commits too fast or the controller is just over-capacity for the - * system it's running on. - */ - ExecutorService commitExecutor = SpecialExecutors.newBoundedSingleThreadExecutor( - getMaxDataBrokerCommitQueueSize(), "WriteTxCommit"); - - DOMDataCommitCoordinatorImpl coordinator = new DOMDataCommitCoordinatorImpl( - new DeadlockDetectingListeningExecutorService(commitExecutor, - TransactionCommitDeadlockException.DEADLOCK_EXCEPTION_SUPPLIER, - listenableFutureExecutor)); - - commitStatsTracker = coordinator.getCommitStatsTracker(); - commitCoordinator = coordinator; - - final AbstractMXBean commitExecutorStatsMXBean = - ThreadExecutorStatsMXBeanImpl.create(commitExecutor, "CommitExecutorStats", - JMX_BEAN_TYPE, null); - if(commitExecutorStatsMXBean != null) { - mBeans.add(commitExecutorStatsMXBean); - } + /* + * We use a single-threaded executor for commits with a bounded queue capacity. If the + * queue capacity is reached, subsequent commit tasks will be rejected and the commits will + * fail. This is done to relieve back pressure. This should be an extreme scenario - either + * there's deadlock(s) somewhere and the controller is unstable or some rogue component is + * continuously hammering commits too fast or the controller is just over-capacity for the + * system it's running on. + */ + ExecutorService commitExecutor = SpecialExecutors.newBoundedSingleThreadExecutor( + getMaxDataBrokerCommitQueueSize(), "WriteTxCommit"); + + SerializedDOMDataBroker sdb = new SerializedDOMDataBroker(datastores, + new DeadlockDetectingListeningExecutorService(commitExecutor, + TransactionCommitDeadlockException.DEADLOCK_EXCEPTION_SUPPLIER, + listenableFutureExecutor)); + commitStatsTracker = sdb.getCommitStatsTracker(); + + final AbstractMXBean commitExecutorStatsMXBean = + ThreadExecutorStatsMXBeanImpl.create(commitExecutor, "CommitExecutorStats", + JMX_BEAN_TYPE, null); + if(commitExecutorStatsMXBean != null) { + mBeans.add(commitExecutorStatsMXBean); } - DOMDataBrokerImpl newDataBroker = new DOMDataBrokerImpl(datastores, commitCoordinator); - if(commitStatsTracker != null) { final CommitStatsMXBeanImpl commitStatsMXBean = new CommitStatsMXBeanImpl( commitStatsTracker, JMX_BEAN_TYPE); @@ -137,7 +121,7 @@ public final class DomInmemoryDataBrokerModule extends mBeans.add(commitFutureStatsMXBean); } - newDataBroker.setCloseable(new AutoCloseable() { + sdb.setCloseable(new AutoCloseable() { @Override public void close() { for(AbstractMXBean mBean: mBeans) { @@ -146,6 +130,6 @@ public final class DomInmemoryDataBrokerModule extends } }); - return newDataBroker; + return sdb; } }