SLING-5387 : Provide support for running singleton jobs on non leader cluster nodes also
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1793452 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzJobExecutor.java b/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzJobExecutor.java
index 58b2653..2579f4f 100644
--- a/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzJobExecutor.java
+++ b/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzJobExecutor.java
@@ -106,7 +106,10 @@
return runOn != null && runOn.length == 1 && Scheduler.VALUE_RUN_ON_SINGLE.equals(runOn[0]);
}
- public boolean shouldRunAsSingle() {
+ public String shouldRunAsSingleOn() {
+ if ( !isRunOnSingle() ) {
+ return null;
+ }
final String[] ids = QuartzJobExecutor.SLING_IDS.get();
boolean schedule = false;
if ( ids != null ) {
@@ -120,12 +123,13 @@
// although this should never happen (MD5 and UTF-8 are always available) we consider
// this an error case
LoggerFactory.getLogger(getClass().getName()).error("Unable to distribute scheduled " + this, ex);
- return false;
+ return "";
}
final String myId = SLING_ID;
schedule = myId != null && myId.equals(ids[index]);
+ return schedule ? null : ids[index];
}
- return schedule;
+ return "";
}
}
@@ -175,7 +179,7 @@
if ( myId == null ) {
return false;
}
- if ( !desc.shouldRunAsSingle() ) {
+ if ( desc.shouldRunAsSingleOn() != null ) {
logger.debug("Excluding {} - distributed to different Sling instance", desc);
return false;
}
diff --git a/src/main/java/org/apache/sling/commons/scheduler/impl/WebConsolePrinter.java b/src/main/java/org/apache/sling/commons/scheduler/impl/WebConsolePrinter.java
index e5360f2..cef21b9 100644
--- a/src/main/java/org/apache/sling/commons/scheduler/impl/WebConsolePrinter.java
+++ b/src/main/java/org/apache/sling/commons/scheduler/impl/WebConsolePrinter.java
@@ -107,8 +107,11 @@
pw.print(" (inactive: not leader)");
}
} else {
- if ( !desc.shouldRunAsSingle() ) {
- pw.print(" (inactive: single distributed elsewhere)");
+ final String id = desc.shouldRunAsSingleOn();
+ if ( id != null ) {
+ pw.print(" (inactive: single distributed elsewhere ");
+ pw.print(id);
+ pw.print(")");
}
}
} else {