This is an automated email from the ASF dual-hosted git repository.
xiaoyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git
The following commit(s) were added to refs/heads/master by this push:
new eba08086c [type: fix] fix selector cache bug (#3770)
eba08086c is described below
commit eba08086ce5fa1ee6c5e3ef053bab91ca67e2884
Author: zouchangfu <[email protected]>
AuthorDate: Fri Jul 29 10:39:18 2022 +0800
[type: fix] fix selector cache bug (#3770)
---
.../src/main/resources/application.yml | 2 +-
.../shenyu/plugin/base/AbstractShenyuPlugin.java | 44 ++++++----------------
2 files changed, 12 insertions(+), 34 deletions(-)
diff --git a/shenyu-bootstrap/src/main/resources/application.yml
b/shenyu-bootstrap/src/main/resources/application.yml
index c9d82d467..03a55ab57 100644
--- a/shenyu-bootstrap/src/main/resources/application.yml
+++ b/shenyu-bootstrap/src/main/resources/application.yml
@@ -68,7 +68,7 @@ management:
shenyu:
matchCache:
- enabled: true
+ enabled: false
maxFreeMemory: 256 # 256MB
netty:
http:
diff --git
a/shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/AbstractShenyuPlugin.java
b/shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/AbstractShenyuPlugin.java
index faf848b6f..b8d518d6d 100644
---
a/shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/AbstractShenyuPlugin.java
+++
b/shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/AbstractShenyuPlugin.java
@@ -18,7 +18,6 @@
package org.apache.shenyu.plugin.base;
import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.shenyu.common.config.ShenyuConfig;
import org.apache.shenyu.common.dto.ConditionData;
@@ -57,12 +56,6 @@ public abstract class AbstractShenyuPlugin implements
ShenyuPlugin {
private ShenyuConfig.MatchCache matchCacheConfig;
- private SelectorData defaultSelectorData = new SelectorData();
-
- {
- defaultSelectorData.setPluginName(named());
- }
-
/**
* this is Template Method child has Implement your own logic.
*
@@ -89,9 +82,8 @@ public abstract class AbstractShenyuPlugin implements
ShenyuPlugin {
PluginData pluginData =
BaseDataCache.getInstance().obtainPluginData(pluginName);
if (pluginData != null && pluginData.getEnabled()) {
final String path = exchange.getRequest().getURI().getPath();
- Pair<Boolean, SelectorData> resultSelectorData =
obtainSelectorDataCacheIfEnabled(exchange);
- SelectorData selectorData = resultSelectorData.getRight();
- if (Boolean.TRUE.equals(resultSelectorData.getLeft())) {
+ SelectorData selectorData =
obtainSelectorDataCacheIfEnabled(exchange);
+ if (Objects.isNull(selectorData)) {
List<SelectorData> selectors =
BaseDataCache.getInstance().obtainSelectorData(pluginName);
if (CollectionUtils.isEmpty(selectors)) {
return handleSelectorIfNull(pluginName, exchange, chain);
@@ -134,16 +126,12 @@ public abstract class AbstractShenyuPlugin implements
ShenyuPlugin {
}
private void cacheSelectorDataIfEnabled(final String path, final
SelectorData selectorData) {
- if (matchCacheConfig.getEnabled()) {
- if (Objects.isNull(selectorData)) {
- MatchDataCache.getInstance().cacheSelectorData(path,
defaultSelectorData, getMaxFreeMemory());
- } else {
- List<ConditionData> conditionList =
selectorData.getConditionList();
- if (CollectionUtils.isNotEmpty(conditionList)) {
- boolean isUriCondition = conditionList.stream().allMatch(v
-> URI_CONDITION_TYPE.equals(v.getParamType()));
- if (isUriCondition) {
- MatchDataCache.getInstance().cacheSelectorData(path,
selectorData, getMaxFreeMemory());
- }
+ if (matchCacheConfig.getEnabled() && Objects.nonNull(selectorData)) {
+ List<ConditionData> conditionList =
selectorData.getConditionList();
+ if (CollectionUtils.isNotEmpty(conditionList)) {
+ boolean isUriCondition = conditionList.stream().allMatch(v ->
URI_CONDITION_TYPE.equals(v.getParamType()));
+ if (isUriCondition) {
+ MatchDataCache.getInstance().cacheSelectorData(path,
selectorData, getMaxFreeMemory());
}
}
}
@@ -153,21 +141,11 @@ public abstract class AbstractShenyuPlugin implements
ShenyuPlugin {
return matchCacheConfig.getMaxFreeMemory() * 1024 * 1024;
}
- private Pair<Boolean, SelectorData> obtainSelectorDataCacheIfEnabled(final
ServerWebExchange exchange) {
+ private SelectorData obtainSelectorDataCacheIfEnabled(final
ServerWebExchange exchange) {
if (matchCacheConfig.getEnabled()) {
- SelectorData selectorData =
MatchDataCache.getInstance().obtainSelectorData(named(),
exchange.getRequest().getURI().getPath());
-
- if (Objects.isNull(selectorData)) {
- return Pair.of(Boolean.TRUE, null);
- }
-
- if (StringUtils.isBlank(selectorData.getId())) {
- return Pair.of(Boolean.FALSE, null);
- }
-
- return Pair.of(Boolean.FALSE, selectorData);
+ return MatchDataCache.getInstance().obtainSelectorData(named(),
exchange.getRequest().getURI().getPath());
}
- return Pair.of(Boolean.TRUE, null);
+ return null;
}
protected Mono<Void> handleSelectorIfNull(final String pluginName, final
ServerWebExchange exchange, final ShenyuPluginChain chain) {