#include "communication/raft/rpc.hpp" #include "communication/raft/storage/file.hpp" #include "communication/raft/test_utils.hpp" using namespace std::literals::chrono_literals; namespace raft = communication::raft; using io::network::Endpoint; using raft::RaftConfig; using raft::RpcNetwork; using raft::test_utils::DummyState; DEFINE_string(member_id, "", "id of Raft member"); DEFINE_string(log_dir, "", "Raft log directory"); /* Start cluster members with: * ./raft_rpc --member-id a --log-dir a_log * ./raft_rpc --member-id b --log-dir b_log * ./raft_rpc --member-id c --log-dir c_log * * Enjoy democracy! */ int main(int argc, char *argv[]) { google::InitGoogleLogging(argv[0]); gflags::ParseCommandLineFlags(&argc, &argv, true); std::unordered_map directory = { {"a", Endpoint("127.0.0.1", 12345)}, {"b", Endpoint("127.0.0.1", 12346)}, {"c", Endpoint("127.0.0.1", 12347)}}; communication::rpc::Server server(directory[FLAGS_member_id]); // TODO: Serialize RPC via Cap'n Proto // RpcNetwork network(server, directory); // raft::SimpleFileStorage storage(FLAGS_log_dir); // raft::RaftConfig config{{"a", "b", "c"}, 150ms, 300ms, 70ms, 30ms}; // { // raft::RaftMember raft_member(network, storage, FLAGS_member_id, // config); // while (true) { // continue; // } // } return 0; }