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);
}
}