13auto main(
int argc,
char** argv) ->
int {
16 std::cout <<
"Usage: " << args[0]
17 <<
" <config file> <coordinator ID> <node ID>" << std::endl;
22 if(std::holds_alternative<std::string>(cfg_or_err)) {
23 std::cerr <<
"Error loading config file: "
24 << std::get<std::string>(cfg_or_err) << std::endl;
27 auto opts = std::get<cbdc::config::options>(cfg_or_err);
29 auto coordinator_id = std::stoull(args[2]);
30 auto node_id = std::stoull(args[3]);
32 if(opts.m_coordinator_endpoints.size() <= coordinator_id) {
33 std::cerr <<
"Coordinator ID not configured" << std::endl;
37 if(opts.m_coordinator_endpoints[coordinator_id].size() <= node_id) {
38 std::cerr <<
"Coordinator node ID not configured" << std::endl;
42 auto logger = std::make_shared<cbdc::logging::log>(
43 opts.m_coordinator_loglevels[coordinator_id]);
45 std::string sha2_impl(SHA256AutoDetect());
46 logger->info(
"using sha2: ", sha2_impl);
52 logger->fatal(
"Failed to initialize raft cluster");
55 static std::atomic_bool running{
true};
58 std::signal(SIGINT, [](
int ) {
62 logger->info(
"Coordinator running...");
65 static constexpr auto running_check_delay
66 = std::chrono::milliseconds(1000);
67 std::this_thread::sleep_for(running_check_delay);
70 logger->info(
"Shutting down...");