in bistro/server/main.cpp [56:137]
int main(int argc, char* argv[]) {
FLAGS_logtostderr = 1;
folly::init(&argc, &argv);
registerDefaultSchedulerPolicies();
boost::filesystem::path config_file(FLAGS_config_file);
auto config_loader = make_shared<FileConfigLoader>(
std::chrono::milliseconds(FLAGS_config_update_ms),
boost::filesystem::absolute(config_file)
);
auto nodes_loader = make_shared<NodesLoader>(
config_loader,
std::chrono::milliseconds(FLAGS_nodes_update_ms),
std::chrono::milliseconds(FLAGS_nodes_retry_ms)
);
shared_ptr<TaskStore> task_store;
if (FLAGS_clean_statuses || FLAGS_dry_run || FLAGS_benchmark_run) {
task_store.reset(new NoOpTaskStore());
} else {
CHECK(!FLAGS_status_table.empty()) << "You must pass --status_table";
task_store.reset(new SQLiteTaskStore(FLAGS_data_dir, FLAGS_status_table));
}
auto task_statuses = make_shared<TaskStatuses>(task_store);
auto monitor = make_shared<Monitor>(
config_loader,
nodes_loader,
task_statuses
);
shared_ptr<TaskRunner> task_runner;
if (FLAGS_dry_run) {
task_runner.reset(new NoOpRunner());
} else if (FLAGS_benchmark_run) {
task_runner.reset(new BenchmarkRunner());
} else if (!FLAGS_worker_command.empty()) {
task_runner.reset(new LocalRunner(FLAGS_worker_command, FLAGS_data_dir));
} else {
task_runner.reset(new RemoteWorkerRunner(task_statuses, monitor));
}
// Initialize the scheduler thread itself
Bistro bistro(
config_loader,
nodes_loader,
task_statuses,
task_runner,
monitor
);
folly::ThreadedRepeatingFunctionRunner bistro_thread;
bistro_thread.add(
"BistroSchedule", bind(&Bistro::scheduleOnceSystemTime, &bistro)
);
SCOPE_EXIT { bistro_thread.stop(); };
auto http_monitor = make_shared<HTTPMonitor>(
config_loader,
nodes_loader,
task_statuses,
task_runner,
monitor
);
HTTPMonitorServer http_monitor_server(http_monitor);
// Initialize the thrift monitor
auto handler = std::make_unique<ThriftMonitor>(
config_loader,
nodes_loader,
task_statuses,
task_runner,
monitor
);
auto server = make_shared<apache::thrift::ThriftServer>();
server->setPort(FLAGS_server_port);
server->setInterface(std::move(handler));
server->serve();
}