You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2019/02/24 11:11:56 UTC

svn commit: r1854249 - in /aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container: BlueprintContainerImpl.java BlueprintExtender.java

Author: cschneider
Date: Sun Feb 24 11:11:56 2019
New Revision: 1854249

URL: http://svn.apache.org/viewvc?rev=1854249&view=rev
Log:
[ARIES-1886] Globally configurable number of extender threads and grace
period timeout.
VM property "org.apache.aries.blueprint.default.timeout" can be used to
define the default time out.

VM property "org.apache.aries.blueprint.extender.threads" can be used to
define the count of threads used for deployment.

Modified:
    aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java
    aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintExtender.java

Modified: aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java?rev=1854249&r1=1854248&r2=1854249&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java (original)
+++ aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java Sun Feb 24 11:11:56 2019
@@ -111,6 +111,8 @@ public class BlueprintContainerImpl
     Runnable, SatisfiableRecipe.SatisfactionListener,
     org.apache.aries.blueprint.ExtendedBlueprintContainer {
 
+    private static final String DEFAULT_TIMEOUT_PROPERTY = "org.apache.aries.blueprint.default.timeout";
+    private static final long DEFAULT_TIMEOUT = 5 * 60 * 1000;
     private static final Logger LOGGER = LoggerFactory.getLogger(BlueprintContainerImpl.class);
 
     private static final Class[] SECURITY_BUGFIX = {
@@ -151,7 +153,7 @@ public class BlueprintContainerImpl
     private final List<Processor> processors;
     private final Object satisfiablesLock = new Object();
     private Map<String, List<SatisfiableRecipe>> satisfiables;
-    private long timeout = 5 * 60 * 1000;
+    private long timeout;
     private boolean waitForDependencies = true;
     private String xmlValidation;
     private ScheduledFuture timeoutFuture;
@@ -174,6 +176,7 @@ public class BlueprintContainerImpl
         this.componentDefinitionRegistry = new ComponentDefinitionRegistryImpl();
         this.executors = executor != null ? new ExecutorServiceWrapper(executor) : null;
         this.timer = timer;
+        this.timeout = getDefaultTimeout();
         this.processors = new ArrayList<Processor>();
         if (System.getSecurityManager() != null) {
             this.accessControlContext = BlueprintDomainCombiner.createAccessControlContext(bundle);
@@ -210,6 +213,20 @@ public class BlueprintContainerImpl
         return eventDispatcher;
     }
 
+    private long getDefaultTimeout() {
+        long timeout = DEFAULT_TIMEOUT;
+        try {
+            timeout = Long.getLong(DEFAULT_TIMEOUT_PROPERTY, DEFAULT_TIMEOUT);
+            if (timeout != DEFAULT_TIMEOUT) {
+                LOGGER.debug(DEFAULT_TIMEOUT_PROPERTY + " is set to " + timeout + ".");
+            }
+        }
+        catch (Exception e) {
+            LOGGER.error(DEFAULT_TIMEOUT_PROPERTY + " is not a number. Using default value " + timeout + ".");
+        }
+        return timeout;
+    }
+
     private void readDirectives() {
         Dictionary headers = bundle.getHeaders();
         String symbolicName = (String) headers.get(Constants.BUNDLE_SYMBOLICNAME);
@@ -220,6 +237,9 @@ public class BlueprintContainerImpl
             LOGGER.debug("Timeout directive: {}", timeoutDirective);
             timeout = Integer.parseInt(timeoutDirective);
         }
+        else {
+        	timeout = getDefaultTimeout();
+        }
 
         String graceperiod = paths.get(0).getDirective(BlueprintConstants.GRACE_PERIOD);
         if (graceperiod != null) {

Modified: aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintExtender.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintExtender.java?rev=1854249&r1=1854248&r2=1854249&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintExtender.java (original)
+++ aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintExtender.java Sun Feb 24 11:11:56 2019
@@ -69,6 +69,8 @@ public class BlueprintExtender implement
 
     /** The QuiesceParticipant implementation class name */
     private static final String QUIESCE_PARTICIPANT_CLASS = "org.apache.aries.quiesce.participant.QuiesceParticipant";
+    private static final String EXTENDER_THREADS_PROPERTY = "org.apache.aries.blueprint.extender.threads";
+    private static final int DEFAULT_NUMBER_OF_THREADS = 3;
     private static final Logger LOGGER = LoggerFactory.getLogger(BlueprintExtender.class);
 
     private BundleContext context;
@@ -95,7 +97,17 @@ public class BlueprintExtender implement
         handlers = new NamespaceHandlerRegistryImpl(trackingContext);
         executors = new ScheduledExecutorServiceWrapper(ctx, "Blueprint Extender", new ScheduledExecutorServiceFactory() {
             public ScheduledExecutorService create(String name) {
-                return Executors.newScheduledThreadPool(3, new BlueprintThreadFactory(name));
+                int extenderThreads = DEFAULT_NUMBER_OF_THREADS;
+                try {
+                    extenderThreads = Integer.getInteger(EXTENDER_THREADS_PROPERTY, DEFAULT_NUMBER_OF_THREADS);
+                    if (extenderThreads != DEFAULT_NUMBER_OF_THREADS) {
+                        LOGGER.debug(EXTENDER_THREADS_PROPERTY + " is set to " + extenderThreads + ".");
+                    }
+                }
+                catch (Exception e) {
+                    LOGGER.error(EXTENDER_THREADS_PROPERTY + " is not a number. Using default value " + DEFAULT_NUMBER_OF_THREADS + ".");
+                }
+                return Executors.newScheduledThreadPool(extenderThreads, new BlueprintThreadFactory(name));
             }
         });
         eventDispatcher = new BlueprintEventDispatcher(ctx);