You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by ff...@apache.org on 2015/04/03 05:40:36 UTC
[1/2] karaf git commit: [KARAF-3642]bundles mistaken got unstalled
even though it has a depending feature with it.
Repository: karaf
Updated Branches:
refs/heads/karaf-3.0.x 5340c128e -> 44f638419
[KARAF-3642]bundles mistaken got unstalled even though it has a depending feature with it.
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/2a7bd9a5
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/2a7bd9a5
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/2a7bd9a5
Branch: refs/heads/karaf-3.0.x
Commit: 2a7bd9a5ac244fd63cad3e2e4bbb9ea5a2219c36
Parents: d5b0f4a
Author: Freeman Fang <fr...@gmail.com>
Authored: Fri Apr 3 11:39:46 2015 +0800
Committer: Freeman Fang <fr...@gmail.com>
Committed: Fri Apr 3 11:39:46 2015 +0800
----------------------------------------------------------------------
.../karaf/features/internal/BundleManager.java | 42 ++++++++++++++++++++
.../features/internal/FeaturesServiceImpl.java | 8 ++++
.../karaf/features/FeaturesServiceTest.java | 13 +++++-
.../internal/FeaturesServiceImplTest.java | 5 +++
4 files changed, 67 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/2a7bd9a5/features/core/src/main/java/org/apache/karaf/features/internal/BundleManager.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/BundleManager.java b/features/core/src/main/java/org/apache/karaf/features/internal/BundleManager.java
index 1eb0d06..086b3e2 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/BundleManager.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/BundleManager.java
@@ -157,6 +157,48 @@ public class BundleManager {
is.close();
}
}
+
+ public Bundle isBundleInstalled(String bundleLocation) throws IOException, BundleException {
+ InputStream is = getInputStreamForBundle(bundleLocation);
+ try {
+ is.mark(256 * 1024);
+ @SuppressWarnings("resource")
+ JarInputStream jar = new JarInputStream(is);
+ Manifest m = jar.getManifest();
+ if (m == null) {
+ ZipEntry entry;
+ while ((entry = jar.getNextEntry()) != null) {
+ if (MANIFEST_NAME.equals(entry.getName())) {
+ m = new Manifest(jar);
+ break;
+ }
+ }
+ if (m == null) {
+ throw new BundleException("Manifest not present in the zip " + bundleLocation);
+ }
+ }
+ String sn = m.getMainAttributes().getValue(Constants.BUNDLE_SYMBOLICNAME);
+ if (sn == null) {
+ throw new BundleException("Jar is not a bundle, no Bundle-SymbolicName " + bundleLocation);
+ }
+ // remove attributes from the symbolic name (like
+ // ;blueprint.graceperiod:=false suffix)
+ int attributeIndexSep = sn.indexOf(';');
+ if (attributeIndexSep != -1) {
+ sn = sn.substring(0, attributeIndexSep);
+ }
+ String vStr = m.getMainAttributes().getValue(Constants.BUNDLE_VERSION);
+ Version v = vStr == null ? Version.emptyVersion : Version.parseVersion(vStr);
+ Bundle existingBundle = findInstalled(sn, v);
+ if (existingBundle != null) {
+ LOGGER.debug("Found installed bundle: " + existingBundle);
+ return existingBundle;
+ }
+ return null;
+ } finally {
+ is.close();
+ }
+ }
private Bundle findInstalled(String symbolicName, Version version) {
String vStr;
http://git-wip-us.apache.org/repos/asf/karaf/blob/2a7bd9a5/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java b/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
index 17691b4..b79f110 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
@@ -573,6 +573,14 @@ public class FeaturesServiceImpl implements FeaturesService {
}
}
+
+ for (BundleInfo bInfo : feature.getBundles()) {
+ Bundle bundle = bundleManager.isBundleInstalled(bInfo.getLocation());
+ if (bundle != null && !bundles.contains(bundle.getBundleId())) {
+ bundles.add(bundle.getBundleId());
+ }
+ }
+
state.features.put(feature, bundles);
}
}
http://git-wip-us.apache.org/repos/asf/karaf/blob/2a7bd9a5/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java
----------------------------------------------------------------------
diff --git a/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java b/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java
index 41dcdf7..e158cc0 100644
--- a/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java
+++ b/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java
@@ -88,6 +88,7 @@ public class FeaturesServiceTest extends TestBase {
reset(bundleManager);
expect(bundleManager.installBundleIfNeeded(eq("bundle-f1"), eq(0), eq((String)null))).andReturn(new BundleInstallerResult(installedBundle, true));
+ expect(bundleManager.isBundleInstalled("bundle-f1")).andReturn(installedBundle);
expect(bundleManager.getDataFile(EasyMock.anyObject(String.class))).andReturn(dataFile);
ignoreRefreshes(bundleManager);
replay(bundleManager);
@@ -142,6 +143,7 @@ public class FeaturesServiceTest extends TestBase {
expect(bundleManager.getDataFile(EasyMock.anyObject(String.class))).andReturn(dataFile).anyTimes();
expect(bundleManager.installBundleIfNeeded("bundle-0.1", 0, null)).andReturn(new BundleInstallerResult(bundlef101, true));
expect(bundleManager.installBundleIfNeeded("bundle-0.1", 0, null)).andReturn(new BundleInstallerResult(bundlef101, false));
+ expect(bundleManager.isBundleInstalled("bundle-0.1")).andReturn(bundlef101).times(2);
expect(bundleManager.getBundleContext()).andReturn(bundleContext);
ignoreRefreshes(bundleManager);
bundleManager.uninstall(Collections.EMPTY_LIST, true);
@@ -213,6 +215,8 @@ public class FeaturesServiceTest extends TestBase {
.andReturn(new BundleInstallerResult(bundlef101, true));
expect(bundleManager.installBundleIfNeeded("bundle-f2-0.1", 0, null))
.andReturn(new BundleInstallerResult(bundlef201, true));
+ expect(bundleManager.isBundleInstalled("bundle-f2-0.1")).andReturn(bundlef201);
+ expect(bundleManager.isBundleInstalled("bundle-f1-0.1")).andReturn(bundlef101);
expect(bundleManager.getBundleContext()).andReturn(bundleContext).anyTimes();
expect(bundleContext.getBundle(12345)).andReturn(bundlef101).anyTimes();
ignoreRefreshes(bundleManager);
@@ -236,6 +240,7 @@ public class FeaturesServiceTest extends TestBase {
Bundle installedBundle = createDummyBundle(12345L, bundlename, headers());
expect(bundleManager.getDataFile(EasyMock.<String>anyObject())).andReturn(dataFile).anyTimes();
expect(bundleManager.installBundleIfNeeded(bundleUri, 0, null)).andReturn(new BundleInstallerResult(installedBundle, true));
+ expect(bundleManager.isBundleInstalled(bundlename)).andReturn(installedBundle);
expect(bundleManager.getBundleContext()).andReturn(bundleContext);
ignoreRefreshes(bundleManager);
bundleManager.uninstall(Collections.EMPTY_LIST, true);
@@ -296,6 +301,7 @@ public class FeaturesServiceTest extends TestBase {
expect(bundleManager.getDataFile(EasyMock.<String>anyObject())).andReturn(dataFile).anyTimes();
expect(bundleManager.installBundleIfNeeded("bundle-0.2", 0, null)).andReturn(new BundleInstallerResult(bundleVer02, true));
expect(bundleManager.getBundleContext()).andReturn(bundleContext);
+ expect(bundleManager.isBundleInstalled("bundle-0.2")).andReturn(bundleVer02);
ignoreRefreshes(bundleManager);
bundleManager.uninstall(Collections.EMPTY_LIST, true);
@@ -328,6 +334,8 @@ public class FeaturesServiceTest extends TestBase {
expect(bundleManager.getDataFile(EasyMock.<String>anyObject())).andReturn(dataFile).anyTimes();
expect(bundleManager.installBundleIfNeeded(bundleVer01Uri, 0, null)).andReturn(new BundleInstallerResult(bundleVer01, true));
expect(bundleManager.installBundleIfNeeded(bundleVer01Uri, 0, null)).andReturn(new BundleInstallerResult(bundleVer01, false));
+ expect(bundleManager.isBundleInstalled("bundle-0.1")).andReturn(bundleVer01).times(2);
+ expect(bundleManager.getBundleContext()).andReturn(bundleContext);
ignoreRefreshes(bundleManager);
bundleManager.uninstall(Collections.EMPTY_LIST, true);
@@ -379,6 +387,7 @@ public class FeaturesServiceTest extends TestBase {
expect(bundleManager.installBundleIfNeeded(bundle1Uri, 0, null)).andReturn(new BundleInstallerResult(installedBundle1, true));
expect(bundleManager.installBundleIfNeeded(bundle2Uri, 0, null)).andReturn(new BundleInstallerResult(installedBundle2, true));
expect(bundleManager.installBundleIfNeeded("zfs:unknown", 0, null)).andThrow(new MalformedURLException());
+ expect(bundleManager.isBundleInstalled("bundle2")).andReturn(installedBundle2);
EasyMock.expectLastCall();
ignoreRefreshes(bundleManager);
@@ -404,6 +413,7 @@ public class FeaturesServiceTest extends TestBase {
expect(bundleManager.installBundleIfNeeded(bundle1Uri, 0, null)).andReturn(new BundleInstallerResult(installedBundle1, true));
expect(bundleManager.installBundleIfNeeded(bundle2Uri, 0, null)).andReturn(new BundleInstallerResult(installedBundle2, true));
expect(bundleManager.installBundleIfNeeded("zfs:unknown", 0, null)).andThrow(new MalformedURLException());
+ expect(bundleManager.isBundleInstalled("file:bundle2")).andReturn(installedBundle2);
bundleManager.uninstall(setOf(installedBundle1));
EasyMock.expectLastCall();
ignoreRefreshes(bundleManager);
@@ -430,7 +440,7 @@ public class FeaturesServiceTest extends TestBase {
expect(bundleManager.installBundleIfNeeded(bundle1Uri, 0, null)).andReturn(new BundleInstallerResult(installedBundle1, true));
expect(bundleManager.installBundleIfNeeded(bundle2Uri, 0, null)).andReturn(new BundleInstallerResult(installedBundle2, true));
expect(bundleManager.installBundleIfNeeded("zfs:unknown", 0, null)).andThrow(new MalformedURLException());
-
+ expect(bundleManager.isBundleInstalled("file:bundle2")).andReturn(installedBundle2);
replay(bundleManager);
FeaturesServiceImpl svc = new FeaturesServiceImpl(bundleManager);
svc.addRepository(uri);
@@ -459,6 +469,7 @@ public class FeaturesServiceTest extends TestBase {
expect(bundleManager.installBundleIfNeeded(bundle1Uri, 0, null)).andReturn(new BundleInstallerResult(installedBundle1, true));
expect(bundleManager.installBundleIfNeeded(bundle2Uri, 0, null)).andReturn(new BundleInstallerResult(installedBundle2, true));
expect(bundleManager.installBundleIfNeeded("zfs:unknown", 0, null)).andThrow(new MalformedURLException());
+ expect(bundleManager.isBundleInstalled("file:bundle2")).andReturn(installedBundle2);
bundleManager.uninstall(setOf(installedBundle1, installedBundle2));
EasyMock.expectLastCall();
http://git-wip-us.apache.org/repos/asf/karaf/blob/2a7bd9a5/features/core/src/test/java/org/apache/karaf/features/internal/FeaturesServiceImplTest.java
----------------------------------------------------------------------
diff --git a/features/core/src/test/java/org/apache/karaf/features/internal/FeaturesServiceImplTest.java b/features/core/src/test/java/org/apache/karaf/features/internal/FeaturesServiceImplTest.java
index 120588b..eab17f6 100644
--- a/features/core/src/test/java/org/apache/karaf/features/internal/FeaturesServiceImplTest.java
+++ b/features/core/src/test/java/org/apache/karaf/features/internal/FeaturesServiceImplTest.java
@@ -130,7 +130,12 @@ public class FeaturesServiceImplTest extends TestBase {
BundleManager bundleManager = EasyMock.createMock(BundleManager.class);
expect(bundleManager.installBundleIfNeeded(EasyMock.anyObject(String.class), EasyMock.anyInt(), EasyMock.anyObject(String.class)))
.andReturn(new BundleInstallerResult(createDummyBundle(1l, "", headers()), true)).anyTimes();
+ expect(bundleManager.isBundleInstalled("b1")).andReturn(createDummyBundle(1l, "", headers()));
+ expect(bundleManager.isBundleInstalled("b2")).andReturn(createDummyBundle(2l, "", headers()));
+ expect(bundleManager.isBundleInstalled("b3")).andReturn(createDummyBundle(3l, "", headers()));
+ expect(bundleManager.isBundleInstalled("b4")).andReturn(createDummyBundle(4l, "", headers()));
bundleManager.refreshBundles(EasyMock.anyObject(Set.class), EasyMock.anyObject(Set.class), EasyMock.anyObject(EnumSet.class));
+
EasyMock.expectLastCall();
final FeaturesServiceImpl impl = new FeaturesServiceImpl(bundleManager, null) {
// override methods which refers to bundle context to avoid mocking everything
[2/2] karaf git commit: Merge branch 'karaf-3.0.x' of
https://git-wip-us.apache.org/repos/asf/karaf into karaf-3.0.x
Posted by ff...@apache.org.
Merge branch 'karaf-3.0.x' of https://git-wip-us.apache.org/repos/asf/karaf into karaf-3.0.x
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/44f63841
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/44f63841
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/44f63841
Branch: refs/heads/karaf-3.0.x
Commit: 44f6384197992850683f29edd4fe5a815a6995f6
Parents: 2a7bd9a 5340c12
Author: Freeman Fang <fr...@gmail.com>
Authored: Fri Apr 3 11:40:16 2015 +0800
Committer: Freeman Fang <fr...@gmail.com>
Committed: Fri Apr 3 11:40:16 2015 +0800
----------------------------------------------------------------------
.../features/enterprise/src/main/feature/feature.xml | 12 +++++++-----
assemblies/features/framework/pom.xml | 4 ++++
2 files changed, 11 insertions(+), 5 deletions(-)
----------------------------------------------------------------------