You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2017/09/19 08:33:11 UTC

[1/2] karaf git commit: [KARAF-5371] Race condition between FeatureService and Fileinstall

Repository: karaf
Updated Branches:
  refs/heads/master f78f18142 -> 675bd8fc5


[KARAF-5371] Race condition between FeatureService and Fileinstall


Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/65bd1fc0
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/65bd1fc0
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/65bd1fc0

Branch: refs/heads/master
Commit: 65bd1fc0f9c1b3b43e5dc7461092a954af0e7cd8
Parents: f78f181
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Mon Sep 18 09:28:49 2017 +0200
Committer: Jean-Baptiste Onofré <jb...@apache.org>
Committed: Tue Sep 19 09:13:17 2017 +0200

----------------------------------------------------------------------
 .../karaf/features/internal/osgi/Activator.java |  7 ++-
 .../features/internal/region/DigraphHelper.java | 47 +++++++++++---------
 .../service/BundleInstallSupportImpl.java       |  3 ++
 3 files changed, 33 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/65bd1fc0/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java b/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
index 876ec8e..2bfbb62 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
@@ -58,6 +58,7 @@ import org.eclipse.equinox.internal.region.StandardRegionDigraph;
 import org.eclipse.equinox.internal.region.management.StandardManageableRegionDigraph;
 import org.eclipse.equinox.region.RegionDigraph;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleException;
 import org.osgi.framework.ServiceReference;
 import org.osgi.framework.hooks.bundle.CollisionHook;
 import org.osgi.framework.hooks.resolver.ResolverHookFactory;
@@ -132,7 +133,7 @@ public class Activator extends BaseActivator {
         StandardRegionDigraph dg = DigraphHelper.loadDigraph(bundleContext);
         registerRegionDiGraph(dg);
         boolean configCfgStore = getBoolean("configCfgStore", FeaturesService.DEFAULT_CONFIG_CFG_STORE);
-        FeatureConfigInstaller configInstaller = configurationAdmin != null ? new FeatureConfigInstaller(configurationAdmin, configCfgStore) : null;
+        FeatureConfigInstaller configInstaller = new FeatureConfigInstaller(configurationAdmin, configCfgStore);
         installSupport = new BundleInstallSupportImpl(
                     bundleContext.getBundle(),
                     bundleContext,
@@ -247,7 +248,7 @@ public class Activator extends BaseActivator {
     }
 
     @SuppressWarnings("deprecation")
-    private void registerRegionDiGraph(StandardRegionDigraph dg) {
+    private void registerRegionDiGraph(StandardRegionDigraph dg) throws BundleException {
         register(ResolverHookFactory.class, dg.getResolverHookFactory());
         register(CollisionHook.class, CollisionHookHelper.getCollisionHook(dg));
         register(org.osgi.framework.hooks.bundle.FindHook.class, dg.getBundleFindHook());
@@ -260,6 +261,8 @@ public class Activator extends BaseActivator {
             StandardManageableRegionDigraph dgmb = digraphMBean = new StandardManageableRegionDigraph(dg, "org.apache.karaf", bundleContext);
             dgmb.registerMBean();
         }
+
+        DigraphHelper.verifyUnmanagedBundles(bundleContext, dg);
     }
 
     private ServiceTracker<FeaturesListener, FeaturesListener> createFeatureListenerTracker() {

http://git-wip-us.apache.org/repos/asf/karaf/blob/65bd1fc0/features/core/src/main/java/org/apache/karaf/features/internal/region/DigraphHelper.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/region/DigraphHelper.java b/features/core/src/main/java/org/apache/karaf/features/internal/region/DigraphHelper.java
index 944fe6f..265fb94 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/region/DigraphHelper.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/region/DigraphHelper.java
@@ -72,28 +72,6 @@ public final class DigraphHelper {
                 digraph = readDigraph(new DataInputStream(in), bundleContext, threadLocal);
             }
         }
-        // Create default region is missing
-        Region defaultRegion = digraph.getRegion(FeaturesServiceImpl.ROOT_REGION);
-        if (defaultRegion == null) {
-            defaultRegion = digraph.createRegion(FeaturesServiceImpl.ROOT_REGION);
-        }
-        // Add all unknown bundle to default region
-        Set<Long> ids = new HashSet<>();
-        for (Bundle bundle : bundleContext.getBundles()) {
-            long id = bundle.getBundleId();
-            ids.add(id);
-            if (digraph.getRegion(id) == null) {
-                defaultRegion.addBundle(id);
-            }
-        }
-        // Clean stalled bundles
-        for (Region region : digraph) {
-            Set<Long> bundleIds = new HashSet<>(region.getBundleIds());
-            bundleIds.removeAll(ids);
-            for (long id : bundleIds) {
-                region.removeBundle(id);
-            }
-        }
         return digraph;
     }
 
@@ -191,4 +169,29 @@ public final class DigraphHelper {
         }
         return filtersPerRegion;
     }
+
+    public static void verifyUnmanagedBundles(BundleContext bundleContext, RegionDigraph dg) throws BundleException {
+        // Create default region is missing
+        Region defaultRegion = dg.getRegion(FeaturesServiceImpl.ROOT_REGION);
+        if (defaultRegion == null) {
+            defaultRegion = dg.createRegion(FeaturesServiceImpl.ROOT_REGION);
+        }
+        // Add all unknown bundle to default region
+        Set<Long> ids = new HashSet<>();
+        for (Bundle bundle : bundleContext.getBundles()) {
+            long id = bundle.getBundleId();
+            ids.add(id);
+            if (dg.getRegion(id) == null) {
+                defaultRegion.addBundle(id);
+            }
+        }
+        // Clean stalled bundles
+        for (Region region : dg) {
+            Set<Long> bundleIds = new HashSet<>(region.getBundleIds());
+            bundleIds.removeAll(ids);
+            for (long id : bundleIds) {
+                region.removeBundle(id);
+            }
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/65bd1fc0/features/core/src/main/java/org/apache/karaf/features/internal/service/BundleInstallSupportImpl.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/service/BundleInstallSupportImpl.java b/features/core/src/main/java/org/apache/karaf/features/internal/service/BundleInstallSupportImpl.java
index e4cfa62..4463465 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/service/BundleInstallSupportImpl.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/service/BundleInstallSupportImpl.java
@@ -247,6 +247,9 @@ public class BundleInstallSupportImpl implements BundleInstallSupport {
                 region1.connectRegion(region2, rfb.build());
             }
         }
+        // Verify that no other bundles have been installed externally in the mean time
+        DigraphHelper.verifyUnmanagedBundles(systemBundleContext, temp);
+        // Do replace
         digraph.replace(temp);
     }
     


[2/2] karaf git commit: [KARAF-5371] This closes #373

Posted by jb...@apache.org.
[KARAF-5371] This closes #373


Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/675bd8fc
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/675bd8fc
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/675bd8fc

Branch: refs/heads/master
Commit: 675bd8fc5a3b97de3fbb08ef1a009241555d321e
Parents: f78f181 65bd1fc
Author: Jean-Baptiste Onofré <jb...@apache.org>
Authored: Tue Sep 19 10:33:05 2017 +0200
Committer: Jean-Baptiste Onofré <jb...@apache.org>
Committed: Tue Sep 19 10:33:05 2017 +0200

----------------------------------------------------------------------
 .../karaf/features/internal/osgi/Activator.java |  7 ++-
 .../features/internal/region/DigraphHelper.java | 47 +++++++++++---------
 .../service/BundleInstallSupportImpl.java       |  3 ++
 3 files changed, 33 insertions(+), 24 deletions(-)
----------------------------------------------------------------------