Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

develop-optimize-table #13119

Merged
merged 2 commits into from
Feb 20, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,12 @@
import com.alibaba.nacos.config.server.service.ConfigChangePublisher;
import com.alibaba.nacos.config.server.service.ConfigOperationService;
import com.alibaba.nacos.config.server.service.ConfigSubService;
import com.alibaba.nacos.config.server.service.repository.ConfigInfoBetaPersistService;
import com.alibaba.nacos.config.server.service.repository.ConfigInfoGrayPersistService;
import com.alibaba.nacos.config.server.service.repository.ConfigInfoPersistService;
import com.alibaba.nacos.config.server.service.trace.ConfigTraceService;
import com.alibaba.nacos.config.server.utils.GroupKey;
import com.alibaba.nacos.config.server.utils.MD5Util;
import com.alibaba.nacos.config.server.utils.ParamUtils;
import com.alibaba.nacos.config.server.utils.PropertyUtil;
import com.alibaba.nacos.config.server.utils.RequestUtil;
import com.alibaba.nacos.config.server.utils.TimeUtils;
import com.alibaba.nacos.config.server.utils.YamlParserUtil;
Expand Down Expand Up @@ -127,8 +125,6 @@ public class ConfigController {

private ConfigInfoPersistService configInfoPersistService;

private ConfigInfoBetaPersistService configInfoBetaPersistService;

private ConfigInfoGrayPersistService configInfoGrayPersistService;

private NamespacePersistService namespacePersistService;
Expand All @@ -139,14 +135,13 @@ public class ConfigController {

public ConfigController(ConfigServletInner inner, ConfigOperationService configOperationService,
ConfigSubService configSubService, ConfigInfoPersistService configInfoPersistService,
NamespacePersistService namespacePersistService, ConfigInfoBetaPersistService configInfoBetaPersistService,
NamespacePersistService namespacePersistService,
ConfigInfoGrayPersistService configInfoGrayPersistService) {
this.inner = inner;
this.configOperationService = configOperationService;
this.configSubService = configSubService;
this.configInfoPersistService = configInfoPersistService;
this.namespacePersistService = namespacePersistService;
this.configInfoBetaPersistService = configInfoBetaPersistService;
this.configInfoGrayPersistService = configInfoGrayPersistService;
}

Expand Down Expand Up @@ -464,25 +459,16 @@ public Page<ConfigInfo> fuzzySearchConfig(@RequestParam("dataId") String dataId,
@Secured(action = ActionTypes.WRITE, signType = SignType.CONFIG)
public RestResult<Boolean> stopBeta(HttpServletRequest httpServletRequest,
@RequestParam(value = "dataId") String dataId, @RequestParam(value = "group") String group,
@RequestParam(value = "tenant", required = false, defaultValue = StringUtils.EMPTY) String tenant) {
@RequestParam(value = "tenant", required = false, defaultValue = StringUtils.EMPTY) String tenant,
@RequestParam(value = "srcUser", required = false, defaultValue = StringUtils.EMPTY) String srcUser) {
String remoteIp = getRemoteIp(httpServletRequest);
String requestIpApp = RequestUtil.getAppName(httpServletRequest);
try {
configInfoGrayPersistService.removeConfigInfoGray(dataId, group, tenant, BetaGrayRule.TYPE_BETA, remoteIp,
RequestUtil.getSrcUserName(httpServletRequest));

configOperationService.deleteConfig(dataId, group, tenant, BetaGrayRule.TYPE_BETA, remoteIp, srcUser);
} catch (Throwable e) {
LOGGER.error("remove beta data error", e);
return RestResultUtils.failed(500, false, "remove beta data error");
}
ConfigTraceService.logPersistenceEvent(dataId, group, tenant, requestIpApp, System.currentTimeMillis(),
remoteIp, ConfigTraceService.PERSISTENCE_EVENT_BETA, ConfigTraceService.PERSISTENCE_TYPE_REMOVE, null);

if (PropertyUtil.isGrayCompatibleModel()) {
configInfoBetaPersistService.removeConfigInfo4Beta(dataId, group, tenant);
}
ConfigChangePublisher.notifyConfigChange(
new ConfigDataChangeEvent(dataId, group, tenant, BetaGrayRule.TYPE_BETA, System.currentTimeMillis()));

return RestResultUtils.success("stop beta ok", true);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,18 @@

package com.alibaba.nacos.config.server.service;

import com.alibaba.nacos.api.exception.api.NacosApiException;
import com.alibaba.nacos.api.model.v2.ErrorCode;
import com.alibaba.nacos.api.utils.NetUtils;
import com.alibaba.nacos.common.utils.StringUtils;
import com.alibaba.nacos.common.utils.ThreadUtils;
import com.alibaba.nacos.config.server.model.ConfigInfo;
import com.alibaba.nacos.config.server.model.ConfigInfoBetaWrapper;
import com.alibaba.nacos.config.server.model.ConfigInfoGrayWrapper;
import com.alibaba.nacos.config.server.model.ConfigInfoTagWrapper;
import com.alibaba.nacos.config.server.model.ConfigOperateResult;
import com.alibaba.nacos.config.server.model.ConfigRequestInfo;
import com.alibaba.nacos.config.server.model.form.ConfigForm;
import com.alibaba.nacos.config.server.model.gray.BetaGrayRule;
import com.alibaba.nacos.config.server.model.gray.ConfigGrayPersistInfo;
import com.alibaba.nacos.config.server.model.gray.GrayRuleManager;
Expand All @@ -29,15 +36,20 @@
import com.alibaba.nacos.config.server.service.repository.ConfigInfoGrayPersistService;
import com.alibaba.nacos.config.server.service.repository.ConfigInfoTagPersistService;
import com.alibaba.nacos.config.server.utils.PropertyUtil;
import com.alibaba.nacos.core.namespace.repository.NamespacePersistService;
import com.alibaba.nacos.persistence.model.Page;
import com.alibaba.nacos.sys.env.EnvUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

import static com.alibaba.nacos.config.server.model.gray.GrayRuleManager.SPLIT;
import static com.alibaba.nacos.config.server.utils.LogUtil.DEFAULT_LOG;
import static com.alibaba.nacos.config.server.utils.PropertyUtil.GRAY_MIGRATE_FLAG;

Expand All @@ -49,28 +61,123 @@
@Service
public class ConfigGrayModelMigrateService {

private static final Logger LOGGER = LoggerFactory.getLogger(ConfigGrayModelMigrateService.class);

ConfigInfoBetaPersistService configInfoBetaPersistService;

ConfigInfoTagPersistService configInfoTagPersistService;

ConfigInfoGrayPersistService configInfoGrayPersistService;

NamespacePersistService namespacePersistService;

boolean oldTableVersion = false;

public ConfigGrayModelMigrateService(ConfigInfoBetaPersistService configInfoBetaPersistService,
ConfigInfoTagPersistService configInfoTagPersistService,
ConfigInfoGrayPersistService configInfoGrayPersistService) {
ConfigInfoGrayPersistService configInfoGrayPersistService,
NamespacePersistService namespacePersistService) {
this.configInfoBetaPersistService = configInfoBetaPersistService;
this.configInfoGrayPersistService = configInfoGrayPersistService;
this.configInfoTagPersistService = configInfoTagPersistService;
this.namespacePersistService = namespacePersistService;
}

/**
* migrate beta&tag to gray .
*/
@PostConstruct
public void migrate() throws Exception {
if (PropertyUtil.isGrayCompatibleModel()) {
doCheckMigrate();
oldTableVersion = namespacePersistService.isExistTable("config_info_beta");
if (!PropertyUtil.isGrayCompatibleModel() || !oldTableVersion) {
return;
}
doCheckMigrate();
}

/**
* handler tag v1 config.
*
* @param configForm configForm.
* @param configInfo configInfo.
* @param configRequestInfo configRequestInfo.
* @throws NacosApiException NacosApiException.
*/
public void persistTagv1(ConfigForm configForm, ConfigInfo configInfo, ConfigRequestInfo configRequestInfo)
throws NacosApiException {
if (!PropertyUtil.isGrayCompatibleModel() || !oldTableVersion) {
return;
}

if (StringUtils.isNotBlank(configRequestInfo.getCasMd5())) {
ConfigOperateResult configOperateResult = configInfoTagPersistService.insertOrUpdateTagCas(configInfo,
configForm.getTag(), configRequestInfo.getSrcIp(), configForm.getSrcUser());
if (!configOperateResult.isSuccess()) {
LOGGER.warn(
"[cas-publish-tag-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 tag config fail, server md5 may have changed.");
}
} else {
configInfoTagPersistService.insertOrUpdateTag(configInfo, configForm.getTag(), configRequestInfo.getSrcIp(),
configForm.getSrcUser());
}
}

/**
* handle old beta.
*
* @param configForm configForm.
* @param configInfo configInfo.
* @param configRequestInfo configRequestInfo.
* @throws NacosApiException NacosApiException.
*/
public void persistBeta(ConfigForm configForm, ConfigInfo configInfo, ConfigRequestInfo configRequestInfo)
throws NacosApiException {
if (!PropertyUtil.isGrayCompatibleModel() || !oldTableVersion) {
return;
}
ConfigOperateResult configOperateResult = null;
// beta publish
if (StringUtils.isNotBlank(configRequestInfo.getCasMd5())) {
configOperateResult = configInfoBetaPersistService.insertOrUpdateBetaCas(configInfo,
configRequestInfo.getBetaIps(), configRequestInfo.getSrcIp(), configForm.getSrcUser());
if (!configOperateResult.isSuccess()) {
LOGGER.warn(
"[cas-publish-beta-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 beta config fail, server md5 may have changed.");
}
} else {
configInfoBetaPersistService.insertOrUpdateBeta(configInfo, configRequestInfo.getBetaIps(),
configRequestInfo.getSrcIp(), configForm.getSrcUser());
}
}

/**
* delete beta and tag.
*
* @param dataId dataId.
* @param group group.
* @param namespaceId namespaceId.
* @param grayName grayName.
* @param clientIp clientIp.
* @param srcUser srcUser.
*/
public void deleteConfigGrayV1(String dataId, String group, String namespaceId, String grayName, String clientIp,
String srcUser) {
if (!PropertyUtil.isGrayCompatibleModel() || !oldTableVersion) {
return;
}
if (BetaGrayRule.TYPE_BETA.equals(grayName)) {
configInfoBetaPersistService.removeConfigInfo4Beta(dataId, group, namespaceId);
} else if (grayName.startsWith(TagGrayRule.TYPE_TAG + SPLIT)) {
configInfoTagPersistService.removeConfigInfoTag(dataId, group, namespaceId, grayName.substring(4), clientIp,
srcUser);
}

}

/**
Expand Down
Loading
Loading