You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2017/05/02 12:20:59 UTC

svn commit: r1793481 - in /sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl: QuartzJobExecutor.java QuartzScheduler.java QuartzSchedulerConfiguration.java WebConsolePrinter.java

Author: cziegeler
Date: Tue May  2 12:20:59 2017
New Revision: 1793481

URL: http://svn.apache.org/viewvc?rev=1793481&view=rev
Log:
SLING-5387 : Provide support for running singleton jobs on non leader cluster nodes also

Modified:
    sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzJobExecutor.java
    sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzScheduler.java
    sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzSchedulerConfiguration.java
    sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/WebConsolePrinter.java

Modified: sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzJobExecutor.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzJobExecutor.java?rev=1793481&r1=1793480&r2=1793481&view=diff
==============================================================================
--- sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzJobExecutor.java (original)
+++ sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzJobExecutor.java Tue May  2 12:20:59 2017
@@ -51,6 +51,9 @@ public class QuartzJobExecutor implement
     /** The id of the current instance (if settings service is available. */
     public static volatile String SLING_ID;
 
+    /** Force leader for jobs with run on single */
+    public static final AtomicBoolean FORCE_LEADER = new AtomicBoolean(true);
+
     /** Is this instance the leader? */
     public static final AtomicBoolean IS_LEADER = new AtomicBoolean(true);
 
@@ -175,13 +178,20 @@ public class QuartzJobExecutor implement
                 if ( !checkDiscoveryAvailable(logger, desc) ) {
                     return false;
                 }
-                final String myId = checkSlingId(logger, desc);
-                if ( myId == null ) {
-                    return false;
-                }
-                if ( desc.shouldRunAsSingleOn() != null ) {
-                    logger.debug("Excluding {} - distributed to different Sling instance", desc);
-                    return false;
+                if ( FORCE_LEADER.get() ) {
+                    if ( !IS_LEADER.get() ) {
+                        logger.debug("Excluding {} - instance is not leader", desc);
+                        return false;
+                    }
+                } else {
+                    final String myId = checkSlingId(logger, desc);
+                    if ( myId == null ) {
+                        return false;
+                    }
+                    if ( desc.shouldRunAsSingleOn() != null ) {
+                        logger.debug("Excluding {} - distributed to different Sling instance", desc);
+                        return false;
+                    }
                 }
             } else { // sling IDs
                 final String myId = checkSlingId(logger, desc);

Modified: sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzScheduler.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzScheduler.java?rev=1793481&r1=1793480&r2=1793481&view=diff
==============================================================================
--- sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzScheduler.java (original)
+++ sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzScheduler.java Tue May  2 12:20:59 2017
@@ -119,6 +119,8 @@ public class QuartzScheduler implements
         // SLING-2261 Prevent Quartz from checking for updates
         System.setProperty("org.terracotta.quartz.skipUpdateCheck", Boolean.TRUE.toString());
 
+        QuartzJobExecutor.FORCE_LEADER.set(configuration.scheduler_useleaderforsingle());
+
         defaultPoolName = configuration.poolName();
         allowedPoolNames = configuration.allowedPoolNames();
         if (allowedPoolNames == null) {

Modified: sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzSchedulerConfiguration.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzSchedulerConfiguration.java?rev=1793481&r1=1793480&r2=1793481&view=diff
==============================================================================
--- sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzSchedulerConfiguration.java (original)
+++ sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzSchedulerConfiguration.java Tue May  2 12:20:59 2017
@@ -38,4 +38,9 @@ import org.osgi.service.metatype.annotat
     )
     String[] allowedPoolNames();
 
+    @AttributeDefinition(
+            name = "Force Leader for Single",
+            description="If a job is to be run on a single instance only, disable distribution and always run on leader."
+        )
+    boolean scheduler_useleaderforsingle() default false;
 }

Modified: sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/WebConsolePrinter.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/WebConsolePrinter.java?rev=1793481&r1=1793480&r2=1793481&view=diff
==============================================================================
--- sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/WebConsolePrinter.java (original)
+++ sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/WebConsolePrinter.java Tue May  2 12:20:59 2017
@@ -102,7 +102,7 @@ public class WebConsolePrinter {
                                     if ( desc.isRunOnLeader() || desc.isRunOnSingle() ) {
                                         if ( QuartzJobExecutor.DISCOVERY_AVAILABLE.get() ) {
                                             if ( QuartzJobExecutor.DISCOVERY_INFO_AVAILABLE.get() ) {
-                                                if ( desc.isRunOnLeader() ) {
+                                                if ( desc.isRunOnLeader() || QuartzJobExecutor.FORCE_LEADER.get() ) {
                                                     if ( !QuartzJobExecutor.IS_LEADER.get() ) {
                                                         pw.print(" (inactive: not leader)");
                                                     }