X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatabroker%2Factors%2Fdds%2FProxyHistory.java;h=802d9ed0b33bc3a1fb5716a62d84bf03ffd266d3;hp=827c19e526fcbd5f6b3cc1c33dfdc40698af11e9;hb=28551609a31799a43d3017ba0681e198f5136d70;hpb=6c1d222b2f87af18e2488870b6708f91d5f6c6f8 diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ProxyHistory.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ProxyHistory.java index 827c19e526..802d9ed0b3 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ProxyHistory.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ProxyHistory.java @@ -11,6 +11,7 @@ import akka.actor.ActorRef; import com.google.common.base.Preconditions; import com.google.common.base.Verify; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Optional; @@ -213,12 +214,15 @@ abstract class ProxyHistory implements Identifiable { @Override void replayRequests(final Iterable previousEntries) { // First look for our Create message - for (ConnectionEntry e : previousEntries) { + Iterator it = previousEntries.iterator(); + while (it.hasNext()) { + final ConnectionEntry e = it.next(); final Request req = e.getRequest(); if (identifier.equals(req.getTarget())) { Verify.verify(req instanceof LocalHistoryRequest); if (req instanceof CreateLocalHistoryRequest) { successor.connection.sendRequest(req, e.getCallback()); + it.remove(); break; } } @@ -233,11 +237,17 @@ abstract class ProxyHistory implements Identifiable { } // Now look for any finalizing messages - for (ConnectionEntry e : previousEntries) { + it = previousEntries.iterator(); + while (it.hasNext()) { + final ConnectionEntry e = it.next(); final Request req = e.getRequest(); if (identifier.equals(req.getTarget())) { Verify.verify(req instanceof LocalHistoryRequest); - successor.connection.sendRequest(req, e.getCallback()); + if (req instanceof DestroyLocalHistoryRequest) { + successor.connection.sendRequest(req, e.getCallback()); + it.remove(); + break; + } } } } @@ -259,6 +269,8 @@ abstract class ProxyHistory implements Identifiable { @Override void forwardRequest(final Request request, final Consumer> callback, final BiConsumer, Consumer>> forwardTo) throws RequestException { + // FIXME: do not use sendRequest() once we have throttling in place, as we have already waited the + // period required to get into the queue. if (request instanceof TransactionRequest) { forwardTransactionRequest((TransactionRequest) request, callback); } else if (request instanceof LocalHistoryRequest) { @@ -325,6 +337,10 @@ abstract class ProxyHistory implements Identifiable { return identifier; } + final long currentTime() { + return connection.currentTime(); + } + final ActorRef localActor() { return connection.localActor(); } @@ -389,6 +405,11 @@ abstract class ProxyHistory implements Identifiable { } } + final void enqueueRequest(final TransactionRequest request, final Consumer> callback, + final long enqueuedTicks) { + connection.enqueueRequest(request, callback, enqueuedTicks); + } + final void sendRequest(final TransactionRequest request, final Consumer> callback) { connection.sendRequest(request, callback); }