Skip to content

Commit

Permalink
fix(apollo-biz): Fix the parsing logic of configuration override valu…
Browse files Browse the repository at this point in the history
…es and add value validity verification
  • Loading branch information
youngzil committed Nov 2, 2024
1 parent e1522bd commit f4b4e9b
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.function.Predicate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
Expand Down Expand Up @@ -115,12 +115,12 @@ public int itemValueLengthLimit() {

public Map<String, Integer> appIdValueLengthLimitOverride() {
String appIdValueLengthOverrideString = getValue("appid.value.length.limit.override");
return parseOverrideConfig(appIdValueLengthOverrideString, appIdValueLengthOverrideTypeReference);
return parseOverrideConfig(appIdValueLengthOverrideString, appIdValueLengthOverrideTypeReference, value -> value > 0);
}

public Map<Long, Integer> namespaceValueLengthLimitOverride() {
String namespaceValueLengthOverrideString = getValue("namespace.value.length.limit.override");
return parseOverrideConfig(namespaceValueLengthOverrideString, namespaceValueLengthOverrideTypeReference);
return parseOverrideConfig(namespaceValueLengthOverrideString, namespaceValueLengthOverrideTypeReference, value -> value > 0);
}

public boolean isNamespaceNumLimitEnabled() {
Expand Down Expand Up @@ -201,7 +201,7 @@ public int releaseHistoryRetentionSize() {

public Map<String, Integer> releaseHistoryRetentionSizeOverride() {
String overrideString = getValue("apollo.release-history.retention.size.override");
return parseOverrideConfig(overrideString, releaseHistoryRetentionSizeOverrideTypeReference);
return parseOverrideConfig(overrideString, releaseHistoryRetentionSizeOverrideTypeReference, value -> value > 0);
}

public int releaseMessageCacheScanInterval() {
Expand Down Expand Up @@ -255,14 +255,16 @@ public String getAdminServiceAccessTokens() {
return getValue("admin-service.access.tokens");
}

private <K, V> Map<K, V> parseOverrideConfig(String configValue, Type typeReference) {
private <K, V> Map<K, V> parseOverrideConfig(String configValue, Type typeReference, Predicate<V> valueFilter) {
Map<K, V> result = Maps.newHashMap();
if (!Strings.isNullOrEmpty(configValue)) {
try {
Map<K, V> parsed = GSON.fromJson(configValue, typeReference);
result = parsed.entrySet().stream()
.filter(e -> e.getValue() != null && ((Integer) e.getValue()) > 0)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
for (Map.Entry<K, V> entry : parsed.entrySet()) {
if (entry.getValue() != null && valueFilter.test(entry.getValue())) {
result.put(entry.getKey(), entry.getValue());
}
}
} catch (Exception e) {
logger.error("Invalid override config value: {}", configValue, e);
}
Expand Down
2 changes: 1 addition & 1 deletion docs/en/deployment/distributed-deployment-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -1543,7 +1543,7 @@ The default configuration is 20000.

This configuration is used to override the configuration of `item.value.length.limit` to control the maximum length limit of the value at the appId granularity. The configured value is in a json format, and the key of the json is appId. The format is as follows:
```
appid.value.length.limit.override = {appId-demo1:200,aappId-demo2:300}
appid.value.length.limit.override = {"appId-demo1":200,"appId-demo2":300}
```
The above configuration specifies that the maximum length limit of the value in all namespaces under `appId-demo1` is 200, and the maximum length limit of the value in all namespaces under `appId-demo2` is 300

Expand Down
2 changes: 1 addition & 1 deletion docs/zh/deployment/distributed-deployment-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -1484,7 +1484,7 @@ http://5.5.5.5:8080/eureka/,http://6.6.6.6:8080/eureka/
#### 3.2.5.1 appid.value.length.limit.override - appId 维度的配置项 value 最大长度限制
此配置用来覆盖 `item.value.length.limit` 的配置,做到控制 appId 粒度下的 value 最大长度限制,配置的值是一个 json 格式,json 的 key 为 appId,格式如下:
```
appid.value.length.limit.override = {appId-demo1:200,aappId-demo2:300}
appid.value.length.limit.override = {"appId-demo1":200,"appId-demo2":300}
```
以上配置指定了 `appId-demo1` 下的所有 namespace 中的 value 最大长度限制为 200,`appId-demo2` 下的所有 namespace 中的 value 最大长度限制为 300

Expand Down

0 comments on commit f4b4e9b

Please sign in to comment.