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)");
                                                     }


Reply via email to