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 {