25namespace service_discovery {
51void NodeManager::Dispose(
const ChangeMsg& msg) {
52 if (msg.operate_type() == OperateType::OPT_JOIN) {
60void NodeManager::OnTopoModuleLeave(
const std::string& host_name,
65 attr.set_host_name(host_name);
66 attr.set_process_id(process_id);
67 std::vector<RolePtr> nodes_to_remove;
68 nodes_.
Search(attr, &nodes_to_remove);
69 for (
auto& node : nodes_to_remove) {
70 nodes_.
Remove(node->attributes().node_id());
74 for (
auto& node : nodes_to_remove) {
75 Convert(node->attributes(), RoleType::ROLE_NODE, OperateType::OPT_LEAVE,
81void NodeManager::DisposeJoin(
const ChangeMsg& msg) {
82 auto node = std::make_shared<RoleNode>(msg.role_attr(), msg.timestamp());
83 uint64_t key = node->attributes().node_id();
85 if (!nodes_.
Add(key, node,
false)) {
87 if (!nodes_.
Search(key, &existing_node)) {
88 nodes_.
Add(key, node);
92 RolePtr newer_node = existing_node;
93 if (node->IsEarlierThan(*newer_node)) {
94 nodes_.
Add(key, node);
99 if (newer_node->attributes().process_id() ==
process_id_ &&
100 newer_node->attributes().host_name() ==
host_name_) {
101 AERROR <<
"this process will be terminated due to duplicated node["
102 << node->attributes().node_name()
103 <<
"], please ensure that each node has a unique name.";
109void NodeManager::DisposeLeave(
const ChangeMsg& msg) {
110 auto node = std::make_shared<RoleNode>(msg.role_attr(), msg.timestamp());
111 nodes_.
Remove(node->attributes().node_id());
static uint64_t RegisterNode(const std::string &node_name)
void Notify(const ChangeMsg &msg)
void Convert(const RoleAttributes &attr, RoleType role, OperateType opt, ChangeMsg *msg)
std::string channel_name_
std::atomic< bool > is_discovery_started_
virtual ~NodeManager()
Destroy the Node Manager object
void GetNodes(RoleAttrVec *nodes)
Get the Nodes object
std::vector< RoleAttributes > RoleAttrVec
bool HasNode(const std::string &node_name)
Checkout whether we have node_name in topology
NodeManager()
Construct a new Node Manager object
void GetAllRoles(std::vector< RolePtr > *roles) override
void Remove(uint64_t key) override
bool Search(uint64_t key) override
bool Add(uint64_t key, const RolePtr &role, bool ignore_if_exist=true) override
#define RETURN_IF_NULL(ptr)
#define RETURN_VAL_IF(condition, val)
#define RETURN_IF(condition)
std::shared_ptr< RoleBase > RolePtr