killbill-uncached

Fix Mock notificationQ class

3/14/2013 7:56:05 PM

Details

diff --git a/util/src/test/java/com/ning/billing/util/notificationq/MockNotificationQueueService.java b/util/src/test/java/com/ning/billing/util/notificationq/MockNotificationQueueService.java
index 6550c4c..21342ef 100644
--- a/util/src/test/java/com/ning/billing/util/notificationq/MockNotificationQueueService.java
+++ b/util/src/test/java/com/ning/billing/util/notificationq/MockNotificationQueueService.java
@@ -17,6 +17,8 @@
 package com.ning.billing.util.notificationq;
 
 import java.util.ArrayList;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
 import java.util.List;
 
 import com.ning.billing.util.clock.Clock;
@@ -42,13 +44,24 @@ public class MockNotificationQueueService extends NotificationQueueServiceBase {
     @Override
     public int doProcessEvents() {
 
-        int result = 0;
-        synchronized (queues) {
-            for (NotificationQueue cur : queues.values()) {
-                result += doProcessEventsForQueue((MockNotificationQueue) cur);
+        int retry = 2;
+        do {
+            try {
+                int result = 0;
+                Iterator<String> it = queues.keySet().iterator();
+                while (it.hasNext()) {
+                    final String queueName = it.next();
+                    final NotificationQueue cur = queues.get(queueName);
+                    if (cur != null) {
+                        result += doProcessEventsForQueue((MockNotificationQueue) cur);
+                    }
+                }
+                return result;
+            } catch (ConcurrentModificationException e) {
+                retry--;
             }
-        }
-        return result;
+        } while (retry > 0);
+        return 0;
     }
 
     private int doProcessEventsForQueue(final MockNotificationQueue queue) {