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%2Fdatastore%2FFrontendTransaction.java;h=b25e5da42a22f95b861bdbf9ea5cdbf2d331fecb;hb=0fdb21f91e0e61e8ee911beb4cda9053537a0ccd;hp=c0249fd00089d1bd48abe9793ddb8564fb937a94;hpb=d9e3fa9b7d4f1ad484931151c3b3ef237a674ab2;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/FrontendTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/FrontendTransaction.java index c0249fd000..b25e5da42a 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/FrontendTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/FrontendTransaction.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * Copyright (c) 2016, 2017 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, @@ -11,10 +11,12 @@ import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; import com.google.common.base.Verify; import java.util.ArrayDeque; -import java.util.Iterator; +import java.util.Optional; import java.util.Queue; import javax.annotation.Nullable; import javax.annotation.concurrent.NotThreadSafe; +import org.opendaylight.controller.cluster.access.commands.IncrementTransactionSequenceRequest; +import org.opendaylight.controller.cluster.access.commands.IncrementTransactionSequenceSuccess; import org.opendaylight.controller.cluster.access.commands.OutOfOrderRequestException; import org.opendaylight.controller.cluster.access.commands.TransactionRequest; import org.opendaylight.controller.cluster.access.commands.TransactionSuccess; @@ -93,16 +95,14 @@ abstract class FrontendTransaction implements Identifiable it = replayQueue.iterator(); - while (it.hasNext()) { - final Object replay = it.next(); + for (Object replay : replayQueue) { if (replaySequence == sequence) { if (replay instanceof RequestException) { throw (RequestException) replay; } Verify.verify(replay instanceof TransactionSuccess); - return java.util.Optional.of((TransactionSuccess) replay); + return Optional.of((TransactionSuccess) replay); } replaySequence++; @@ -120,8 +120,17 @@ abstract class FrontendTransaction implements Identifiable handleRequest(final TransactionRequest request, - final RequestEnvelope envelope, final long now) throws RequestException { + @Nullable + final TransactionSuccess handleRequest(final TransactionRequest request, final RequestEnvelope envelope, + final long now) throws RequestException { + if (request instanceof IncrementTransactionSequenceRequest) { + final IncrementTransactionSequenceRequest incr = (IncrementTransactionSequenceRequest) request; + expectedSequence += incr.getIncrement(); + + return recordSuccess(incr.getSequence(), + new IncrementTransactionSequenceSuccess(incr.getTarget(), incr.getSequence())); + } + if (previousFailure != null) { LOG.debug("{}: Rejecting request {} due to previous failure", persistenceId(), request, previousFailure); throw previousFailure; @@ -131,8 +140,10 @@ abstract class FrontendTransaction implements Identifiable doHandleRequest(TransactionRequest request, RequestEnvelope envelope, + @Nullable + abstract TransactionSuccess doHandleRequest(TransactionRequest request, RequestEnvelope envelope, long now) throws RequestException; + abstract void retire(); + private void recordResponse(final long sequence, final Object response) { if (replayQueue.isEmpty()) { firstReplaySequence = sequence; @@ -179,5 +193,4 @@ abstract class FrontendTransaction implements Identifiable