You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2021/11/23 17:23:00 UTC
[brooklyn-server] 02/04: include osgi information as part of server up check
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 <al...@cloudsoftcorp.com>
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(),