You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2017/09/19 08:59:17 UTC
karaf git commit: [KARAF-5371] Race condition between FeatureService
and Fileinstall
Repository: karaf
Updated Branches:
refs/heads/karaf-4.1.x 15c578e88 -> 16bdd6446
[KARAF-5371] Race condition between FeatureService and Fileinstall
# Conflicts:
# features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
# features/core/src/main/java/org/apache/karaf/features/internal/region/DigraphHelper.java
# features/core/src/main/java/org/apache/karaf/features/internal/service/BundleInstallSupportImpl.java
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/16bdd644
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/16bdd644
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/16bdd644
Branch: refs/heads/karaf-4.1.x
Commit: 16bdd6446e5ebde92781a38e8a859aa33785fd2f
Parents: 15c578e
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Mon Sep 18 09:28:49 2017 +0200
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Tue Sep 19 10:51:54 2017 +0200
----------------------------------------------------------------------
.../karaf/features/internal/osgi/Activator.java | 1 +
.../features/internal/region/DigraphHelper.java | 47 +++++++++++---------
.../internal/service/FeaturesServiceImpl.java | 3 ++
3 files changed, 29 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/16bdd644/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 de439d4..e591c12 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
@@ -135,6 +135,7 @@ public class Activator extends BaseActivator {
register(org.osgi.framework.hooks.service.EventHook.class, dg.getServiceEventHook());
register(RegionDigraph.class, dg);
register(RegionDigraphPersistence.class, this::doPersistRegionDigraph);
+ DigraphHelper.verifyUnmanagedBundles(bundleContext, dg);
if (getBoolean("digraphMBean", FeaturesService.DEFAULT_DIGRAPH_MBEAN)) {
StandardManageableRegionDigraph dgmb = digraphMBean = new StandardManageableRegionDigraph(dg, "org.apache.karaf", bundleContext);
http://git-wip-us.apache.org/repos/asf/karaf/blob/16bdd644/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 71c77e2..a24649f 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
@@ -70,28 +70,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;
}
@@ -157,4 +135,29 @@ public final class DigraphHelper {
JsonWriter.write(out, json);
}
+ 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/16bdd644/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java b/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java
index 507f2aa..39a31d4 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java
@@ -1458,6 +1458,9 @@ public class FeaturesServiceImpl implements FeaturesService, Deployer.DeployCall
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);
}