Skip to content

Commit

Permalink
Refine the formal configuration and add additional information(alibab…
Browse files Browse the repository at this point in the history
  • Loading branch information
KiteSoar committed Aug 6, 2024
1 parent 6c3cbf8 commit a90a732
Show file tree
Hide file tree
Showing 25 changed files with 1,332 additions and 216 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,10 @@ public class ConfigHistoryInfo implements Serializable {
*/
private String opType;

private String configType;

private String extraInfo;

private Timestamp createdTime;

private Timestamp lastModifiedTime;
Expand Down Expand Up @@ -136,6 +140,22 @@ public void setOpType(String opType) {
this.opType = opType;
}

public String getConfigType() {
return configType;
}

public void setConfigType(String configType) {
this.configType = configType;
}

public String getExtraInfo() {
return extraInfo;
}

public void setExtraInfo(String extraInfo) {
this.extraInfo = extraInfo;
}

public Timestamp getCreatedTime() {
return new Timestamp(createdTime.getTime());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ public Boolean publishConfig(ConfigForm configForm, ConfigRequestInfo configRequ
configInfo.setEncryptedDataKey(encryptedDataKey);
ConfigOperateResult configOperateResult;

//beta public
//beta publish
if (StringUtils.isNotBlank(configRequestInfo.getBetaIps())) {
configForm.setGrayName(BetaGrayRule.TYPE_BETA);
configForm.setGrayRuleExp(configRequestInfo.getBetaIps());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -564,6 +564,8 @@ public ConfigHistoryInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
configHistoryInfo.setSrcIp(rs.getString("src_ip"));
configHistoryInfo.setSrcUser(rs.getString("src_user"));
configHistoryInfo.setOpType(rs.getString("op_type"));
configHistoryInfo.setConfigType(rs.getString("config_type"));
configHistoryInfo.setExtraInfo(rs.getString("ext_info"));
configHistoryInfo.setCreatedTime(rs.getTimestamp("gmt_create"));
configHistoryInfo.setLastModifiedTime(rs.getTimestamp("gmt_modified"));
return configHistoryInfo;
Expand All @@ -585,6 +587,8 @@ public ConfigHistoryInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
configHistoryInfo.setSrcUser(rs.getString("src_user"));
configHistoryInfo.setSrcIp(rs.getString("src_ip"));
configHistoryInfo.setOpType(rs.getString("op_type"));
configHistoryInfo.setConfigType(rs.getString("config_type"));
configHistoryInfo.setExtraInfo(rs.getString("ext_info"));
configHistoryInfo.setCreatedTime(rs.getTimestamp("gmt_create"));
configHistoryInfo.setLastModifiedTime(rs.getTimestamp("gmt_modified"));
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,15 +45,17 @@ public interface HistoryConfigInfoPersistService {
/**
* Update change records; database atomic operations, minimal sql actions, no business encapsulation.
*
* @param id id
* @param configInfo config info
* @param srcIp ip
* @param srcUser user
* @param time time
* @param ops ops type
* @param id id
* @param configInfo config info
* @param srcIp ip
* @param srcUser user
* @param time time
* @param ops ops type
* @param configType config type
* @param extraInfo extra config info
*/
void insertConfigHistoryAtomic(long id, ConfigInfo configInfo, String srcIp, String srcUser, final Timestamp time,
String ops);
String ops, String configType, String extraInfo);
//------------------------------------------delete---------------------------------------------//

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@
import com.alibaba.nacos.config.server.service.repository.ConfigInfoPersistService;
import com.alibaba.nacos.config.server.service.repository.HistoryConfigInfoPersistService;
import com.alibaba.nacos.config.server.service.sql.EmbeddedStorageContextUtils;
import com.alibaba.nacos.config.server.utils.ExtraConfigInfoUtil;
import com.alibaba.nacos.config.server.utils.LogUtil;
import com.alibaba.nacos.config.server.utils.ParamUtils;
import com.alibaba.nacos.core.distributed.id.IdGeneratorManager;
import com.alibaba.nacos.persistence.configuration.condition.ConditionOnEmbeddedStorage;
Expand Down Expand Up @@ -217,7 +219,9 @@ private ConfigOperateResult addConfigInfo(final String srcIp, final String srcUs
configInfo.getTenant());

Timestamp now = new Timestamp(System.currentTimeMillis());
historyConfigInfoPersistService.insertConfigHistoryAtomic(hisId, configInfo, srcIp, srcUser, now, "I");
historyConfigInfoPersistService.insertConfigHistoryAtomic(hisId, configInfo, srcIp, srcUser, now, "I",
"formal", ExtraConfigInfoUtil.getExtraInfoFromAdvanceInfoMap(configAdvanceInfo, srcUser));

EmbeddedStorageContextUtils.onModifyConfigInfo(configInfo, srcIp, now);
databaseOperate.blockUpdate(consumer);
return getConfigInfoOperateResult(configInfo.getDataId(), configInfo.getGroup(), tenantTmp);
Expand Down Expand Up @@ -264,7 +268,7 @@ public long addConfigInfoAtomic(final long id, final String srcIp, final String
configInfo.getEncryptedDataKey() == null ? StringUtils.EMPTY : configInfo.getEncryptedDataKey();
ConfigInfoMapper configInfoMapper = mapperManager.findMapper(dataSourceService.getDataSourceType(),
TableConstant.CONFIG_INFO);

final String sql = configInfoMapper.insert(
Arrays.asList("id", "data_id", "group_id", "tenant_id", "app_name", "content", "md5", "src_ip",
"src_user", "gmt_create@NOW()", "gmt_modified@NOW()", "c_desc", "c_use", "effect",
Expand Down Expand Up @@ -398,15 +402,15 @@ public Map<String, Object> batchInsertOrUpdate(List<ConfigAllInfo> configInfoLis
public void removeConfigInfo(final String dataId, final String group, final String tenant, final String srcIp,
final String srcUser) {
final Timestamp time = new Timestamp(System.currentTimeMillis());
ConfigInfo configInfo = findConfigInfo(dataId, group, tenant);
if (Objects.nonNull(configInfo)) {
ConfigAllInfo oldConfigAllInfo = findConfigAllInfo(dataId, group, tenant);
if (Objects.nonNull(oldConfigAllInfo)) {
try {
String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant;

removeConfigInfoAtomic(dataId, group, tenantTmp, srcIp, srcUser);
removeTagByIdAtomic(configInfo.getId());
historyConfigInfoPersistService.insertConfigHistoryAtomic(configInfo.getId(), configInfo, srcIp,
srcUser, time, "D");
removeTagByIdAtomic(oldConfigAllInfo.getId());
historyConfigInfoPersistService.insertConfigHistoryAtomic(oldConfigAllInfo.getId(), oldConfigAllInfo, srcIp,
srcUser, time, "D", "formal", ExtraConfigInfoUtil.getExtraInfoFromAllInfo(oldConfigAllInfo));

EmbeddedStorageContextUtils.onDeleteConfigInfo(tenantTmp, group, dataId, srcIp, time);

Expand All @@ -430,12 +434,14 @@ public List<ConfigInfo> removeConfigInfoByIds(final List<Long> ids, final String
try {
String idsStr = StringUtils.join(ids, StringUtils.COMMA);
List<ConfigInfo> configInfoList = findConfigInfosByIds(idsStr);
if (CollectionUtils.isNotEmpty(configInfoList)) {
List<ConfigAllInfo> oldConfigAllInfoList = findAllConfigInfo4Export(null, null, null, null, ids);
if (CollectionUtils.isNotEmpty(oldConfigAllInfoList)) {
removeConfigInfoByIdsAtomic(idsStr);
for (ConfigInfo configInfo : configInfoList) {
removeTagByIdAtomic(configInfo.getId());
historyConfigInfoPersistService.insertConfigHistoryAtomic(configInfo.getId(), configInfo, srcIp,
srcUser, time, "D");
for (ConfigAllInfo configAllInfo : oldConfigAllInfoList) {
removeTagByIdAtomic(configAllInfo.getId());
historyConfigInfoPersistService.insertConfigHistoryAtomic(configAllInfo.getId(), configAllInfo,
srcIp, srcUser, time, "D", "formal",
ExtraConfigInfoUtil.getExtraInfoFromAllInfo(configAllInfo));
}
}

Expand Down Expand Up @@ -494,15 +500,22 @@ public void removeConfigInfoByIdsAtomic(final String ids) {
public ConfigOperateResult updateConfigInfo(final ConfigInfo configInfo, final String srcIp, final String srcUser,
final Map<String, Object> configAdvanceInfo) {
try {
ConfigInfo oldConfigInfo = findConfigInfo(configInfo.getDataId(), configInfo.getGroup(),
ConfigAllInfo oldConfigAllInfo = findConfigAllInfo(configInfo.getDataId(), configInfo.getGroup(),
configInfo.getTenant());
if (oldConfigAllInfo == null) {
if (LogUtil.FATAL_LOG.isErrorEnabled()) {
LogUtil.FATAL_LOG.error("expected config info[dataid:{}, group:{}, tenent:{}] but not found.",
configInfo.getDataId(), configInfo.getGroup(), configInfo.getTenant());
}
return new ConfigOperateResult(false);
}

final String tenantTmp =
StringUtils.isBlank(configInfo.getTenant()) ? StringUtils.EMPTY : configInfo.getTenant();

oldConfigInfo.setTenant(tenantTmp);
oldConfigAllInfo.setTenant(tenantTmp);

String appNameTmp = oldConfigInfo.getAppName();
String appNameTmp = oldConfigAllInfo.getAppName();
// If the appName passed by the user is not empty, the appName of the user is persisted;
// otherwise, the appName of db is used. Empty string is required to clear appName
if (configInfo.getAppName() == null) {
Expand All @@ -514,14 +527,14 @@ public ConfigOperateResult updateConfigInfo(final ConfigInfo configInfo, final S
String configTags = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("config_tags");
if (configTags != null) {
// Delete all tags and recreate them
removeTagByIdAtomic(oldConfigInfo.getId());
addConfigTagsRelation(oldConfigInfo.getId(), configTags, configInfo.getDataId(), configInfo.getGroup(),
removeTagByIdAtomic(oldConfigAllInfo.getId());
addConfigTagsRelation(oldConfigAllInfo.getId(), configTags, configInfo.getDataId(), configInfo.getGroup(),
configInfo.getTenant());
}

Timestamp time = new Timestamp(System.currentTimeMillis());
historyConfigInfoPersistService.insertConfigHistoryAtomic(oldConfigInfo.getId(), oldConfigInfo, srcIp,
srcUser, time, "U");
historyConfigInfoPersistService.insertConfigHistoryAtomic(oldConfigAllInfo.getId(), oldConfigAllInfo, srcIp,
srcUser, time, "U", "formal", ExtraConfigInfoUtil.getExtraInfoFromAllInfo(oldConfigAllInfo));
EmbeddedStorageContextUtils.onModifyConfigInfo(configInfo, srcIp, time);
databaseOperate.blockUpdate();
return getConfigInfoOperateResult(configInfo.getDataId(), configInfo.getGroup(), tenantTmp);
Expand All @@ -534,15 +547,21 @@ public ConfigOperateResult updateConfigInfo(final ConfigInfo configInfo, final S
public ConfigOperateResult updateConfigInfoCas(final ConfigInfo configInfo, final String srcIp,
final String srcUser, final Map<String, Object> configAdvanceInfo) {
try {
ConfigInfo oldConfigInfo = findConfigInfo(configInfo.getDataId(), configInfo.getGroup(),
ConfigAllInfo oldConfigAllInfo = findConfigAllInfo(configInfo.getDataId(), configInfo.getGroup(),
configInfo.getTenant());

if (oldConfigAllInfo == null) {
if (LogUtil.FATAL_LOG.isErrorEnabled()) {
LogUtil.FATAL_LOG.error("expected config info[dataid:{}, group:{}, tenent:{}] but not found.",
configInfo.getDataId(), configInfo.getGroup(), configInfo.getTenant());
}
return new ConfigOperateResult(false);
}
final String tenantTmp =
StringUtils.isBlank(configInfo.getTenant()) ? StringUtils.EMPTY : configInfo.getTenant();

oldConfigInfo.setTenant(tenantTmp);
oldConfigAllInfo.setTenant(tenantTmp);

String appNameTmp = oldConfigInfo.getAppName();
String appNameTmp = oldConfigAllInfo.getAppName();
// If the appName passed by the user is not empty, the appName of the user is persisted;
// otherwise, the appName of db is used. Empty string is required to clear appName
if (configInfo.getAppName() == null) {
Expand All @@ -554,14 +573,14 @@ public ConfigOperateResult updateConfigInfoCas(final ConfigInfo configInfo, fina
String configTags = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("config_tags");
if (configTags != null) {
// Delete all tags and recreate them
removeTagByIdAtomic(oldConfigInfo.getId());
addConfigTagsRelation(oldConfigInfo.getId(), configTags, configInfo.getDataId(), configInfo.getGroup(),
removeTagByIdAtomic(oldConfigAllInfo.getId());
addConfigTagsRelation(oldConfigAllInfo.getId(), configTags, configInfo.getDataId(), configInfo.getGroup(),
configInfo.getTenant());
}

Timestamp time = new Timestamp(System.currentTimeMillis());
historyConfigInfoPersistService.insertConfigHistoryAtomic(oldConfigInfo.getId(), oldConfigInfo, srcIp,
srcUser, time, "U");
historyConfigInfoPersistService.insertConfigHistoryAtomic(oldConfigAllInfo.getId(), oldConfigAllInfo, srcIp,
srcUser, time, "U", "formal", ExtraConfigInfoUtil.getExtraInfoFromAllInfo(oldConfigAllInfo));
EmbeddedStorageContextUtils.onModifyConfigInfo(configInfo, srcIp, time);
boolean success = databaseOperate.blockUpdate();
if (success) {
Expand Down Expand Up @@ -624,7 +643,7 @@ public void updateConfigInfoAtomic(final ConfigInfo configInfo, final String src
final String schema = configAdvanceInfo == null ? null : (String) configAdvanceInfo.get("schema");
final String encryptedDataKey =
configInfo.getEncryptedDataKey() == null ? StringUtils.EMPTY : configInfo.getEncryptedDataKey();

ConfigInfoMapper configInfoMapper = mapperManager.findMapper(dataSourceService.getDataSourceType(),
TableConstant.CONFIG_INFO);
final String sql = configInfoMapper.update(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,19 +90,20 @@ public <E> PaginationHelper<E> createPaginationHelper() {

@Override
public void insertConfigHistoryAtomic(long configHistoryId, ConfigInfo configInfo, String srcIp, String srcUser,
final Timestamp time, String ops) {
final Timestamp time, String ops, String configType, String extraInfo) {
String appNameTmp = StringUtils.defaultEmptyIfBlank(configInfo.getAppName());
String tenantTmp = StringUtils.defaultEmptyIfBlank(configInfo.getTenant());
final String md5Tmp = MD5Utils.md5Hex(configInfo.getContent(), Constants.ENCODE);
String configTypeTmp = StringUtils.defaultEmptyIfBlank(configType);
String encryptedDataKey = StringUtils.defaultEmptyIfBlank(configInfo.getEncryptedDataKey());

HistoryConfigInfoMapper historyConfigInfoMapper = mapperManager.findMapper(
dataSourceService.getDataSourceType(), TableConstant.HIS_CONFIG_INFO);
final String sql = historyConfigInfoMapper.insert(
Arrays.asList("id", "data_id", "group_id", "tenant_id", "app_name", "content", "md5", "src_ip",
"src_user", "gmt_modified", "op_type", "encrypted_data_key"));
"src_user", "gmt_modified", "op_type", "config_type", "ext_info", "encrypted_data_key"));
final Object[] args = new Object[] {configHistoryId, configInfo.getDataId(), configInfo.getGroup(), tenantTmp,
appNameTmp, configInfo.getContent(), md5Tmp, srcIp, srcUser, time, ops, encryptedDataKey};
appNameTmp, configInfo.getContent(), md5Tmp, srcIp, srcUser, time, ops, configTypeTmp, extraInfo, encryptedDataKey};

EmbeddedStorageContextHolder.addSqlContext(sql, args);
}
Expand Down Expand Up @@ -161,7 +162,7 @@ public ConfigHistoryInfo detailConfigHistory(Long nid) {
dataSourceService.getDataSourceType(), TableConstant.HIS_CONFIG_INFO);
String sqlFetchRows = historyConfigInfoMapper.select(
Arrays.asList("nid", "data_id", "group_id", "tenant_id", "app_name", "content", "md5", "src_user",
"src_ip", "op_type", "gmt_create", "gmt_modified", "encrypted_data_key"),
"src_ip", "op_type", "config_type", "ext_info", "gmt_create", "gmt_modified", "encrypted_data_key"),
Collections.singletonList("nid"));
return databaseOperate.queryOne(sqlFetchRows, new Object[] {nid}, HISTORY_DETAIL_ROW_MAPPER);
}
Expand Down
Loading

0 comments on commit a90a732

Please sign in to comment.