From: Robert Varga Date: Fri, 12 Sep 2014 12:41:29 +0000 (+0200) Subject: BUG-650: speedup AbstractDOMForwardedTransactionFactory X-Git-Tag: release/helium~93 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=5a33e2d70dcbf0d3072a5e78fc77558a92c6b899 BUG-650: speedup AbstractDOMForwardedTransactionFactory Another speedup -- as it turns out we do not have to take the full lock to close down the transaction factory. A volatile write is enough to do that -- which means a volatile read is enough to check for it having been closed. Change-Id: I3488ccccc4d91d34665b3ff6e70e047407be48bb Signed-off-by: Robert Varga --- diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/AbstractDOMForwardedTransactionFactory.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/AbstractDOMForwardedTransactionFactory.java index f48667b04f..6838e39093 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/AbstractDOMForwardedTransactionFactory.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/AbstractDOMForwardedTransactionFactory.java @@ -12,7 +12,7 @@ import com.google.common.collect.ImmutableMap; import java.util.EnumMap; import java.util.Map; import java.util.Map.Entry; -import javax.annotation.concurrent.GuardedBy; +import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction; import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction; @@ -38,11 +38,12 @@ import org.opendaylight.controller.sal.core.spi.data.DOMStoreWriteTransaction; * @param * Type of {@link DOMStoreTransactionFactory} factory. */ -public abstract class AbstractDOMForwardedTransactionFactory implements DOMDataCommitImplementation, AutoCloseable { - +abstract class AbstractDOMForwardedTransactionFactory implements DOMDataCommitImplementation, AutoCloseable { + @SuppressWarnings("rawtypes") + private static final AtomicIntegerFieldUpdater UPDATER = + AtomicIntegerFieldUpdater.newUpdater(AbstractDOMForwardedTransactionFactory.class, "closed"); private final Map storeTxFactories; - - private boolean closed; + private volatile int closed = 0; protected AbstractDOMForwardedTransactionFactory(final Map txFactories) { this.storeTxFactories = ImmutableMap.copyOf(txFactories); @@ -72,7 +73,7 @@ public abstract class AbstractDOMForwardedTransactionFactory txns = new EnumMap<>(LogicalDatastoreType.class); @@ -82,8 +83,6 @@ public abstract class AbstractDOMForwardedTransactionFactory txns = new EnumMap<>(LogicalDatastoreType.class); @@ -176,9 +175,8 @@ public abstract class AbstractDOMForwardedTransactionFactory txns = new EnumMap<>(LogicalDatastoreType.class); @@ -203,21 +201,19 @@ public abstract class AbstractDOMForwardedTransactionFactory exists( + @Override + public CheckedFuture exists( final LogicalDatastoreType store, final YangInstanceIdentifier path) { return getSubtransaction(store).exists(path);