示例#1
0
    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()
示例#2
0
    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
示例#3
0
    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)
示例#4
0
    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
示例#5
0
    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
示例#6
0
    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)
示例#7
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