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