def __add_node(self, node_ip, is_enable): """ Method: __add_node Description: 增加节点 Parameter: node_ip: 节点的ip is_enable: 是否启用了 Return: 错误码 Others: """ ret = 0 if node_ip == self.__cluster_cfg_info.my_inner_ip: return ret for node in self.__other_nodes: if node.get_ip() == node_ip: break else: node_info = ClusterNodeInfo(node_ip) if is_enable == 0: node_info.set_enable(False) self.__other_nodes.append(node_info) url = self.__get_url(node_ip) ret = self.__callacp_client.new_connect(url) if ret != 0: tracelog.error("new connection to cluster node failed. %s" % url) return ret
def reload_nodes(self, log_all_nodes = False): """ Method: reload_nodes Description: 从数据库中重新记载节点信息 Parameter: log_all_nodes: 是否将所有的节点信息记录日志 Return: 错误码,当前的节点信息 Others: """ # 从DB中读取所有节点的信息 # 返回值: 错误码, 当前node cur_node = None with self.__lock: if self.__mit is None: try: db_file = os.path.join(self.__app_top_path, "data", "sqlite", "cluster.db") self.__mit = ClusterMit(db_file) except: tracelog.exception("reload cluster node failed.") return err_code_mgr.ER_CLUSTER_START_FAILED, None # 加载所有的节点信息 other_nodes_ips = set([node.get_ip() for node in self.__other_nodes]) nodes = self.__mit.get_all_nodes() for node in nodes: if node.ip == self.__cluster_cfg_info.my_inner_ip: cur_node = ClusterNodeInfo(node.ip) if node.is_enable == 0: cur_node.set_enable(False) else: other_nodes_ips.discard(node.ip) ret = self.__add_node(node.ip, node.is_enable) if ret != 0: tracelog.error("add cluster node %s failed." % node.ip) return err_code_mgr.ER_CLUSTER_START_FAILED, None if log_all_nodes is True: tracelog.info("load cluster node: %s" % node.ip) # 删除已经不存在的节点 for node_ip in other_nodes_ips: self.__rmv_node(node_ip) return 0, cur_node
def get_all_nodes(self): """ Method: get_all_nodes Description: 获取所有的节点信息 Parameter: 无 Return: 所有的节点信息 Others: """ # 获取所有的nodes的信息 with self.__lock: all_nodes = copy.deepcopy(self.__other_nodes) myself = ClusterNodeInfo(self.__cluster_cfg_info.my_inner_ip) myself.set_role(self.__role) myself.set_online(True) all_nodes.append(myself) return all_nodes