in config/src/main/java/com/alibaba/nacos/config/server/service/ConfigOperationService.java [88:172]
public Boolean publishConfig(ConfigForm configForm, ConfigRequestInfo configRequestInfo, String encryptedDataKey) throws NacosException {
Map<String, Object> configAdvanceInfo = getConfigAdvanceInfo(configForm);
ParamUtils.checkParam(configAdvanceInfo);
configForm.setEncryptedDataKey(encryptedDataKey);
ConfigInfo configInfo = new ConfigInfo(configForm.getDataId(), configForm.getGroup(),
configForm.getNamespaceId(), configForm.getAppName(), configForm.getContent());
//set old md5
if (StringUtils.isNotBlank(configRequestInfo.getCasMd5())) {
configInfo.setMd5(configRequestInfo.getCasMd5());
}
configInfo.setType(configForm.getType());
configInfo.setEncryptedDataKey(encryptedDataKey);
//beta publish
if (StringUtils.isNotBlank(configRequestInfo.getBetaIps())) {
configForm.setGrayName(BetaGrayRule.TYPE_BETA);
configForm.setGrayRuleExp(configRequestInfo.getBetaIps());
configForm.setGrayVersion(BetaGrayRule.VERSION);
configMigrateService.persistBeta(configForm, configInfo, configRequestInfo);
configForm.setGrayPriority(Integer.MAX_VALUE);
configMigrateService.publishConfigGrayMigrate(BetaGrayRule.TYPE_BETA, configForm, configRequestInfo);
publishConfigGray(BetaGrayRule.TYPE_BETA, configForm, configRequestInfo);
return Boolean.TRUE;
}
// tag publish
if (StringUtils.isNotBlank(configForm.getTag())) {
configForm.setGrayName(TagGrayRule.TYPE_TAG + "_" + configForm.getTag());
configForm.setGrayRuleExp(configForm.getTag());
configForm.setGrayVersion(TagGrayRule.VERSION);
configForm.setGrayPriority(Integer.MAX_VALUE - 1);
configMigrateService.persistTagv1(configForm, configInfo, configRequestInfo);
configMigrateService.publishConfigGrayMigrate(TagGrayRule.TYPE_TAG, configForm, configRequestInfo);
publishConfigGray(TagGrayRule.TYPE_TAG, configForm, configRequestInfo);
return Boolean.TRUE;
}
ConfigOperateResult configOperateResult;
configMigrateService.publishConfigMigrate(configForm, configRequestInfo, configForm.getEncryptedDataKey());
//formal publish
if (StringUtils.isNotBlank(configRequestInfo.getCasMd5())) {
configOperateResult = configInfoPersistService.insertOrUpdateCas(configRequestInfo.getSrcIp(),
configForm.getSrcUser(), configInfo, configAdvanceInfo);
if (!configOperateResult.isSuccess()) {
LOGGER.warn(
"[cas-publish-config-fail] srcIp = {}, dataId= {}, casMd5 = {}, msg = server md5 may have changed.",
configRequestInfo.getSrcIp(), configForm.getDataId(), configRequestInfo.getCasMd5());
throw new NacosApiException(HttpStatus.INTERNAL_SERVER_ERROR.value(), ErrorCode.RESOURCE_CONFLICT,
"Cas publish fail, server md5 may have changed.");
}
} else {
if (configRequestInfo.getUpdateForExist()) {
configOperateResult = configInfoPersistService.insertOrUpdate(configRequestInfo.getSrcIp(),
configForm.getSrcUser(), configInfo, configAdvanceInfo);
} else {
try {
configOperateResult = configInfoPersistService.addConfigInfo(configRequestInfo.getSrcIp(),
configForm.getSrcUser(), configInfo, configAdvanceInfo);
} catch (DataIntegrityViolationException ive) {
LOGGER.warn("[publish-config-failed] config already exists. dataId: {}, group: {}, namespaceId: {}",
configForm.getDataId(), configForm.getGroup(), configForm.getNamespaceId());
throw new ConfigAlreadyExistsException(
String.format("config already exist, dataId: %s, group: %s, namespaceId: %s",
configForm.getDataId(), configForm.getGroup(), configForm.getNamespaceId()));
}
}
}
ConfigChangePublisher.notifyConfigChange(
new ConfigDataChangeEvent(configForm.getDataId(), configForm.getGroup(), configForm.getNamespaceId(),
configOperateResult.getLastModified()));
if (ConfigTagUtil.isIstio(configForm.getConfigTags())) {
ConfigChangePublisher.notifyConfigChange(
new IstioConfigChangeEvent(configForm.getDataId(), configForm.getGroup(), configForm.getNamespaceId(),
configOperateResult.getLastModified(), configForm.getContent(),
ConfigTagUtil.getIstioType(configForm.getConfigTags())));
}
ConfigTraceService.logPersistenceEvent(configForm.getDataId(), configForm.getGroup(),
configForm.getNamespaceId(), configRequestInfo.getRequestIpApp(), configOperateResult.getLastModified(),
InetUtils.getSelfIP(), ConfigTraceService.PERSISTENCE_EVENT, ConfigTraceService.PERSISTENCE_TYPE_PUB,
configForm.getContent());
return true;
}