def INIT(self, request): self.response = MakeResponse(msg_mds.GROUP_DEL_RESPONSE, request) self.request = request self.request_body = request.body.Extensions[msg_mds.group_del_request] if g.is_ready == False: self.response.rc.retcode = msg_mds.RC_MDS_SERVICE_IS_NOT_READY self.response.rc.message = "MDS service is not ready" self.SendResponse(self.response) return MS_FINISH self.group_name = self.request_body.group_name node_index = self.request_body.node_index error, self.node_uuid = common.GetUUIDFromIndex(node_index) if error: self.response.rc.retcode = msg_mds.RC_MDS_NODE_FIND_FAIL self.response.rc.message = "Not find %s" % node_index self.SendResponse(self.response) return MS_FINISH error, self.group_info = common.GetGroupInfoFromName(self.group_name) if error: self.response.rc.retcode = msg_mds.RC_MDS_GROUP_FIND_FAIL self.response.rc.message = "Not found group %s" % self.group_name self.SendResponse(self.response) return MS_FINISH if not self.node_uuid in self.group_info.node_uuids: self.response.rc.retcode = msg_mds.RC_MDS_NODE_FIND_FAIL self.response.rc.message = "Not find %s in %s" % (node_index, self.group_name) self.SendResponse(self.response) return MS_FINISH # 更新lun信息 # 如果已经存在node计数 >= 2则减1 self.task_info = [] for lun_info in g.lun_list.lun_infos: if self.group_name in lun_info.group_name: for group_info in lun_info.group_info: if self.node_uuid == group_info.group_uuid and group_info.group_state >= 2: group_info.group_state -= 1 data = pb2dict_proxy.pb2dict("lun_info", lun_info) e, _ = dbservice.srv.update( "/lun/%s" % lun_info.lun_id, data) if e: logger.run.error("Update lun info faild %s:%s" % (e, _)) self.response.rc.retcode = msg_mds.RC_MDS_UPDATE_DB_DATA_FAILED self.response.rc.message = "Keep data failed" self.SendResponse(self.response) return MS_FINISH # 如果已经存在node计数=1offline此节点 elif self.node_uuid == group_info.group_uuid and group_info.group_state == 1: self.task_info.append(lun_info) if self.task_info: return self.Do_Task() else: return self.Update_Group_Config()
def INIT(self, request): self.response = MakeResponse(msg_mds.GROUP_DROP_RESPONSE, request) self.request = request self.request_body = request.body.Extensions[msg_mds.group_drop_request] if g.is_ready == False: self.response.rc.retcode = msg_mds.RC_MDS_SERVICE_IS_NOT_READY self.response.rc.message = "MDS service is not ready" self.SendResponse(self.response) return MS_FINISH group_name = self.request_body.group_name error,self.group_info = common.GetGroupInfoFromName(group_name) if error: self.response.rc.retcode = msg_mds.RC_MDS_GROUP_FIND_FAIL self.response.rc.message = "Not found group %s"% group_name self.SendResponse(self.response) return MS_FINISH found = 0 for lun_info in g.lun_list.lun_infos: if group_name in lun_info.group_name: found += 1 if found: self.response.rc.retcode = msg_mds.RC_MDS_GROUP_FIND_FAIL self.response.rc.message = "Group %s is used for lun" %group_name self.SendResponse(self.response) return MS_FINISH e, _ = dbservice.srv.delete("/group_list/%s"%group_name) if e: logger.run.error("Delete group list faild %s:%s" % (e, _)) self.response.rc.retcode = msg_mds.RC_MDS_DELETE_DB_DATA_FAILED self.response.rc.message = "Keep data failed" self.SendResponse(self.response) return MS_FINISH # 同配置文件全局更新 group_list = msg_mds.G_GroupConfList() for group in g.group_list.groups: if group_name != group.group_name: group_list.groups.add().CopyFrom(group) g.group_list = group_list self.response.rc.retcode = msg_pds.RC_SUCCESS self.SendResponse(self.response) return MS_FINISH
def INIT(self, request): self.default_timeout = 120 self.response = MakeResponse(msg_mds.LUN_CONFIG_RESPONSE, request) self.request = request self.request_body = request.body.Extensions[msg_mds.lun_config_request] if g.is_ready == False: self.response.rc.retcode = msg_mds.RC_MDS_SERVICE_IS_NOT_READY self.response.rc.message = "MDS service is not ready" self.SendResponse(self.response) return MS_FINISH # 如果给组参数查询组 if self.request_body.HasField("group_name"): error,group_info = common.GetGroupInfoFromName(self.request_body.group_name) if error: self.response.rc.retcode = msg_mds.RC_MDS_GROUP_FIND_FAIL self.response.rc.message = "Not found group %s"% self.request_body.group_name self.SendResponse(self.response) return MS_FINISH group_uuid = group_info.node_uuids if not group_uuid: self.response.rc.retcode = msg_mds.RC_MDS_GROUP_FIND_FAIL self.response.rc.message = "Group %s not configure node"%self.request_body.group_name self.SendResponse(self.response) return MS_FINISH else: self.response.rc.retcode = msg_mds.RC_MDS_ERROR_PARAMS self.response.rc.message = "Not specify group name" self.SendResponse(self.response) return MS_FINISH items = self.request_body.lun_name.split("_") if len(items) != 2 or items[0] != g.node_info.node_name: self.response.rc.retcode = msg_mds.RC_MDS_LUN_NOT_EXIST self.response.rc.message = "Lun '%s' is not exist" % self.request_body.lun_name self.SendResponse(self.response) return MS_FINISH lun_name = items[1] lun_info = common.GetLunInfoByName(lun_name) if lun_info == None: self.response.rc.retcode = msg_mds.RC_MDS_LUN_NOT_EXIST self.response.rc.message = "Lun %s not exist" % (self.request_body.lun_name) self.SendResponse(self.response) return MS_FINISH self.lun_info = msg_pds.LunInfo() self.lun_info.CopyFrom(lun_info) if not self.request_body.del_group: if self.request_body.group_name in self.lun_info.group_name: self.response.rc.retcode = msg_mds.RC_MDS_GROUP_FIND_FAIL self.response.rc.message = "Group %s already config"%self.request_body.group_name self.SendResponse(self.response) return MS_FINISH else: if self.request_body.group_name not in self.lun_info.group_name: self.response.rc.retcode = msg_mds.RC_MDS_GROUP_FIND_FAIL self.response.rc.message = "Group %s not find in lun"%self.request_body.group_name self.SendResponse(self.response) return MS_FINISH exsist_groups=set() eqone_groups=set() if self.lun_info.group_info: for info in self.lun_info.group_info: exsist_groups.add(info.group_uuid) if info.group_state == 1: eqone_groups.add(info.group_uuid) param_groups=set(group_uuid) self.add_groups = list(param_groups - exsist_groups) #独有的 self.add_common_groups = list(param_groups & exsist_groups) #共有的 self.del_groups = list(set(self.add_common_groups) & eqone_groups) #共有的且值为1 self.del_common_groups = list(set(self.add_common_groups) - eqone_groups)#共有的且值不为1 # 判断是添加配置还是删除配置 if self.request_body.del_group: if not self.del_groups: self.response.rc.retcode = msg_pds.RC_SUCCESS return self.Entry_OfflineLun(self.response,ios=False) return self.del_group(self.del_groups) else: if not self.add_groups: self.response.rc.retcode = msg_pds.RC_SUCCESS return self.Entry_OnlineLun(self.response,ios=False) return self.add_group(self.add_groups)
def INIT(self, request): self.response = MakeResponse(msg_mds.GET_LUN_LIST_RESPONSE, request) self.request = request self.request_body = request.body.Extensions[ msg_mds.get_lun_list_request] if g.is_ready == False: self.response.rc.retcode = msg_mds.RC_MDS_SERVICE_IS_NOT_READY self.response.rc.message = "MDS service is not ready" self.SendResponse(self.response) return MS_FINISH self.qos_name = "" if self.request_body.HasField("qos_name"): self.qos_name = self.request_body.qos_name self.qos_template_info = common.GetQosTemplateInfoByName( self.qos_name) if not self.qos_template_info: self.response.rc.retcode = msg_mds.RC_MDS_QOS_TEMPLATE_NOT_EXIST self.response.rc.message = "QoS '%s' is not exist" % self.qos_name self.SendResponse(self.response) return MS_FINISH self.group_name = "" if self.request_body.HasField("group_name"): self.group_name = self.request_body.group_name error, self.group_info = common.GetGroupInfoFromName( self.group_name) if error: self.response.rc.retcode = msg_mds.RC_MDS_GROUP_FIND_FAIL self.response.rc.message = "Not found group %s" % self.group_name self.SendResponse(self.response) return MS_FINISH for _lun_info in g.lun_list.lun_infos: # 过滤指定qos下的lun if self.qos_name and _lun_info.qos_template_name != self.qos_name: continue if self.group_name and self.group_name not in _lun_info.group_name: continue lun_info = msg_pds.LunInfo() lun_info.CopyFrom(_lun_info) for group in lun_info.group_info: error, index = common.GetIndexFromUUID(group.group_uuid) if not error: lun_info.node_index.extend([index]) if lun_info.lun_type == msg_pds.LUN_TYPE_BASEDISK: basedisk_info = common.GetBaseDiskInfoById( lun_info.Extensions[msg_pds.ext_luninfo_basedisk_id]) data_disk_info = common.GetDiskInfoByID(basedisk_info.disk_id) data_part_info = common.GetDiskPartByID( basedisk_info.disk_id, basedisk_info.disk_part) lun_info.Extensions[ msg_mds.ext_luninfo_size] = data_part_info.size lun_info.Extensions[msg_mds.ext_luninfo_scsiid] = "xx" lun_info.Extensions[ msg_mds.ext_luninfo_node_name] = g.node_info.node_name lun_info.Extensions[ msg_mds. ext_luninfo_data_dev_name] = data_part_info.dev_name lun_info.Extensions[ msg_mds.ext_luninfo_data_disk_name] = "%sp%s" % ( data_disk_info.disk_name, data_part_info.disk_part) lun_info.Extensions[ msg_mds. ext_luninfo_data_actual_state] = data_part_info.actual_state elif lun_info.lun_type == msg_pds.LUN_TYPE_BASEDEV: basedev_info = common.GetBaseDevInfoById( lun_info.Extensions[msg_pds.ext_luninfo_basedev_id]) lun_info.Extensions[ msg_mds.ext_luninfo_size] = basedev_info.size lun_info.Extensions[msg_mds.ext_luninfo_scsiid] = "xx" lun_info.Extensions[ msg_mds.ext_luninfo_node_name] = g.node_info.node_name lun_info.Extensions[ msg_mds.ext_luninfo_data_dev_name] = basedev_info.dev_name lun_info.Extensions[msg_mds.ext_luninfo_data_disk_name] = "" elif lun_info.lun_type == msg_pds.LUN_TYPE_SMARTCACHE: smartcache_info = common.GetSmartCacheInfoById( lun_info.Extensions[msg_pds.ext_luninfo_smartcache_id]) data_disk_info = common.GetDiskInfoByID( smartcache_info.data_disk_id) data_part_info = common.GetDiskPartByID( smartcache_info.data_disk_id, smartcache_info.data_disk_part) cache_disk_info = common.GetDiskInfoByID( smartcache_info.cache_disk_id) cache_part_info = common.GetDiskPartByID( smartcache_info.cache_disk_id, smartcache_info.cache_disk_part) lun_info.Extensions[ msg_mds.ext_luninfo_size] = data_part_info.size lun_info.Extensions[ msg_mds.ext_luninfo_cache_size] = cache_part_info.size lun_info.Extensions[msg_mds.ext_luninfo_scsiid] = "xx" lun_info.Extensions[ msg_mds.ext_luninfo_node_name] = g.node_info.node_name lun_info.Extensions[ msg_mds. ext_luninfo_data_dev_name] = data_part_info.dev_name lun_info.Extensions[ msg_mds.ext_luninfo_data_disk_name] = "%sp%s" % ( data_disk_info.disk_name, data_part_info.disk_part) lun_info.Extensions[ msg_mds.ext_luninfo_cache_disk_name] = "%sp%s" % ( cache_disk_info.disk_name, cache_part_info.disk_part) lun_info.Extensions[msg_mds.ext_luninfo_cache_dev_name].append( cache_part_info.dev_name) lun_info.Extensions[ msg_mds. ext_luninfo_data_actual_state] = data_part_info.actual_state lun_info.Extensions[ msg_mds.ext_luninfo_cache_actual_state].append( cache_part_info.actual_state) elif lun_info.lun_type == msg_pds.LUN_TYPE_PALCACHE: palcache_info = common.GetPalCacheInfoById( lun_info.Extensions[msg_pds.ext_luninfo_palcache_id]) data_disk_info = common.GetDiskInfoByID(palcache_info.disk_id) data_part_info = common.GetDiskPartByID( palcache_info.disk_id, palcache_info.disk_part) pool_info = common.GetPoolInfoById(palcache_info.pool_id) pool_disk = common.GetDiskInfoByID( pool_info.pool_disk_infos[0].disk_id) pool_part = common.GetDiskPartByID( pool_info.pool_disk_infos[0].disk_id, pool_info.pool_disk_infos[0].disk_part) lun_info.Extensions[ msg_mds.ext_luninfo_size] = data_part_info.size lun_info.Extensions[ msg_mds.ext_luninfo_cache_size] = pool_part.size lun_info.Extensions[msg_mds.ext_luninfo_scsiid] = "xx" lun_info.Extensions[ msg_mds.ext_luninfo_node_name] = g.node_info.node_name lun_info.Extensions[ msg_mds. ext_luninfo_data_dev_name] = data_part_info.dev_name lun_info.Extensions[ msg_mds.ext_luninfo_data_disk_name] = "%sp%s" % ( data_disk_info.disk_name, data_part_info.disk_part) lun_info.Extensions[ msg_mds.ext_luninfo_cache_disk_name] = pool_info.pool_name lun_info.Extensions[msg_mds.ext_luninfo_cache_dev_name].append( pool_part.dev_name) if palcache_info.HasExtension( msg_mds.ext_palcache_export_info): palcache_cache_model = palcache_info.Extensions[ msg_mds.ext_palcache_export_info].palcache_cache_model lun_info.Extensions[ msg_mds. ext_luninfo_palcache_cache_model] = palcache_cache_model lun_info.Extensions[ msg_mds. ext_luninfo_data_actual_state] = data_part_info.actual_state lun_info.Extensions[ msg_mds.ext_luninfo_cache_actual_state].append( pool_part.actual_state) elif lun_info.lun_type == msg_pds.LUN_TYPE_PALRAW: palraw_info = common.GetPalRawInfoById( lun_info.Extensions[msg_pds.ext_luninfo_palraw_id]) data_disk_info = common.GetDiskInfoByID(palraw_info.disk_id) data_part_info = common.GetDiskPartByID( palraw_info.disk_id, palraw_info.disk_part) lun_info.Extensions[ msg_mds.ext_luninfo_size] = data_part_info.size lun_info.Extensions[msg_mds.ext_luninfo_scsiid] = "xx" lun_info.Extensions[ msg_mds.ext_luninfo_node_name] = g.node_info.node_name lun_info.Extensions[ msg_mds. ext_luninfo_data_dev_name] = data_part_info.dev_name lun_info.Extensions[ msg_mds.ext_luninfo_data_disk_name] = "%sp%s" % ( data_disk_info.disk_name, data_part_info.disk_part) lun_info.Extensions[ msg_mds. ext_luninfo_data_actual_state] = data_part_info.actual_state elif lun_info.lun_type == msg_pds.LUN_TYPE_PALPMT: palpmt_info = common.GetPalPmtInfoById( lun_info.Extensions[msg_pds.ext_luninfo_palpmt_id]) pool_info = common.GetPoolInfoById(palpmt_info.pool_id) data_part_info = common.GetDiskPartByID( pool_info.pool_disk_infos[0].disk_id, pool_info.pool_disk_infos[0].disk_part) lun_info.Extensions[ msg_mds.ext_luninfo_size] = palpmt_info.size lun_info.Extensions[ msg_mds.ext_luninfo_node_name] = g.node_info.node_name lun_info.Extensions[ msg_mds.ext_luninfo_data_disk_name] = pool_info.pool_name lun_info.Extensions[ msg_mds. ext_luninfo_data_dev_name] = data_part_info.dev_name lun_info.Extensions[ msg_mds. ext_luninfo_data_actual_state] = data_part_info.actual_state else: assert (0) self.response.body.Extensions[ msg_mds.get_lun_list_response].lun_infos.add().CopyFrom( lun_info) self.response.rc.retcode = msg_pds.RC_SUCCESS self.SendResponse(self.response) return MS_FINISH
def INIT(self, request): self.response = MakeResponse(msg_mds.NODE_CONFIG_RESPONSE, request) self.request = request self.request_body = request.body.Extensions[msg_mds.node_config_request] if g.is_ready == False: self.response.rc.retcode = msg_mds.RC_MDS_SERVICE_IS_NOT_READY self.response.rc.message = "MDS service is not ready" self.SendResponse(self.response) return MS_FINISH if self.request_body.HasField("node_index") and self.request_body.HasField("group_name"): node_index = self.request_body.node_index self.group_name = self.request_body.group_name error,self.node_uuid = common.GetUUIDFromIndex(node_index) if error: self.response.rc.retcode = msg_mds.RC_MDS_NODE_FIND_FAIL self.response.rc.message = "Not find %s" %node_index self.SendResponse(self.response) return MS_FINISH error,self.group_info = common.GetGroupInfoFromName(self.group_name) if error: self.response.rc.retcode = msg_mds.RC_MDS_GROUP_FIND_FAIL self.response.rc.message = "Not found group %s"% self.group_name self.SendResponse(self.response) return MS_FINISH if self.node_uuid in self.group_info.node_uuids: self.response.rc.retcode = msg_mds.RC_MDS_NODE_FIND_FAIL self.response.rc.message = "Node %s already in group %s" % (node_index,self.group_name) self.SendResponse(self.response) return MS_FINISH # 更新lun信息 # 如果已经存在node则直接更新配置计数 found = 0 for lun_info in g.lun_list.lun_infos: if self.group_name in lun_info.group_name: for group_info in lun_info.group_info: if self.node_uuid == group_info.group_uuid: group_info.group_state +=1 data = pb2dict_proxy.pb2dict("lun_info", lun_info) e, _ = dbservice.srv.update("/lun/%s" % lun_info.lun_id, data) if e: logger.run.error("Update lun info faild %s:%s" % (e, _)) self.response.rc.retcode = msg_mds.RC_MDS_UPDATE_DB_DATA_FAILED self.response.rc.message = "Keep data failed" self.SendResponse(self.response) return MS_FINISH found += 1 # 如果不存在需要上线该节点 if not found: self.task_info = [] for lun_info in g.lun_list.lun_infos: if self.group_name in lun_info.group_name: self.task_info.append(lun_info) return self.Do_Task() else: return self.Update_Group_Config() elif self.request_body.HasField('node_name'): node_info = msg_pds.NodeInfo() node_info.CopyFrom(g.node_info) # TODO: 补充node-name个数和字符的合法性检查 if len(self.request_body.node_name) > 5: self.response.rc.retcode = msg_mds.RC_MDS_ERROR_PARAMS self.response.rc.message = "Node name max len is 5" self.SendResponse(self.response) return MS_FINISH # 检查当前是否有在线的lun if len([lun_info for lun_info in g.lun_list.lun_infos if lun_info.config_state==True]) != 0: self.response.rc.retcode = msg_mds.RC_MDS_REFUSE_CONFIG_NODE_NAME self.response.rc.message = "Please offline all luns before config node name" self.SendResponse(self.response) return MS_FINISH node_info.node_name = self.request_body.node_name data = pb2dict_proxy.pb2dict("node_info", node_info) # 首次配置的时候, 配置文件中还没有node-info e, _ = dbservice.srv.get("/node_info") if e == dbclient.RC_ERR_NODE_NOT_EXIST: e, _ = dbservice.srv.create("/node_info", data) if e: logger.run.error("Create node info faild %s:%s" % (e, _)) self.response.rc.retcode = msg_mds.RC_MDS_CREATE_DB_DATA_FAILED self.response.rc.message = "Keep data failed" self.SendResponse(self.response) return MS_FINISH else: e, _ = dbservice.srv.update("/node_info", data) if e: logger.run.error("Update node info faild %s:%s" % (e, _)) self.response.rc.retcode = msg_mds.RC_MDS_UPDATE_DB_DATA_FAILED self.response.rc.message = "Keep data failed" self.SendResponse(self.response) return MS_FINISH g.node_info.CopyFrom(node_info) # 更新广播全局节点列表 for nsnode_info in g.nsnode_list.nsnode_infos: if nsnode_info.node_uuid == g.node_uuid: nsnode_info.node_name = node_info.node_name else: self.response.rc.retcode = msg_mds.RC_MDS_ERROR_PARAMS self.response.rc.message = "params error" self.SendResponse(self.response) return MS_FINISH self.response.rc.retcode = msg_pds.RC_SUCCESS self.SendResponse(self.response) return MS_FINISH
def INIT(self, request): self.default_timeout = 120 self.response = MakeResponse(msg_mds.LUN_ADD_RESPONSE, request) self.request = request self.request_body = request.body.Extensions[msg_mds.lun_add_request] if g.is_ready == False: self.response.rc.retcode = msg_mds.RC_MDS_SERVICE_IS_NOT_READY self.response.rc.message = "MDS service is not ready" self.SendResponse(self.response) return MS_FINISH self.data_disk_info = None self.cache_disk_info = None self.pool_info = None if self.request_body.HasField('lun_name'): self.lun_name = self.request_body.lun_name else: self.lun_name = common.NewLunName() # 查询组中节点信息 if self.request_body.HasField("group_name"): error, group_info = common.GetGroupInfoFromName( self.request_body.group_name) if error: self.response.rc.retcode = msg_mds.RC_MDS_GROUP_FIND_FAIL self.response.rc.message = "Not found group %s" % self.request_body.group_name self.SendResponse(self.response) return MS_FINISH self.group_uuid = group_info.node_uuids if not self.group_uuid: self.response.rc.retcode = msg_mds.RC_MDS_GROUP_FIND_FAIL self.response.rc.message = "Group %s not configure node" % self.request_body.group_name self.SendResponse(self.response) return MS_FINISH else: self.response.rc.retcode = msg_mds.RC_MDS_GROUP_FIND_FAIL self.response.rc.message = "Not specify group name" self.SendResponse(self.response) return MS_FINISH if self.request_body.lun_type == msg_pds.LUN_TYPE_BASEDISK: return self.BaseDiskCheck() elif self.request_body.lun_type == msg_pds.LUN_TYPE_SMARTCACHE: if g.license['SmartCacheSupport'].lower() != "yes": return self.LicenseFailed() return self.SmartCacheCheck() elif self.request_body.lun_type == msg_pds.LUN_TYPE_PALCACHE: if g.license['PALSupport'].lower() != "yes": return self.LicenseFailed() return self.PalCacheCheck() elif self.request_body.lun_type == msg_pds.LUN_TYPE_PALRAW: if g.license['PALSupport'].lower() != "yes": return self.LicenseFailed() return self.PalRawCheck() elif self.request_body.lun_type == msg_pds.LUN_TYPE_PALPMT: if g.license['PALSupport'].lower() != "yes": return self.LicenseFailed() return self.PalPmtCheck() elif self.request_body.lun_type == msg_pds.LUN_TYPE_BASEDEV: return self.BaseDevCheck() else: assert (0)
def INIT(self, request): self.response = MakeResponse(msg_mds.NODE_ADD_RESPONSE, request) self.request = request self.request_body = request.body.Extensions[msg_mds.node_add_request] if g.is_ready == False: self.response.rc.retcode = msg_mds.RC_MDS_SERVICE_IS_NOT_READY self.response.rc.message = "MDS service is not ready" self.SendResponse(self.response) return MS_FINISH #处理添加节点 if self.request_body.HasField('node_name'): node_name = self.request_body.node_name else: self.response.rc.retcode = msg_mds.RC_MDS_ERROR_PARAMS self.response.rc.message = "Not specify params node_name" self.SendResponse(self.response) return MS_FINISH if self.request_body.HasField('group_name'): self.group_name = self.request_body.group_name else: self.group_name = "" group_exists = 0 # 当指定组的时候查找组名 if self.group_name: error, self.group_info = common.GetGroupInfoFromName( self.group_name) if error: self.response.rc.retcode = msg_mds.RC_MDS_GROUP_FIND_FAIL self.response.rc.message = "Not found group %s" % self.group_name self.SendResponse(self.response) return MS_FINISH #获取实时节点列表对应的uuid found = 0 self.node_info = msg_pds.NodeInfoConf() for nsnode_info in g.nsnode_list.nsnode_infos: logger.run.debug("node info :%s" % nsnode_info) if not nsnode_info.HasField( "listen_ip") or not nsnode_info.HasField("broadcast_ip"): continue # FIXME:计算节点是否需要添加存储节点 if node_name == nsnode_info.node_name and nsnode_info.HasField( "node_uuid") and nsnode_info.sys_mode != "storage": self.node_info.node_uuid = nsnode_info.node_uuid self.node_info.node_name = nsnode_info.node_name self.node_info.listen_ip = nsnode_info.listen_ip self.node_info.listen_port = nsnode_info.listen_port self.node_info.node_guids.extend(nsnode_info.ibguids) found += 1 # FIXME:暂不支持同局域网 同nodename if found > 1: self.response.rc.retcode = msg_mds.RC_MDS_NODE_FIND_FAIL self.response.rc.message = "Found %d same node name in node list" % found self.SendResponse(self.response) return MS_FINISH elif found == 0: self.response.rc.retcode = msg_mds.RC_MDS_NODE_FIND_FAIL self.response.rc.message = " Not found %s in node list with database" % node_name self.SendResponse(self.response) return MS_FINISH # 查询是否添加 for node in g.nsnode_conf_list.nsnode_infos: if self.node_info.node_uuid == node.node_uuid: self.response.rc.retcode = msg_mds.RC_MDS_NODE_ADD_FAIL self.response.rc.message = "The node already add(%s)" % node_name self.SendResponse(self.response) return MS_FINISH self.ios_request = MakeRequest(msg_ios.LUN_GROUP_ADD_REQUEST, self.request) self.ios_request_body = self.ios_request.body.Extensions[ msg_ios.lun_group_add_request] self.ios_request_body.node_uuid = self.node_info.node_uuid self.ios_request_body.ibguids.extend(self.node_info.node_guids) ret = self.SendRequest(g.ios_service.listen_ip, g.ios_service.listen_port, self.ios_request, self.Entry_AddLunGroup) return MS_CONTINUE