in genie-web/src/main/java/com/netflix/genie/web/tasks/leader/LeaderTasksCoordinator.java [83:135]
public synchronized void onLeaderEvent(final AbstractLeaderEvent leaderEvent) {
if (leaderEvent instanceof OnGrantedEvent) {
if (this.isRunning) {
return;
}
log.info("Leadership granted.");
this.isRunning = true;
this.tasks.forEach(
task -> {
switch (task.getScheduleType()) {
case TRIGGER:
final Trigger trigger = task.getTrigger();
log.info(
"Scheduling leadership task {} to run with trigger {}",
task.getClass().getCanonicalName(),
trigger
);
this.futures.add(this.taskScheduler.schedule(task, trigger));
break;
case FIXED_RATE:
final long rate = task.getFixedRate();
log.info(
"Scheduling leadership task {} to run every {} second(s)",
task.getClass().getCanonicalName(),
rate / 1000.0
);
this.futures.add(this.taskScheduler.scheduleAtFixedRate(task, rate));
break;
case FIXED_DELAY:
final long delay = task.getFixedDelay();
log.info(
"Scheduling leadership task {} to run at a fixed delay of every {} second(s)",
task.getClass().getCanonicalName(),
delay / 1000.0
);
this.futures.add(this.taskScheduler.scheduleWithFixedDelay(task, delay));
break;
default:
log.error("Unknown Genie task type {}", task.getScheduleType());
}
}
);
} else if (leaderEvent instanceof OnRevokedEvent) {
if (!this.isRunning) {
return;
}
log.info("Leadership revoked.");
this.isRunning = false;
this.cancelTasks();
} else {
log.warn("Unknown leadership event {}. Ignoring.", leaderEvent);
}
}