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(-)
----------------------------------------------------------------------