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%2Factors%2Fdds%2FAbstractProxyTransaction.java;h=bf56376fcee3d538d483a063d652ae6d3d5a5654;hb=20ece8c549211d1c453f1763132bb0a0ca7be0e0;hp=8e4c757d33767877bb2065a3de45ab201d1bfaf7;hpb=7f15e81c52f2efda779c670580f0697227557404;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractProxyTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractProxyTransaction.java index 8e4c757d33..bf56376fce 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractProxyTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractProxyTransaction.java @@ -197,6 +197,13 @@ abstract class AbstractProxyTransaction implements Identifiable { + command.run(); + return behavior; + }); + } + final ActorRef localActor() { return parent.localActor(); } @@ -323,14 +330,18 @@ abstract class AbstractProxyTransaction implements Identifiable { + LOG.debug("Transaction {} abort completed with {}", getIdentifier(), resp); + enqueuePurge(); + }); } final void abort(final VotingFuture ret) { checkSealed(); - sendAbort(t -> { + sendDoAbort(t -> { if (t instanceof TransactionAbortSuccess) { ret.voteYes(); } else if (t instanceof RequestFailure) { @@ -341,16 +352,29 @@ abstract class AbstractProxyTransaction implements Identifiable> callback, final long enqueuedTicks) { + checkNotSealed(); + parent.abortTransaction(this); + + enqueueRequest(abortRequest(), resp -> { + LOG.debug("Transaction {} abort completed with {}", getIdentifier(), resp); + // Purge will be sent by the predecessor's callback + if (callback != null) { + callback.accept(resp); + } + }, enqueuedTicks); + } + + final void enqueueDoAbort(final Consumer> callback, final long enqueuedTicks) { enqueueRequest(new TransactionAbortRequest(getIdentifier(), nextSequence(), localActor()), callback, enqueuedTicks); } - final void sendAbort(final Consumer> callback) { + final void sendDoAbort(final Consumer> callback) { sendRequest(new TransactionAbortRequest(getIdentifier(), nextSequence(), localActor()), callback); } @@ -379,7 +403,7 @@ abstract class AbstractProxyTransaction implements Identifiable req = new TransactionPurgeRequest(getIdentifier(), nextSequence(), localActor()); - sendRequest(req, t -> { - LOG.debug("Transaction {} purge completed", this); - parent.completeTransaction(this); - }); + private void enqueuePurge() { + enqueuePurge(null); } - final void enqueuePurge(final long enqueuedTicks) { - successfulRequests.clear(); + final void enqueuePurge(final Consumer> callback) { + // Purge request are dispatched internally, hence should not wait + enqueuePurge(callback, parent.currentTime()); + } - final TransactionRequest req = new TransactionPurgeRequest(getIdentifier(), nextSequence(), localActor()); - enqueueRequest(req, t -> { + final void enqueuePurge(final Consumer> callback, final long enqueuedTicks) { + enqueueRequest(purgeRequest(), resp -> { LOG.debug("Transaction {} purge completed", this); parent.completeTransaction(this); + if (callback != null) { + callback.accept(resp); + } }, enqueuedTicks); } + private TransactionPurgeRequest purgeRequest() { + successfulRequests.clear(); + return new TransactionPurgeRequest(getIdentifier(), nextSequence(), localActor()); + } + // Called with the connection unlocked final synchronized void startReconnect() { // At this point canCommit/directCommit are blocked, we assert a new successor state, retrieving the previous @@ -537,7 +565,8 @@ abstract class AbstractProxyTransaction implements Identifiable { }, now); + increment.getSequence(), localActor(), isSnapshotOnly(), increment.getDelta()), resp -> { }, + now); LOG.debug("Incrementing sequence {} to successor {}", obj, successor); } } @@ -637,11 +666,11 @@ abstract class AbstractProxyTransaction implements Identifiable abortRequest(); + abstract TransactionRequest commitRequest(boolean coordinated); /**