This is an automated email from the ASF dual-hosted git repository.

heneveld pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git

commit 421905ef1b065cc63970feda7c48dbba449a4242
Author: Alex Heneveld <[email protected]>
AuthorDate: Tue Nov 23 16:32:11 2021 +0000

    include osgi information as part of server up check
    
    * if osgi is starting, don't report up until startup complete
    * return dedicated osgiUp as well, whether osgi is running or not
---
 .../apache/brooklyn/core/mgmt/ha/OsgiManager.java  |  4 ++-
 .../brooklyn/launcher/osgi/OsgiLauncherImpl.java   | 32 ++++++++++++++++------
 .../brooklyn/rest/resources/ServerResource.java    | 14 ++++++++++
 3 files changed, 40 insertions(+), 10 deletions(-)

diff --git 
a/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java 
b/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java
index 273cdb0..213b8a1 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java
@@ -92,7 +92,9 @@ public class OsgiManager {
      * a start from scratch; however if we leave it running, uninstalling any 
extra bundles, then tests are fast and don't leak.
      * See OsgiTestingLeaksAndSpeedTest. */
     protected static final boolean REUSED_FRAMEWORKS_ARE_KEPT_RUNNING = true;
-    
+
+    public static final ConfigKey<Boolean> OSGI_STARTUP_COMPLETE = 
ConfigKeys.newBooleanConfigKey("brooklyn.osgi.startup.complete");
+
     /* see `Osgis` class for info on starting framework etc */
     
     final ManagementContext mgmt;
diff --git 
a/karaf/init/src/main/java/org/apache/brooklyn/launcher/osgi/OsgiLauncherImpl.java
 
b/karaf/init/src/main/java/org/apache/brooklyn/launcher/osgi/OsgiLauncherImpl.java
index c45b6ea..64edcfa 100644
--- 
a/karaf/init/src/main/java/org/apache/brooklyn/launcher/osgi/OsgiLauncherImpl.java
+++ 
b/karaf/init/src/main/java/org/apache/brooklyn/launcher/osgi/OsgiLauncherImpl.java
@@ -16,18 +16,20 @@
 package org.apache.brooklyn.launcher.osgi;
 
 import com.google.common.base.Stopwatch;
-import java.util.Arrays;
+import java.io.IOException;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.stream.Collectors;
+import javax.annotation.Nullable;
 import org.apache.brooklyn.api.mgmt.ManagementContext;
 import org.apache.brooklyn.api.mgmt.ha.HighAvailabilityMode;
 import org.apache.brooklyn.core.BrooklynVersionService;
 import org.apache.brooklyn.core.catalog.internal.CatalogInitialization;
 import org.apache.brooklyn.core.internal.BrooklynProperties;
+import org.apache.brooklyn.core.mgmt.ha.OsgiManager;
 import org.apache.brooklyn.core.mgmt.internal.BrooklynShutdownHooks;
+import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
 import org.apache.brooklyn.core.mgmt.persist.PersistMode;
-import org.apache.brooklyn.core.typereg.BrooklynCatalogBundleResolver;
 import org.apache.brooklyn.launcher.common.BasicLauncher;
 import org.apache.brooklyn.launcher.common.BrooklynPropertiesFactoryHelper;
 import org.apache.brooklyn.rest.BrooklynWebConfig;
@@ -41,19 +43,21 @@ import org.apache.brooklyn.util.text.Strings;
 import org.apache.brooklyn.util.time.CountdownTimer;
 import org.apache.brooklyn.util.time.Duration;
 import org.apache.brooklyn.util.time.Time;
-import org.osgi.framework.*;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceEvent;
+import org.osgi.framework.ServiceListener;
+import org.osgi.framework.ServiceReference;
 import org.osgi.framework.launch.Framework;
 import org.osgi.framework.startlevel.FrameworkStartLevel;
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
-import org.osgi.util.tracker.ServiceTracker;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.annotation.Nullable;
-import java.io.IOException;
-import java.util.Map;
-
 /**
  * Initializer for brooklyn-core when running in an OSGi environment.
  */
@@ -94,6 +98,8 @@ public class OsgiLauncherImpl extends 
BasicLauncher<OsgiLauncherImpl> implements
         // make sure brooklyn-core bundle is started
         brooklynVersion.getVersion();
 
+        if (getManagementContext()!=null) 
((ManagementContextInternal)getManagementContext()).getBrooklynProperties().put(OsgiManager.OSGI_STARTUP_COMPLETE,
 false);
+
         Configuration brooklynConfig = getConfiguration(BROOKLYN_CONFIG_PID);
         // Note that this doesn't check whether the files exist, just that 
there are potential alternative sources for configuration.
         if (brooklynConfig == null && 
Strings.isEmpty(globalBrooklynProperties) && 
Strings.isEmpty(localBrooklynProperties)) {
@@ -121,9 +127,16 @@ public class OsgiLauncherImpl extends 
BasicLauncher<OsgiLauncherImpl> implements
         }
     }
 
+    @Override
+    protected void initManagementContext() {
+        super.initManagementContext();
+        
((ManagementContextInternal)getManagementContext()).getBrooklynProperties().put(OsgiManager.OSGI_STARTUP_COMPLETE,
 false);
+    }
+
     // init-method can't find the start method for some reason, provide an 
alternative.
     @Override
     public void initOsgi() {
+        if (getManagementContext()!=null) 
((ManagementContextInternal)getManagementContext()).getBrooklynProperties().put(OsgiManager.OSGI_STARTUP_COMPLETE,
 false);
         synchronized (reloadLock) {
             final Stopwatch startupTimer = Stopwatch.createStarted();
             BrooklynShutdownHooks.resetShutdownFlag();
@@ -289,6 +302,7 @@ public class OsgiLauncherImpl extends 
BasicLauncher<OsgiLauncherImpl> implements
             final Stopwatch startupTimer = Stopwatch.createStarted();
             LOG.debug("OsgiLauncher catalog/rebind running initialization 
(part two)");
             startPartTwo();
+            
((ManagementContextInternal)getManagementContext()).getBrooklynProperties().put(OsgiManager.OSGI_STARTUP_COMPLETE,
 true);
             startupTimer.stop();
             LOG.info("Brooklyn initialization (part two) complete after {}", 
startupTimer.toString());
         }
diff --git 
a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/ServerResource.java
 
b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/ServerResource.java
index 81948f3..65617b1 100644
--- 
a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/ServerResource.java
+++ 
b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/ServerResource.java
@@ -59,6 +59,7 @@ import org.apache.brooklyn.core.internal.BrooklynProperties;
 import org.apache.brooklyn.core.mgmt.ShutdownHandler;
 import org.apache.brooklyn.core.mgmt.entitlement.Entitlements;
 import org.apache.brooklyn.core.mgmt.ha.OsgiBundleInstallationResult;
+import org.apache.brooklyn.core.mgmt.ha.OsgiManager;
 import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
 import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
 import org.apache.brooklyn.core.mgmt.persist.*;
@@ -369,12 +370,23 @@ public class ServerResource extends 
AbstractBrooklynRestResource implements Serv
 
     @Override
     public boolean isUp() {
+        return isRestUp() && isOsgiUp(false);
+    }
+
+    public boolean isRestUp() {
         if (!Entitlements.isEntitled(mgmt().getEntitlementManager(), 
Entitlements.SERVER_STATUS, null))
             throw 
WebResourceUtils.forbidden(USER_OPERATION_NOT_AUTHORIZED_MSG, 
Entitlements.getEntitlementContext().user());
 
         Maybe<ManagementContext> mm = mgmtMaybe();
         return !mm.isAbsent() && mm.get().isStartupComplete() && 
mm.get().isRunning();
     }
+
+    /** returns whether up if known to be starting or up; else returns false 
if required and true if not */
+    public boolean isOsgiUp(boolean osgiRequired) {
+        Boolean up = 
mgmtInternal().getBrooklynProperties().getConfig(OsgiManager.OSGI_STARTUP_COMPLETE);
+        if (up!=null) return up;
+        return !osgiRequired;
+    }
     
     @Override
     public boolean isShuttingDown() {
@@ -399,6 +411,8 @@ public class ServerResource extends 
AbstractBrooklynRestResource implements Serv
             "shuttingDown", isShuttingDown(),
             "healthy", isHealthy(),
             "ha", getHighAvailabilityPlaneStates(),
+            "osgiUp", isOsgiUp(true),
+
             "brooklyn.security.sensitive.fields",
                 MutableMap.of(
                         "tokens", Sanitizer.getSensitiveFieldsTokens(),

Reply via email to