public AzureJobCoordinator(String processorId, Config config, MetricsRegistry metricsRegistry) {
this.processorId = processorId;
this.config = config;
currentJMVersion = new AtomicReference<>(INITIAL_STATE);
AzureConfig azureConfig = new AzureConfig(config);
AzureClient client = new AzureClient(azureConfig.getAzureConnectionString());
leaderBlob = new BlobUtils(client, azureConfig.getAzureContainerName(), azureConfig.getAzureBlobName(), azureConfig.getAzureBlobLength());
errorHandler = (errorMsg) -> {
LOG.error(errorMsg);
stop();
};
table = new TableUtils(client, azureConfig.getAzureTableName(), INITIAL_STATE);
azureLeaderElector = new AzureLeaderElector(new LeaseBlobManager(leaderBlob.getBlob()));
azureLeaderElector.setLeaderElectorListener(new AzureLeaderElectorListener());
versionUpgradeDetected = new AtomicBoolean(false);
heartbeat = new HeartbeatScheduler(errorHandler, table, currentJMVersion, processorId);
versionUpgrade = new JMVersionUpgradeScheduler(errorHandler, leaderBlob, currentJMVersion, versionUpgradeDetected, processorId);
leaderAlive = new LeaderLivenessCheckScheduler(errorHandler, table, leaderBlob, currentJMVersion, INITIAL_STATE);
leaderBarrierScheduler = null;
renewLease = null;
liveness = null;
}