SAMZA-2463: Duplicate firings of processing timers (#1282)

Remove the keys from the local book keeping map directly instead of using the keySet and removeAll
diff --git a/samza-core/src/main/java/org/apache/samza/scheduler/EpochTimeScheduler.java b/samza-core/src/main/java/org/apache/samza/scheduler/EpochTimeScheduler.java
index ddc5b29..cbebbde 100644
--- a/samza-core/src/main/java/org/apache/samza/scheduler/EpochTimeScheduler.java
+++ b/samza-core/src/main/java/org/apache/samza/scheduler/EpochTimeScheduler.java
@@ -90,7 +90,11 @@
 
   public Map<TimerKey<?>, ScheduledCallback> removeReadyTimers() {
     final Map<TimerKey<?>, ScheduledCallback> timers = new TreeMap<>(readyTimers);
-    readyTimers.keySet().removeAll(timers.keySet());
+    // Remove keys on the map directly instead of using key set iterator and remove all
+    // on the key set as it results in duplicate firings due to weakly consistent SetView
+    for (TimerKey<?> key : timers.keySet()) {
+      readyTimers.remove(key);
+    }
     return timers;
   }