You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by du...@apache.org on 2018/06/04 09:18:06 UTC
svn commit: r1832805 - in /felix/trunk/systemready/src:
main/java/org/apache/felix/systemready/
main/java/org/apache/felix/systemready/impl/
main/java/org/apache/felix/systemready/impl/servlet/
test/java/org/apache/felix/systemready/osgi/ test/java/org...
Author: dulvac
Date: Mon Jun 4 09:18:06 2018
New Revision: 1832805
URL: http://svn.apache.org/viewvc?rev=1832805&view=rev
Log:
FELIX-5848 FrameworkStartCheck and general improvements
Added:
felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/FrameworkStartTestGreen.java
- copied, changed from r1832804, felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/FrameworkStartTest.java
felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/FrameworkStartTestYellow.java
Removed:
felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/FrameworkStartTest.java
Modified:
felix/trunk/systemready/src/main/java/org/apache/felix/systemready/SystemReadyMonitor.java
felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/ComponentsCheck.java
felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/FrameworkStartCheck.java
felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/ServicesCheck.java
felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/SystemReadyMonitorImpl.java
felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/servlet/SystemReadyServlet.java
felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/ComponentsCheckTest.java
felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/ServicesCheckTest.java
felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/util/BaseTest.java
Modified: felix/trunk/systemready/src/main/java/org/apache/felix/systemready/SystemReadyMonitor.java
URL: http://svn.apache.org/viewvc/felix/trunk/systemready/src/main/java/org/apache/felix/systemready/SystemReadyMonitor.java?rev=1832805&r1=1832804&r2=1832805&view=diff
==============================================================================
--- felix/trunk/systemready/src/main/java/org/apache/felix/systemready/SystemReadyMonitor.java (original)
+++ felix/trunk/systemready/src/main/java/org/apache/felix/systemready/SystemReadyMonitor.java Mon Jun 4 09:18:06 2018
@@ -23,6 +23,9 @@ package org.apache.felix.systemready;
* The aggregated state is the worst state of all checks.
*/
public interface SystemReadyMonitor {
+
+ String PID = "org.apache.felix.systemready.SystemReadyMonitor";
+
/**
* @return true if aggregated state is GREEN
*/
Modified: felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/ComponentsCheck.java
URL: http://svn.apache.org/viewvc/felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/ComponentsCheck.java?rev=1832805&r1=1832804&r2=1832805&view=diff
==============================================================================
--- felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/ComponentsCheck.java (original)
+++ felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/ComponentsCheck.java Mon Jun 4 09:18:06 2018
@@ -39,12 +39,14 @@ import org.osgi.service.metatype.annotat
import org.osgi.service.metatype.annotations.ObjectClassDefinition;
@Component(
- name = "ComponentsCheck",
+ name = ComponentsCheck.PID,
configurationPolicy = ConfigurationPolicy.REQUIRE
)
@Designate(ocd=ComponentsCheck.Config.class)
public class ComponentsCheck implements SystemReadyCheck {
+ public static final String PID = "org.apache.felix.systemready.impl.ComponentsCheck";
+
@ObjectClassDefinition(
name="DS Components System Ready Check",
description="System ready check that checks a list of DS components"
Modified: felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/FrameworkStartCheck.java
URL: http://svn.apache.org/viewvc/felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/FrameworkStartCheck.java?rev=1832805&r1=1832804&r2=1832805&view=diff
==============================================================================
--- felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/FrameworkStartCheck.java (original)
+++ felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/FrameworkStartCheck.java Mon Jun 4 09:18:06 2018
@@ -22,6 +22,7 @@ import org.apache.felix.systemready.Stat
import org.apache.felix.systemready.SystemReadyCheck;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
import org.osgi.framework.FrameworkEvent;
import org.osgi.framework.startlevel.FrameworkStartLevel;
import org.osgi.service.component.annotations.Activate;
@@ -34,41 +35,67 @@ import org.osgi.service.metatype.annotat
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.util.ArrayList;
+import java.util.List;
+
@Component(
- name = "FrameworkStartCheck",
+ name = FrameworkStartCheck.PID,
+ immediate=true,
configurationPolicy = ConfigurationPolicy.OPTIONAL
)
@Designate(ocd=FrameworkStartCheck.Config.class)
public class FrameworkStartCheck implements SystemReadyCheck {
- public static final String FRAMEWORK_STARTED = "Framework started";
- public static final String FRAMEWORK_START_CHECK_NAME = "Framework Start Check";
+ public static final String PID = "org.apache.felix.systemready.impl.FrameworkStartCheck";
+ public static final String FRAMEWORK_STARTED = "Framework started. ";
+ public static final String FRAMEWORK_NOT_STARTED = "Framework NOT started. ";
+ public static final String FRAMEWORK_START_CHECK_NAME = "Framework Start Ready Check";
+
@ObjectClassDefinition(
- name="OSGi Installer System Ready Check",
- description="System ready that waits for the framework started OSGi event"
+ name=FRAMEWORK_START_CHECK_NAME,
+ description="System ready that waits for the system bundle to be active"
)
public @interface Config {
@AttributeDefinition(name = "Timeout (seconds)", description = "Number of seconds after which this is considered a failure")
long timeout() default 1000;
+ @AttributeDefinition(name = "Target start level", description = "The target start level at which the Framework " +
+ "is considered started. If zero or negative, it will default to the default bundle start level + 1")
+ int target_start_level() default 0;
+
+ @AttributeDefinition(name = "Target start level OSGi property name",
+ description = "The name of the OSGi property which holds the " + "\"Target start level\". " +
+ "It takes precedence over the target.start.level config. " +
+ "If the startlevel cannot be derived from the osgi property, this config attribute is ignored.")
+ String target_start_level_prop_name() default "";
+
}
private final Logger log = LoggerFactory.getLogger(getClass());
private BundleContext bundleContext;
- private Status state;
+ private long targetStartLevel;
@Activate
protected void activate(final BundleContext ctx, final Config config) throws InterruptedException {
this.bundleContext = ctx;
- this.bundleContext.addFrameworkListener(this::frameworkEvent);
-
- if (bundleContext.getBundle(0).getState() == Bundle.ACTIVE) {
- // The system bundle was already started when I joined
- this.state = new Status(Status.State.GREEN, FRAMEWORK_STARTED);
+ final FrameworkStartLevel fsl = bundleContext.getBundle(Constants.SYSTEM_BUNDLE_ID).adapt(FrameworkStartLevel.class);
+ final long initial = fsl.getInitialBundleStartLevel();
+ // get the configured target start level, otherwise use the initial bundle start level
+ this.targetStartLevel = config.target_start_level() > 0 ? config.target_start_level() : initial + 1;
+
+ // overwrite with the value from #target_start_level_prop_name if present
+ final String targetStartLevelKey = config.target_start_level_prop_name();
+ if (null != targetStartLevelKey && !targetStartLevelKey.trim().isEmpty()) {
+ try {
+ this.targetStartLevel = Long.valueOf(bundleContext.getProperty(targetStartLevelKey));
+ } catch (NumberFormatException e) {
+ log.info("Ignoring {} as it can't be parsed: {}", targetStartLevelKey, e.getMessage());
+ }
} else {
- this.state = new Status(Status.State.YELLOW, "No OSGi Framework events received so far. " + getFrameworkDetails());
+ log.info("Ignoring target.start.level.prop.name because it's not set.");
}
+
log.info("Activated");
}
@@ -84,19 +111,14 @@ public class FrameworkStartCheck impleme
@Override
public Status getStatus() {
- return this.state;
- }
-
- public void frameworkEvent(FrameworkEvent event) {
- if (event.getType() == FrameworkEvent.STARTLEVEL_CHANGED) {
- this.state = new Status(Status.State.YELLOW, getFrameworkDetails());
- } else if (event.getType() == FrameworkEvent.STARTED) {
- this.state = new Status(Status.State.GREEN, FRAMEWORK_STARTED);
- } // TODO: RED on timeout?
- }
-
- private String getFrameworkDetails() {
- FrameworkStartLevel fsl = bundleContext.getBundle(0).adapt(FrameworkStartLevel.class);
- return String.format("Framework is at start level {} in state {}", fsl.getStartLevel(), fsl.getBundle().getState());
+ Bundle systemBundle = bundleContext.getBundle(Constants.SYSTEM_BUNDLE_ID);
+ FrameworkStartLevel fsl = systemBundle.adapt(FrameworkStartLevel.class);
+ String message = String.format("Start level: %d; Target start level: %d; Framework state: %d",
+ fsl.getStartLevel(), targetStartLevel, fsl.getBundle().getState());
+ if ((systemBundle.getState() == Bundle.ACTIVE) && (fsl.getStartLevel() >= targetStartLevel)) {
+ return new Status(Status.State.GREEN, FRAMEWORK_STARTED + message);
+ } else {
+ return new Status(Status.State.YELLOW, FRAMEWORK_NOT_STARTED + message);
+ }
}
}
Modified: felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/ServicesCheck.java
URL: http://svn.apache.org/viewvc/felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/ServicesCheck.java?rev=1832805&r1=1832804&r2=1832805&view=diff
==============================================================================
--- felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/ServicesCheck.java (original)
+++ felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/ServicesCheck.java Mon Jun 4 09:18:06 2018
@@ -40,12 +40,14 @@ import org.osgi.service.metatype.annotat
import org.osgi.service.metatype.annotations.ObjectClassDefinition;
@Component(
- name = "ServicesCheck",
+ name = ServicesCheck.PID,
configurationPolicy = ConfigurationPolicy.REQUIRE
)
@Designate(ocd=ServicesCheck.Config.class)
public class ServicesCheck implements SystemReadyCheck {
+ public static final String PID = "org.apache.felix.systemready.impl.ServicesCheck";
+
@ObjectClassDefinition(
name="Services Registered System Ready Check",
description="System ready check that waits for a list of services to be registered"
Modified: felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/SystemReadyMonitorImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/SystemReadyMonitorImpl.java?rev=1832805&r1=1832804&r2=1832805&view=diff
==============================================================================
--- felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/SystemReadyMonitorImpl.java (original)
+++ felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/SystemReadyMonitorImpl.java Mon Jun 4 09:18:06 2018
@@ -47,7 +47,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Component(
- name = "SystemReadyMonitor"
+ name = SystemReadyMonitor.PID
)
@Designate(ocd = SystemReadyMonitorImpl.Config.class)
public class SystemReadyMonitorImpl implements SystemReadyMonitor {
Modified: felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/servlet/SystemReadyServlet.java
URL: http://svn.apache.org/viewvc/felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/servlet/SystemReadyServlet.java?rev=1832805&r1=1832804&r2=1832805&view=diff
==============================================================================
--- felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/servlet/SystemReadyServlet.java (original)
+++ felix/trunk/systemready/src/main/java/org/apache/felix/systemready/impl/servlet/SystemReadyServlet.java Mon Jun 4 09:18:06 2018
@@ -46,7 +46,7 @@ import org.slf4j.LoggerFactory;
* Provide aggregated ready information using a servlet
*/
@Component(
- name = "SystemReadyServlet",
+ name = SystemReadyServlet.PID,
service = Servlet.class,
property = {
HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN + "=" + "/system/console/ready",
@@ -55,6 +55,9 @@ import org.slf4j.LoggerFactory;
)
@Designate(ocd=SystemReadyServlet.Config.class)
public class SystemReadyServlet extends HttpServlet {
+
+ public static final String PID = "org.apache.felix.systemready.impl.servlet.SystemReadyServlet";
+
private static final long serialVersionUID = 1L;
@ObjectClassDefinition(
Modified: felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/ComponentsCheckTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/ComponentsCheckTest.java?rev=1832805&r1=1832804&r2=1832805&view=diff
==============================================================================
--- felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/ComponentsCheckTest.java (original)
+++ felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/ComponentsCheckTest.java Mon Jun 4 09:18:06 2018
@@ -29,6 +29,7 @@ import javax.inject.Inject;
import org.apache.felix.systemready.Status;
import org.apache.felix.systemready.SystemReadyCheck;
+import org.apache.felix.systemready.impl.ComponentsCheck;
import org.apache.felix.systemready.osgi.examples.CompWithoutService2;
import org.apache.felix.systemready.osgi.util.BaseTest;
import org.apache.felix.systemready.osgi.examples.CompWithoutService;
@@ -46,7 +47,7 @@ import org.osgi.service.cm.Configuration
public class ComponentsCheckTest extends BaseTest {
@Inject
- @Filter("(component.name=ComponentsCheck)")
+ @Filter("(component.name=" + ComponentsCheck.PID + ")")
SystemReadyCheck check;
@Inject
Copied: felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/FrameworkStartTestGreen.java (from r1832804, felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/FrameworkStartTest.java)
URL: http://svn.apache.org/viewvc/felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/FrameworkStartTestGreen.java?p2=felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/FrameworkStartTestGreen.java&p1=felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/FrameworkStartTest.java&r1=1832804&r2=1832805&rev=1832805&view=diff
==============================================================================
--- felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/FrameworkStartTest.java (original)
+++ felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/FrameworkStartTestGreen.java Mon Jun 4 09:18:06 2018
@@ -25,6 +25,7 @@ import javax.inject.Inject;
import org.apache.felix.systemready.Status;
import org.apache.felix.systemready.SystemReadyCheck;
+import org.apache.felix.systemready.impl.FrameworkStartCheck;
import org.apache.felix.systemready.osgi.util.BaseTest;
import org.junit.Assert;
import org.junit.Test;
@@ -35,17 +36,17 @@ import org.ops4j.pax.exam.junit.PaxExam;
import org.ops4j.pax.exam.util.Filter;
@RunWith(PaxExam.class)
-public class FrameworkStartTest extends BaseTest {
+public class FrameworkStartTestGreen extends BaseTest {
@Inject
- @Filter("(component.name=FrameworkStartCheck)")
+ @Filter("(component.name=" + FrameworkStartCheck.PID + ")")
SystemReadyCheck check;
@Configuration
public Option[] configuration() {
return new Option[] {
baseConfiguration(),
- newConfiguration("FrameworkStartCheck")
+ newConfiguration(FrameworkStartCheck.PID)
.asOption()
};
}
Added: felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/FrameworkStartTestYellow.java
URL: http://svn.apache.org/viewvc/felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/FrameworkStartTestYellow.java?rev=1832805&view=auto
==============================================================================
--- felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/FrameworkStartTestYellow.java (added)
+++ felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/FrameworkStartTestYellow.java Mon Jun 4 09:18:06 2018
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.systemready.osgi;
+
+import org.apache.felix.systemready.Status;
+import org.apache.felix.systemready.SystemReadyCheck;
+import org.apache.felix.systemready.impl.FrameworkStartCheck;
+import org.apache.felix.systemready.osgi.util.BaseTest;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Configuration;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.PaxExam;
+import org.ops4j.pax.exam.util.Filter;
+
+import javax.inject.Inject;
+
+import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.newConfiguration;
+
+@RunWith(PaxExam.class)
+public class FrameworkStartTestYellow extends BaseTest {
+
+ @Inject
+ @Filter("(component.name=" + FrameworkStartCheck.PID + ")")
+ SystemReadyCheck check;
+
+ @Configuration
+ public Option[] configuration() {
+ return new Option[] {
+ baseConfiguration(),
+ newConfiguration(FrameworkStartCheck.PID)
+ .put("target.start.level", 100)
+ .asOption()
+ };
+ }
+
+ @Test
+ public void test() {
+ Status status = check.getStatus();
+ Assert.assertEquals(Status.State.YELLOW, status.getState());
+ }
+}
Modified: felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/ServicesCheckTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/ServicesCheckTest.java?rev=1832805&r1=1832804&r2=1832805&view=diff
==============================================================================
--- felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/ServicesCheckTest.java (original)
+++ felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/ServicesCheckTest.java Mon Jun 4 09:18:06 2018
@@ -28,6 +28,7 @@ import javax.inject.Inject;
import org.apache.felix.systemready.SystemReadyCheck;
import org.apache.felix.systemready.Status;
import org.apache.felix.systemready.Status.State;
+import org.apache.felix.systemready.impl.ServicesCheck;
import org.apache.felix.systemready.osgi.util.BaseTest;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -41,7 +42,7 @@ import org.osgi.service.component.runtim
public class ServicesCheckTest extends BaseTest {
@Inject
- @Filter("(component.name=ServicesCheck)")
+ @Filter("(component.name=" + ServicesCheck.PID + ")")
SystemReadyCheck check;
@Configuration
Modified: felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/util/BaseTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/util/BaseTest.java?rev=1832805&r1=1832804&r2=1832805&view=diff
==============================================================================
--- felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/util/BaseTest.java (original)
+++ felix/trunk/systemready/src/test/java/org/apache/felix/systemready/osgi/util/BaseTest.java Mon Jun 4 09:18:06 2018
@@ -25,6 +25,11 @@ import static org.ops4j.pax.exam.cm.Conf
import javax.inject.Inject;
+import org.apache.felix.systemready.SystemReadyMonitor;
+import org.apache.felix.systemready.impl.ComponentsCheck;
+import org.apache.felix.systemready.impl.FrameworkStartCheck;
+import org.apache.felix.systemready.impl.ServicesCheck;
+import org.apache.felix.systemready.impl.servlet.SystemReadyServlet;
import org.ops4j.pax.exam.CoreOptions;
import org.ops4j.pax.exam.Option;
import org.osgi.framework.BundleContext;
@@ -66,19 +71,19 @@ public class BaseTest {
}
public Option servicesCheckConfig(String... services) {
- return newConfiguration("ServicesCheck")
+ return newConfiguration(ServicesCheck.PID)
.put("services.list", services)
.asOption();
}
public Option componentsCheckConfig(String... components) {
- return newConfiguration("ComponentsCheck")
+ return newConfiguration(ComponentsCheck.PID)
.put("components.list", components)
.asOption();
}
public Option monitorConfig() {
- return newConfiguration("SystemReadyMonitor")
+ return newConfiguration(SystemReadyMonitor.PID)
.put("poll.interval", 50)
.asOption();
}
@@ -91,7 +96,7 @@ public class BaseTest {
}
public Option servletConfig(String path) {
- return newConfiguration("SystemReadyServlet")
+ return newConfiguration(SystemReadyServlet.PID)
.put("osgi.http.whiteboard.servlet.pattern", path)
.asOption();
}
@@ -121,7 +126,7 @@ public class BaseTest {
}
public void disableFrameworkStartCheck() {
- disableComponent("FrameworkStartCheck");
+ disableComponent(FrameworkStartCheck.PID);
}
}