Bug 2014: Workaround for karaf listFeatures bug 31/11431/2
authorEd Warnicke <eaw@cisco.com>
Mon, 22 Sep 2014 03:01:42 +0000 (22:01 -0500)
committerEd Warnicke <eaw@cisco.com>
Mon, 22 Sep 2014 11:15:47 +0000 (06:15 -0500)
karaf FeatureService.listInstalledFeatures() sometimes
throws a ConcurrentModificationException, this workaround
retries to make sure we succeed.

Change-Id: I4e307d5daba683dfc1b44b6524ce40b3b0e59d1b
Signed-off-by: Ed Warnicke <eaw@cisco.com>
opendaylight/config/config-persister-feature-adapter/src/main/java/org/opendaylight/controller/configpusherfeature/internal/FeatureConfigPusher.java

index 1c094ad2dcea5b4def01253d4e6507a1b60a61f1..57052f9d6003fc14a84761acc146d1bf678e0f7a 100644 (file)
@@ -26,6 +26,7 @@ import com.google.common.collect.LinkedHashMultimap;
  */
 public class FeatureConfigPusher {
     private static final Logger logger = LoggerFactory.getLogger(FeatureConfigPusher.class);
+    private static final int MAX_RETRIES=100;
     private FeaturesService featuresService = null;
     private ConfigPusher pusher = null;
     /*
@@ -82,7 +83,29 @@ public class FeatureConfigPusher {
     }
 
     private boolean isInstalled(Feature feature) {
-        List<Feature> installedFeatures = Arrays.asList(featuresService.listInstalledFeatures());
+        List<Feature> installedFeatures= null;
+        boolean cont = true;
+        int retries = 0;
+        while(cont) {
+            try {
+                installedFeatures = Arrays.asList(featuresService.listInstalledFeatures());
+                break;
+            } catch (Exception e) {
+                if(retries < MAX_RETRIES) {
+                    logger.warn("Karaf featuresService.listInstalledFeatures() has thrown an exception, retry {}, Exception {}", retries,e);
+                    try {
+                        Thread.sleep(1);
+                    } catch (InterruptedException e1) {
+                        throw new IllegalStateException(e1);
+                    }
+                    retries++;
+                    continue;
+                } else {
+                    logger.error("Giving up on Karaf featuresService.listInstalledFeatures() which has thrown an exception, retry {}, Exception {}", retries,e);
+                    throw e;
+                }
+            }
+        }
         return installedFeatures.contains(feature);
     }