X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatabroker%2Factors%2Fdds%2FAbstractClientHistory.java;h=7608556e6e8a0ad67d7c6a634c80dc2f70a4fa80;hb=1d34f75864ac09d31ef0f7b4ef59f7434167ae15;hp=fda9a16ab8d597f3271b37619735de9db5f73b4a;hpb=95208fa5d24f3d7c2362ee619c9a6a294a69f7cd;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractClientHistory.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractClientHistory.java index fda9a16ab8..7608556e6e 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractClientHistory.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractClientHistory.java @@ -34,7 +34,7 @@ abstract class AbstractClientHistory extends LocalAbortable implements Identifia private static final AtomicReferenceFieldUpdater STATE_UPDATER = AtomicReferenceFieldUpdater.newUpdater(AbstractClientHistory.class, State.class, "state"); - private final Map histories = new ConcurrentHashMap<>(); + private final Map histories = new ConcurrentHashMap<>(); private final DistributedDataStoreClientBehavior client; private final LocalHistoryIdentifier identifier; @@ -55,19 +55,6 @@ abstract class AbstractClientHistory extends LocalAbortable implements Identifia Preconditions.checkState(success, "Race condition detected, state changed from %s to %s", expected, state); } - private LocalHistoryIdentifier getHistoryForCookie(final Long cookie) { - LocalHistoryIdentifier ret = histories.get(cookie); - if (ret == null) { - ret = new LocalHistoryIdentifier(identifier.getClientId(), identifier.getHistoryId(), cookie); - final LocalHistoryIdentifier existing = histories.putIfAbsent(cookie, ret); - if (existing != null) { - ret = existing; - } - } - - return ret; - } - @Override public final LocalHistoryIdentifier getIdentifier() { return identifier; @@ -83,9 +70,15 @@ abstract class AbstractClientHistory extends LocalAbortable implements Identifia state = State.CLOSED; } + private AbstractProxyHistory createHistoryProxy(final Long shard) { + final LocalHistoryIdentifier historyId = new LocalHistoryIdentifier(identifier.getClientId(), + identifier.getHistoryId(), shard); + return AbstractProxyHistory.create(client, client.resolver().getFutureBackendInfo(shard), historyId); + } + final AbstractProxyTransaction createTransactionProxy(final TransactionIdentifier transactionId, final Long shard) { - return AbstractProxyTransaction.create(client, getHistoryForCookie(shard), - transactionId.getTransactionId(), client.resolver().getFutureBackendInfo(shard)); + final AbstractProxyHistory history = histories.computeIfAbsent(shard, this::createHistoryProxy); + return history.createTransactionProxy(transactionId); } /**