brooklyn-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From geom...@apache.org
Subject [28/39] brooklyn-server git commit: address two edge cases where osgi bundles out of sync with brooklyn-managed bundles
Date Wed, 19 Jul 2017 16:25:58 GMT
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 <alex.heneveld@cloudsoftcorp.com>
Authored: Fri Jul 7 12:03:44 2017 +0100
Committer: Alex Heneveld <alex.heneveld@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 {


Mime
View raw message