package com.hubspot.baragon.service.listeners;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import javax.inject.Named;
import com.google.inject.Inject;
import com.hubspot.baragon.migrations.ZkDataMigrationRunner;
import com.hubspot.baragon.service.BaragonServiceModule;
import com.hubspot.baragon.service.config.BaragonConfiguration;
import com.hubspot.baragon.service.worker.BaragonRequestWorker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class RequestWorkerListener extends AbstractLatchListener {
private static final Logger LOG = LoggerFactory.getLogger(RequestWorkerListener.class);
private final ScheduledExecutorService executorService;
private final BaragonRequestWorker requestWorker;
private final BaragonConfiguration config;
private final ZkDataMigrationRunner migrationRunner;
private ScheduledFuture<?> requestWorkerFuture = null;
@Inject
public RequestWorkerListener(@Named(BaragonServiceModule.BARAGON_SERVICE_SCHEDULED_EXECUTOR) ScheduledExecutorService executorService,
BaragonConfiguration config,
BaragonRequestWorker requestWorker,
ZkDataMigrationRunner migrationRunner) {
this.executorService = executorService;
this.config = config;
this.requestWorker = requestWorker;
this.migrationRunner = migrationRunner;
}
@Override
public void isLeader() {
LOG.info("We are the leader! Checking for zk migrations before starting RequestWorker...");
migrationRunner.checkMigrations();
LOG.info("Done with zk migrations, starting RequestWorker...");
if (requestWorkerFuture != null) {
requestWorkerFuture.cancel(false);
}
requestWorkerFuture = executorService.scheduleAtFixedRate(requestWorker, config.getWorkerConfiguration().getInitialDelayMs(), config.getWorkerConfiguration().getIntervalMs(), TimeUnit.MILLISECONDS);
}
@Override
public void notLeader() {
LOG.info("We are not the leader!");
requestWorkerFuture.cancel(false);
}
@Override
public boolean isEnabled() {
return config.getWorkerConfiguration().isEnabled();
}
}