BUG-8491: Remove requests as they are replayed
[controller.git] / opendaylight / md-sal / cds-access-client / src / main / java / org / opendaylight / controller / cluster / access / client / AbstractClientConnection.java
index 4dfe43b0892ef2507ff658c17771797722fe6106..47c0676979b94ea291532e5b713aee0bbcbece56 100644 (file)
@@ -13,6 +13,7 @@ import com.google.common.base.MoreObjects;
 import com.google.common.base.MoreObjects.ToStringHelper;
 import com.google.common.base.Preconditions;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import com.google.common.base.MoreObjects.ToStringHelper;
 import com.google.common.base.Preconditions;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import java.util.Iterator;
 import java.util.Optional;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.Lock;
 import java.util.Optional;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.Lock;
@@ -162,13 +163,21 @@ public abstract class AbstractClientConnection<T extends BackendInfo> {
 
     @GuardedBy("lock")
     final void finishReplay(final ReconnectForwarder forwarder) {
 
     @GuardedBy("lock")
     final void finishReplay(final ReconnectForwarder forwarder) {
-        setForwarder(forwarder);
+        queue.setForwarder(forwarder);
         lock.unlock();
     }
 
     @GuardedBy("lock")
     final void setForwarder(final ReconnectForwarder forwarder) {
         lock.unlock();
     }
 
     @GuardedBy("lock")
     final void setForwarder(final ReconnectForwarder forwarder) {
-        queue.setForwarder(forwarder, currentTime());
+        final long now = currentTime();
+        final Iterator<ConnectionEntry> it = queue.asIterable().iterator();
+        while (it.hasNext()) {
+            final ConnectionEntry e = it.next();
+            forwarder.forwardEntry(e, now);
+            it.remove();
+        }
+
+        queue.setForwarder(forwarder);
     }
 
     @GuardedBy("lock")
     }
 
     @GuardedBy("lock")