Summary: Implemented cluster discovery in distributed memgraph. When a worker registers, it sends a RPC request to master. The master assigns that worker an id and sends the information about other workers (pairs of <worker_id, endpoint>) to the new worker. Master also sends the information about the new worker to all existing workers in the process of worker registration. After the last worker registers, all memgraph instances in the clusters should know about every other. Reviewers: mtomic, buda, florijan Reviewed By: mtomic Subscribers: teon.banek, dgleich, pullbot Differential Revision: https://phabricator.memgraph.io/D1339
35 lines
916 B
C++
35 lines
916 B
C++
#include "glog/logging.h"
|
|
|
|
#include "distributed/coordination.hpp"
|
|
|
|
namespace distributed {
|
|
using Endpoint = io::network::Endpoint;
|
|
|
|
Coordination::Coordination(const Endpoint &master_endpoint) {
|
|
// The master is always worker 0.
|
|
workers_.emplace(0, master_endpoint);
|
|
}
|
|
|
|
Endpoint Coordination::GetEndpoint(int worker_id) {
|
|
auto found = workers_.find(worker_id);
|
|
CHECK(found != workers_.end()) << "No endpoint registered for worker id: "
|
|
<< worker_id;
|
|
return found->second;
|
|
}
|
|
|
|
std::vector<int> Coordination::GetWorkerIds() const {
|
|
std::vector<int> worker_ids;
|
|
for (auto worker : workers_) worker_ids.push_back(worker.first);
|
|
return worker_ids;
|
|
}
|
|
|
|
void Coordination::AddWorker(int worker_id, Endpoint endpoint) {
|
|
workers_.emplace(worker_id, endpoint);
|
|
}
|
|
|
|
std::unordered_map<int, Endpoint> Coordination::GetWorkers() {
|
|
return workers_;
|
|
}
|
|
|
|
} // namespace distributed
|