public void publishConfigGrayMigrate()

in config/src/main/java/com/alibaba/nacos/config/server/service/ConfigMigrateService.java [912:979]


    public void publishConfigGrayMigrate(String grayType, ConfigForm configFormOrigin,
            ConfigRequestInfo configRequestInfo) throws NacosException {
        ConfigForm configForm = configFormOrigin.clone();
        if (!StringUtils.equals(configForm.getNamespaceId(), namespacePublic) || !ConfigCompatibleConfig.getInstance()
                .isNamespaceCompatibleMode()) {
            return;
        }
        ConfigInfoGrayWrapper targetConfigInfoGrayWrapper = configInfoGrayPersistService.findConfigInfo4Gray(
                configForm.getDataId(), configForm.getGroup(), "",
                configForm.getGrayName());
        if (!configRequestInfo.isNamespaceTransferred() && targetConfigInfoGrayWrapper == null) {
            return;
        }
        configForm.setNamespaceId(StringUtils.EMPTY);
        configForm.setSrcUser(NAMESPACE_MIGRATE_SRC_USER);
        Map<String, Object> configAdvanceInfo = getConfigAdvanceInfo(configForm);
        ParamUtils.checkParam(configAdvanceInfo);
        
        ConfigGrayPersistInfo localConfigGrayPersistInfo = new ConfigGrayPersistInfo(grayType,
                configForm.getGrayVersion(), configForm.getGrayRuleExp(), configForm.getGrayPriority());
        GrayRule grayRuleStruct = GrayRuleManager.constructGrayRule(localConfigGrayPersistInfo);
        if (grayRuleStruct == null) {
            throw new NacosApiException(HttpStatus.BAD_REQUEST.value(), ErrorCode.CONFIG_GRAY_VERSION_INVALID,
                    ErrorCode.CONFIG_GRAY_VERSION_INVALID.getMsg());
        }
        
        if (!grayRuleStruct.isValid()) {
            throw new NacosApiException(HttpStatus.BAD_REQUEST.value(), ErrorCode.CONFIG_GRAY_RULE_FORMAT_INVALID,
                    ErrorCode.CONFIG_GRAY_RULE_FORMAT_INVALID.getMsg());
        }
        
        ConfigInfo configInfo = new ConfigInfo(configForm.getDataId(), configForm.getGroup(),
                configForm.getNamespaceId(), configForm.getAppName(), configForm.getContent());
        configInfo.setType(configForm.getType());
        configInfo.setEncryptedDataKey(configForm.getEncryptedDataKey());
        
        if (StringUtils.equals(grayType, TagGrayRule.TYPE_TAG)) {
            persistTagv1(configForm, configInfo, configRequestInfo);
        } else if (StringUtils.equals(grayType, BetaGrayRule.TYPE_BETA)) {
            persistBeta(configForm, configInfo, configRequestInfo);
        }
        
        ConfigOperateResult configOperateResult;
        
        try {
            GRAY_MIGRATE_FLAG.set(true);
            if (StringUtils.isNotBlank(configRequestInfo.getCasMd5())) {
                configOperateResult = configInfoGrayPersistService.insertOrUpdateGrayCas(configInfo,
                        configForm.getGrayName(),
                        GrayRuleManager.serializeConfigGrayPersistInfo(localConfigGrayPersistInfo),
                        configRequestInfo.getSrcIp(), configForm.getSrcUser());
                if (!configOperateResult.isSuccess()) {
                    LOGGER.warn(
                            "[cas-publish-gray-config-fail] srcIp = {}, dataId= {}, casMd5 = {}, grayName = {}, msg = server md5 may have changed.",
                            configRequestInfo.getSrcIp(), configForm.getDataId(), configRequestInfo.getCasMd5(),
                            configForm.getGrayName());
                    throw new NacosApiException(HttpStatus.INTERNAL_SERVER_ERROR.value(), ErrorCode.RESOURCE_CONFLICT,
                            "Cas publish gray config fail, server md5 may have changed.");
                }
            } else {
                configInfoGrayPersistService.insertOrUpdateGray(configInfo, configForm.getGrayName(),
                        GrayRuleManager.serializeConfigGrayPersistInfo(localConfigGrayPersistInfo),
                        configRequestInfo.getSrcIp(), configForm.getSrcUser());
            }
        } finally {
            GRAY_MIGRATE_FLAG.set(false);
        }
    }