From b053e2971dc677fd3c71168777c1f1851a022040 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Fri, 23 Jan 2015 19:57:47 +0100 Subject: [PATCH] Improve AbstractLeader tracker removal The remove operation performs a linear lookup by index and perform a second iteration to find the object again. Instead of that, instantiate an iterator and use its remove() method to elide the second lookup. Change-Id: Ida2a5c327115d2da787e397311c0a0c5a46a0d43 Signed-off-by: Robert Varga --- .../cluster/raft/behaviors/AbstractLeader.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/AbstractLeader.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/AbstractLeader.java index eba5e7b069..ab11c5bd84 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/AbstractLeader.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/AbstractLeader.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -84,7 +85,7 @@ public abstract class AbstractLeader extends AbstractRaftActorBehavior { private Cancellable heartbeatSchedule = null; - private List trackerList = new ArrayList<>(); + private final Collection trackerList = new ArrayList<>(); protected final int minReplicationCount; @@ -230,13 +231,16 @@ public abstract class AbstractLeader extends AbstractRaftActorBehavior { @Override protected ClientRequestTracker removeClientRequestTracker(long logIndex) { - - ClientRequestTracker toRemove = findClientRequestTracker(logIndex); - if(toRemove != null) { - trackerList.remove(toRemove); + final Iterator it = trackerList.iterator(); + while (it.hasNext()) { + final ClientRequestTracker t = it.next(); + if (t.getIndex() == logIndex) { + it.remove(); + return t; + } } - return toRemove; + return null; } @Override -- 2.36.6