com.hubspot.singularity.executor.SingularityExecutorRunner Maven / Gradle / Ivy
The newest version!
package com.hubspot.singularity.executor;
import ch.qos.logback.classic.LoggerContext;
import com.google.common.collect.ImmutableSet;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Stage;
import com.google.inject.name.Named;
import com.hubspot.mesos.JavaUtils;
import com.hubspot.singularity.executor.config.SingularityExecutorConfiguration;
import com.hubspot.singularity.executor.config.SingularityExecutorModule;
import com.hubspot.singularity.executor.task.LocalDownloadServiceFetcher;
import com.hubspot.singularity.runner.base.config.SingularityRunnerBaseModule;
import com.hubspot.singularity.runner.base.configuration.BaseRunnerConfiguration;
import com.hubspot.singularity.s3.base.config.SingularityS3Configuration;
import org.apache.mesos.MesosExecutorDriver;
import org.apache.mesos.Protos;
import org.slf4j.ILoggerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SingularityExecutorRunner {
private static final Logger LOG = LoggerFactory.getLogger(
SingularityExecutorRunner.class
);
public static void main(String... args) {
final long start = System.currentTimeMillis();
try {
final Injector injector = Guice.createInjector(
Stage.PRODUCTION,
new SingularityRunnerBaseModule(
SingularityExecutorConfiguration.class,
ImmutableSet.>of(
SingularityS3Configuration.class
)
),
new SingularityExecutorModule()
);
final SingularityExecutorRunner executorRunner = injector.getInstance(
SingularityExecutorRunner.class
);
final LocalDownloadServiceFetcher downloadServiceFetcher = injector.getInstance(
LocalDownloadServiceFetcher.class
);
downloadServiceFetcher.start();
final Protos.Status driverStatus = executorRunner.run();
LOG.info(
"Executor finished after {} with status: {}",
JavaUtils.duration(start),
driverStatus
);
downloadServiceFetcher.stop();
stopLog();
System.exit(driverStatus == Protos.Status.DRIVER_STOPPED ? 0 : 1);
} catch (Throwable t) {
LOG.error("Finished after {} with error", JavaUtils.duration(start), t);
stopLog();
System.exit(1);
}
}
private static void stopLog() {
ILoggerFactory loggerFactory = LoggerFactory.getILoggerFactory();
if (loggerFactory instanceof LoggerContext) {
LoggerContext context = (LoggerContext) loggerFactory;
context.stop();
}
}
private final String name;
private final SingularityExecutor singularityExecutor;
private final SingularityExecutorMonitor monitor;
@Inject
public SingularityExecutorRunner(
@Named(SingularityRunnerBaseModule.PROCESS_NAME) String name,
SingularityExecutor singularityExecutor,
SingularityExecutorMonitor monitor
) {
this.name = name;
this.singularityExecutor = singularityExecutor;
this.monitor = monitor;
}
public Protos.Status run() {
LOG.info("{} starting MesosExecutorDriver...", name);
final MesosExecutorDriver driver = new MesosExecutorDriver(singularityExecutor);
monitor.start(driver);
Runtime
.getRuntime()
.addShutdownHook(
new Thread("SingularityExecutorRunnerGracefulShutdown") {
@Override
public void run() {
LOG.info("Executor is shutting down, ensuring shutdown via shutdown hook");
monitor.shutdown(driver);
}
}
);
return driver.run();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy