void scheduleSmrs(MapRequestBuilder mrb, Iterator<Subscriber> subscribers) {
final Eid srcEid = mrb.getSourceEid().getEid();
+ cancelExistingFuturesForEid(srcEid);
+
final Map<Subscriber, ScheduledFuture<?>> subscriberFutureMap = Maps.newConcurrentMap();
// Using Iterator ensures that we don't get a ConcurrentModificationException when removing a Subscriber
}
}
+ private void cancelExistingFuturesForEid(Eid eid) {
+ synchronized (eidFutureMap) {
+ if (eidFutureMap.containsKey(eid)) {
+ final Map<Subscriber, ScheduledFuture<?>> subscriberFutureMap = eidFutureMap.get(eid);
+ Iterator<Subscriber> oldSubscribers = subscriberFutureMap.keySet().iterator();
+ while (oldSubscribers.hasNext()) {
+ Subscriber subscriber = oldSubscribers.next();
+ ScheduledFuture<?> subscriberFuture = subscriberFutureMap.get(subscriber);
+ subscriberFuture.cancel(true);
+ }
+ eidFutureMap.remove(eid);
+ }
+ }
+ }
+
private final class CancellableRunnable implements Runnable {
private MapRequestBuilder mrb;
private Subscriber subscriber;