paxos/src/main.cc

50 lines
1.4 KiB
C++
Raw Normal View History

2020-05-05 12:11:54 +00:00
#include <iostream>
#include <unordered_map>
2020-05-05 12:11:54 +00:00
#include "config/config.hh"
2020-05-05 12:47:12 +00:00
#include "legislator/legislator-factory.hh"
2020-05-05 13:39:59 +00:00
#include "events/register.hh"
2020-05-05 17:29:14 +00:00
#include "misc/logger.hh"
2020-05-05 12:11:54 +00:00
2020-05-05 13:39:59 +00:00
paxos::EventWatcherRegistry paxos::event_register;
std::unordered_map<std::string, paxos::shared_legislator> paxos::legislators;
2020-05-05 17:29:14 +00:00
paxos::shared_legislator paxos::self;
2020-05-05 12:11:54 +00:00
2020-05-05 13:59:10 +00:00
ev_signal sigint_watcher;
static void sigint_cb(struct ev_loop* loop, ev_signal*, int)
{
ev_break(loop, EVBREAK_ALL);
}
2020-05-05 17:29:14 +00:00
ev_signal sigstop_watcher;
static void sigstop_cb(struct ev_loop*, ev_signal*, int)
{
log("SIGSTOP detected trying to initiate ballot", paxos::red);
paxos::self->initiate_ballot();
}
2020-05-05 13:59:10 +00:00
2020-05-06 17:00:09 +00:00
int main(int argc, char **argv)
2020-05-05 11:11:48 +00:00
{
2020-05-06 17:00:09 +00:00
if (argc != 3)
return 1;
paxos::ServerConfig server_config = paxos::ServerConfig::parse(argv);
2020-05-05 12:47:12 +00:00
2020-05-05 13:59:10 +00:00
ev_signal_init(&sigint_watcher, sigint_cb, SIGINT);
paxos::event_register.get_event_loop().register_sigint_watcher(&sigint_watcher);
2020-05-05 17:29:14 +00:00
ev_signal_init(&sigstop_watcher, sigstop_cb, SIGTSTP);
paxos::event_register.get_event_loop().register_sigint_watcher(&sigstop_watcher);
2020-05-05 12:47:12 +00:00
for (auto config : server_config.legislators_)
{
2020-05-06 17:07:37 +00:00
paxos::shared_legislator legislator = paxos::LegislatorFactory::Create(config);
paxos::legislators.insert(std::pair(config.name, legislator));
if (config.is_self)
paxos::self = legislator;
2020-05-05 12:47:12 +00:00
}
2020-05-05 13:59:10 +00:00
paxos::event_register.get_event_loop()();
return 0;
2020-05-05 11:11:48 +00:00
}