in src/main/java/org/apache/sling/commons/scheduler/impl/QuartzJobExecutor.java [267:319]
private boolean shouldRun(final Logger logger,
final JobDesc desc) {
if ( desc.runOn != null ) {
if ( desc.isRunOnLeader() ) {
// leader
if ( !checkDiscoveryAvailable(logger, desc) ) {
return false;
}
if ( !IS_LEADER.get() ) {
logger.debug("Excluding {} - instance is not leader", desc);
return false;
}
} else if ( desc.isRunOnSingle() ) {
// single instance
if ( !checkDiscoveryAvailable(logger, 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);
if ( myId == null ) {
return false;
} else {
boolean schedule = false;
for(final String id : desc.runOn ) {
if ( myId.equals(id) ) {
schedule = true;
break;
}
}
if ( !schedule ) {
logger.debug("Excluding job {} - different Sling ID", desc);
return false;
}
}
}
}
return true;
}