You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by ge...@apache.org on 2017/07/19 16:25:58 UTC
[28/39] brooklyn-server git commit: address two edge cases where osgi
bundles out of sync with brooklyn-managed bundles
address two edge cases where osgi bundles out of sync with brooklyn-managed bundles
if in osgi but not in brooklyn, silently uninstall then reinstall. this happens on restart when persisting with karaf, or if user does `bundle:install`.
if not in osgi but is in brooklyn, warn then reinstall. this happens if user does `bundle:uninstall` in karaf.
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/bf7d292b
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/bf7d292b
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/bf7d292b
Branch: refs/heads/master
Commit: bf7d292be0189591dbf274f1b238e258c1da7921
Parents: f344430
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Fri Jul 7 12:03:44 2017 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Jul 7 12:03:44 2017 +0100
----------------------------------------------------------------------
.../core/mgmt/ha/OsgiArchiveInstaller.java | 22 +++++++++++++-------
1 file changed, 14 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/bf7d292b/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiArchiveInstaller.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiArchiveInstaller.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiArchiveInstaller.java
index 1b06463..247bebd 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiArchiveInstaller.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiArchiveInstaller.java
@@ -306,9 +306,11 @@ class OsgiArchiveInstaller {
if (canUpdate()) {
result.bundle = osgiManager.framework.getBundleContext().getBundle(result.getMetadata().getOsgiUniqueUrl());
if (result.getBundle()==null) {
- throw new IllegalStateException("Detected already managing bundle "+result.getMetadata().getVersionedName()+" but framework cannot find it");
+ log.warn("Brooklyn thought is was already managing bundle "+result.getMetadata().getVersionedName()+" but it's not installed to framework; reinstalling it");
+ updating = false;
+ } else {
+ updating = true;
}
- updating = true;
} else {
if (result.getMetadata().getChecksum()==null || inferredMetadata.getChecksum()==null) {
log.warn("Missing bundle checksum data for "+result+"; assuming bundle replacement is permitted");
@@ -324,11 +326,16 @@ class OsgiArchiveInstaller {
// no such managed bundle
Maybe<Bundle> b = Osgis.bundleFinder(osgiManager.framework).symbolicName(result.getMetadata().getSymbolicName()).version(result.getMetadata().getSuppliedVersionString()).find();
if (b.isPresent()) {
- // if it's non-brooklyn installed then fail
- // (e.g. someone trying to install brooklyn or guice through this mechanism!)
- result.bundle = b.get();
- result.code = OsgiBundleInstallationResult.ResultCode.ERROR_LAUNCHING_BUNDLE;
- throw new IllegalStateException("Bundle "+result.getMetadata().getVersionedName()+" already installed in framework but not managed by Brooklyn; cannot install or update through Brooklyn");
+ // bundle already installed to OSGi subsystem but brooklyn not aware of it;
+ // this will often happen on a karaf restart so don't be too strict!
+ // in this case let's uninstall it to make sure we have the right bundle and checksum
+ // (in case where user has replaced a JAR file in persisted state,
+ // or where they osgi installed something and are now uploading it or something else)
+ // but let's just assume it's the same; worst case if not user will
+ // have to uninstall it then reinstall it to do the replacement
+ // (means you can't just replace a JAR in persisted state however)
+ log.debug("Brooklyn install of "+result.getMetadata().getVersionedName()+" detected already loaded in OSGi; uninstalling that to reinstall as Brooklyn-managed");
+ b.get().uninstall();
}
// normal install
updating = false;
@@ -337,7 +344,6 @@ class OsgiArchiveInstaller {
startedInstallation = true;
try (InputStream fin = new FileInputStream(zipFile)) {
if (!updating) {
- // install new
assert result.getBundle()==null;
result.bundle = osgiManager.framework.getBundleContext().installBundle(result.getMetadata().getOsgiUniqueUrl(), fin);
} else {