Skip to content

Commit

Permalink
[ISSUE#12994] Optimized configuration aspect class.
Browse files Browse the repository at this point in the history
  • Loading branch information
KiteSoar committed Feb 20, 2025
1 parent b3fd30b commit e261fce
Show file tree
Hide file tree
Showing 7 changed files with 50 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ public Object aroundSyncUpdateConfigAll(ProceedingJoinPoint pjp) throws Throwabl
LOGGER.info("[CapacityManagement] Intercepting publishConfig operation for dataId: {}, group: {}, namespaceId: {}",
dataId, group, namespaceId);

if (StringUtils.isBlank(betaIps) && StringUtils.isBlank(tag)) {
if (StringUtils.isBlank(betaIps) && StringUtils.isBlank(tag) && StringUtils.isBlank(configForm.getGrayName())) {
// do capacity management limitation check for writing or updating config_info table.
if (configInfoPersistService.findConfigInfo(dataId, group, namespaceId) == null) {
// Write operation.
Expand Down Expand Up @@ -161,10 +161,15 @@ public Object aroundDeleteConfig(ProceedingJoinPoint pjp) throws Throwable {
String dataId = (String) args[0];
String group = (String) args[1];
String namespaceId = (String) args[2];
String grayName = (String) args[3];

LOGGER.info("[CapacityManagement] Intercepting deleteConfig operation for dataId: {}, group: {}, namespaceId: {}", dataId, group,
namespaceId);

if (StringUtils.isNotBlank(grayName)) {
return pjp.proceed();
}

ConfigInfo configInfo = configInfoPersistService.findConfigInfo(dataId, group, namespaceId);
if (configInfo == null) {
return pjp.proceed();
Expand Down Expand Up @@ -219,7 +224,11 @@ private void correctUsage(String group, String namespaceId, boolean hasTenant) {
private Object getResult(ProceedingJoinPoint pjp, String group, String namespaceId, CounterMode counterMode, boolean hasTenant) throws Throwable {
try {
// Execute operation actually.
return pjp.proceed();
Boolean result = (Boolean) pjp.proceed();
if (!result) {
rollbackUsage(counterMode, group, namespaceId, hasTenant);
}
return result;
} catch (Throwable throwable) {
LOGGER.warn("[capacityManagement] inner operation throw exception, rollback, group: {}, namespaceId: {}", group,
namespaceId, throwable);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,12 @@
import com.alibaba.nacos.api.config.remote.response.ConfigRemoveResponse;
import com.alibaba.nacos.api.remote.response.ResponseCode;
import com.alibaba.nacos.common.model.RestResultUtils;
import com.alibaba.nacos.common.utils.StringUtils;
import com.alibaba.nacos.config.server.configuration.ConfigChangeConfigs;
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.TagGrayRule;
import com.alibaba.nacos.config.server.utils.ConfigExecutor;
import com.alibaba.nacos.config.server.utils.TimeUtils;
import com.alibaba.nacos.plugin.config.ConfigChangePluginManager;
Expand Down Expand Up @@ -102,6 +105,16 @@ Object publishOrUpdateConfigAround(ProceedingJoinPoint pjp) throws Throwable {
final String requestIpApp = configRequestInfo.getRequestIpApp();
final String scrIp = configRequestInfo.getSrcIp();
final String scrType = configRequestInfo.getSrcType();
final String betaIps = configRequestInfo.getBetaIps();
String grayName = null;
String grayRuleExp = null;
if (StringUtils.isNotBlank(betaIps)) {
grayName = BetaGrayRule.TYPE_BETA;
grayRuleExp = betaIps;
} else if (StringUtils.isNotBlank(tag)) {
grayName = TagGrayRule.TYPE_TAG + "_" + configForm.getTag();
grayRuleExp = tag;
}

ConfigChangePointCutTypes configChangePointCutType = null;
if (HTTP.equals(scrType)) {
Expand Down Expand Up @@ -131,6 +144,8 @@ Object publishOrUpdateConfigAround(ProceedingJoinPoint pjp) throws Throwable {
configChangeRequest.setArg("use", use);
configChangeRequest.setArg("effect", effect);
configChangeRequest.setArg("type", type);
configChangeRequest.setArg("grayName", grayName);
configChangeRequest.setArg("grayRuleExp", grayRuleExp);
return configChangeServiceHandle(pjp, pluginServices, configChangeRequest);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@
import com.alibaba.nacos.config.server.model.GroupkeyListenserStatus;
import com.alibaba.nacos.config.server.model.SameConfigPolicy;
import com.alibaba.nacos.config.server.model.SampleResult;
import com.alibaba.nacos.config.server.model.event.ConfigDataChangeEvent;
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.GrayRuleManager;
Expand All @@ -48,12 +47,10 @@
import com.alibaba.nacos.config.server.paramcheck.ConfigDefaultHttpParamExtractor;
import com.alibaba.nacos.config.server.paramcheck.ConfigListenerHttpParamExtractor;
import com.alibaba.nacos.config.server.result.code.ResultCodeEnum;
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.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;
Expand Down Expand Up @@ -302,14 +299,15 @@ public Boolean deleteConfig(HttpServletRequest request, HttpServletResponse resp
@DeleteMapping(params = "delType=ids")
@Secured(action = ActionTypes.WRITE, signType = SignType.CONFIG)
public RestResult<Boolean> deleteConfigs(HttpServletRequest request, @RequestParam(value = "ids") List<Long> ids) {
if (CollectionUtils.isEmpty(ids)) {
return RestResultUtils.failed("The ids cannot be empty.");
}
String clientIp = RequestUtil.getRemoteIp(request);
String srcUser = RequestUtil.getSrcUserName(request);
try {
for (Long id : ids) {
ConfigInfo configInfo = configInfoPersistService.findConfigInfo(id);
if (configInfo == null) {
LOGGER.warn("[deleteConfigs] configInfo is null, id: {}", id);
continue;
}
configOperationService.deleteConfig(configInfo.getDataId(), configInfo.getGroup(),
configInfo.getTenant(), null, clientIp, srcUser, Constants.HTTP);
}
Expand Down Expand Up @@ -455,7 +453,7 @@ public RestResult<Boolean> stopBeta(HttpServletRequest httpServletRequest,
String remoteIp = getRemoteIp(httpServletRequest);
try {

configOperationService.deleteConfig(dataId, group, tenant, BetaGrayRule.TYPE_BETA, remoteIp, srcUser);
configOperationService.deleteConfig(dataId, group, tenant, BetaGrayRule.TYPE_BETA, remoteIp, srcUser, Constants.HTTP);
} catch (Throwable e) {
LOGGER.error("remove beta data error", e);
return RestResultUtils.failed(500, false, "remove beta data error");
Expand Down Expand Up @@ -914,10 +912,10 @@ private Map<String, Object> batchImportAndPublishConfigs(List<ConfigAllInfo> con
for (int i = 0; i < configAllInfoList.size(); i++) {
ConfigAllInfo configAllInfo = configAllInfoList.get(i);
ConfigForm configForm = transferToConfigForm(configAllInfo, srcUser, targetNamespaceId);
ConfigRequestInfo configRequestInfo = transferToConfigRequestInfo(request);
if (sameConfigPolicy != SameConfigPolicy.OVERWRITE) {
configForm.setUpdateForExist(false);
configRequestInfo.setUpdateForExist(false);
}
ConfigRequestInfo configRequestInfo = transferToConfigRequestInfo(request);
Boolean importRes = configOperationService.publishConfig(configForm, configRequestInfo, configAllInfo.getEncryptedDataKey());
if (importRes) {
succCount++;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ public class ConfigRequestInfo implements Serializable {

private String casMd5;

private Boolean updateForExist = Boolean.TRUE;

public ConfigRequestInfo(String srcIp, String srcType, String requestIpApp, String betaIps, String casMd5) {
this.srcIp = srcIp;
this.srcType = srcType;
Expand Down Expand Up @@ -89,6 +91,14 @@ public void setCasMd5(String casMd5) {
this.casMd5 = casMd5;
}

public Boolean getUpdateForExist() {
return updateForExist;
}

public void setUpdateForExist(Boolean updateForExist) {
this.updateForExist = updateForExist;
}

@Override
public boolean equals(Object o) {
if (this == o) {
Expand All @@ -99,7 +109,7 @@ public boolean equals(Object o) {
}
ConfigRequestInfo that = (ConfigRequestInfo) o;
return Objects.equals(srcIp, that.srcIp) && Objects.equals(requestIpApp, that.requestIpApp) && Objects.equals(
betaIps, that.betaIps) && Objects.equals(casMd5, that.casMd5);
betaIps, that.betaIps) && Objects.equals(casMd5, that.casMd5) && Objects.equals(updateForExist, that.updateForExist);
}

@Override
Expand All @@ -110,6 +120,6 @@ public int hashCode() {
@Override
public String toString() {
return "ConfigRequestInfoVo{" + "srcIp='" + srcIp + '\'' + ", requestIpApp='" + requestIpApp + '\''
+ ", betaIps='" + betaIps + '\'' + ", casMd5='" + casMd5 + '\'' + '}';
+ ", betaIps='" + betaIps + '\'' + ", casMd5='" + casMd5 + '\'' + ", updateForExist='" + updateForExist + '}';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,6 @@ public class ConfigForm implements Serializable {

private String schema;

private Boolean updateForExist = Boolean.TRUE;

public ConfigForm() {
}

Expand Down Expand Up @@ -236,14 +234,6 @@ public void setGrayPriority(int grayPriority) {
this.grayPriority = grayPriority;
}

public Boolean getUpdateForExist() {
return updateForExist;
}

public void setUpdateForExist(Boolean updateForExist) {
this.updateForExist = updateForExist;
}

@Override
public boolean equals(Object o) {
if (this == o) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ public Boolean publishConfig(ConfigForm configForm, ConfigRequestInfo configRequ
"Cas publish fail, server md5 may have changed.");
}
} else {
if (configForm.getUpdateForExist()) {
if (configRequestInfo.getUpdateForExist()) {
configOperateResult = configInfoPersistService.insertOrUpdate(configRequestInfo.getSrcIp(),
configForm.getSrcUser(), configInfo, configAdvanceInfo);
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -425,8 +425,8 @@ void testAroundSyncUpdateConfigAllForInsertRollbackAspect() throws Throwable {
@Test
void testAroundDeleteConfigForTenant() throws Throwable {
when(PropertyUtil.isManageCapacity()).thenReturn(true);
when(proceedingJoinPoint.getArgs()).thenReturn(new Object[]{mockDataId, mockGroup, mockTenant});
when(localMockProceedingJoinPoint.getArgs()).thenReturn(new Object[]{mockDataId, mockGroup, mockTenant});
when(proceedingJoinPoint.getArgs()).thenReturn(new Object[]{mockDataId, mockGroup, mockTenant, null});
when(localMockProceedingJoinPoint.getArgs()).thenReturn(new Object[]{mockDataId, mockGroup, mockTenant, null});
when(proceedingJoinPoint.proceed()).thenReturn(mockProceedingJoinPointResult);
when(configInfoPersistService.findConfigInfo(any(), any(), any())).thenReturn(null);
when(capacityService.insertAndUpdateClusterUsage(any(), anyBoolean())).thenReturn(true);
Expand Down Expand Up @@ -466,8 +466,8 @@ void testAroundDeleteConfigForTenant() throws Throwable {
@Test
void testAroundDeleteConfigForGroup() throws Throwable {
when(PropertyUtil.isManageCapacity()).thenReturn(true);
when(proceedingJoinPoint.getArgs()).thenReturn(new Object[]{mockDataId, mockGroup, mockTenant});
when(localMockProceedingJoinPoint.getArgs()).thenReturn(new Object[]{mockDataId, mockGroup, mockTenant});
when(proceedingJoinPoint.getArgs()).thenReturn(new Object[]{mockDataId, mockGroup, mockTenant, null});
when(localMockProceedingJoinPoint.getArgs()).thenReturn(new Object[]{mockDataId, mockGroup, mockTenant, null});
when(proceedingJoinPoint.proceed()).thenReturn(mockProceedingJoinPointResult);
when(configInfoPersistService.findConfigInfo(any(), any(), any())).thenReturn(null);
when(capacityService.insertAndUpdateClusterUsage(any(), anyBoolean())).thenReturn(true);
Expand Down

0 comments on commit e261fce

Please sign in to comment.