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 ea85bb5d2 [type: refactor] refactor abstractshenyuplugin#execute
(#4178)
ea85bb5d2 is described below
commit ea85bb5d23679ddf98171aa196c30e3d8a223934
Author: zhengpeng <[email protected]>
AuthorDate: Wed Nov 16 17:34:00 2022 +0800
[type: refactor] refactor abstractshenyuplugin#execute (#4178)
* refactor org.apache.shenyu.plugin.base.AbstractShenyuPlugin.execute
* refactor org.apache.shenyu.plugin.base.AbstractShenyuPlugin.execute
* refactor org.apache.shenyu.plugin.base.AbstractShenyuPlugin.execute
* org.apache.shenyu.spi.ExtensionLoader.createExtension log info
* Empty Commit to setup deployments
* Empty Commit to setup deployments
* Empty Commit to setup deployments
* fix
* Empty Commit to setup deployments
* Empty Commit to setup deployments
Co-authored-by: likeguo <[email protected]>
---
.../shenyu/plugin/base/AbstractShenyuPlugin.java | 145 ++++++++++-----------
.../org/apache/shenyu/spi/ExtensionLoader.java | 2 +-
2 files changed, 73 insertions(+), 74 deletions(-)
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 5a56c0a28..0f050cb92 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
@@ -67,7 +67,7 @@ public abstract class AbstractShenyuPlugin implements
ShenyuPlugin {
* @return {@code Mono<Void>} to indicate when request handling is complete
*/
protected abstract Mono<Void> doExecute(ServerWebExchange exchange,
ShenyuPluginChain chain, SelectorData selector, RuleData rule);
-
+
/**
* Process the Web request and (optionally) delegate to the next
* {@code ShenyuPlugin} through the given {@link ShenyuPluginChain}.
@@ -79,76 +79,72 @@ public abstract class AbstractShenyuPlugin implements
ShenyuPlugin {
@Override
public Mono<Void> execute(final ServerWebExchange exchange, final
ShenyuPluginChain chain) {
initMatchCacheConfig();
- String pluginName = named();
+ final String pluginName = named();
PluginData pluginData =
BaseDataCache.getInstance().obtainPluginData(pluginName);
- if (Objects.nonNull(pluginData) && pluginData.getEnabled()) {
- final String path = exchange.getRequest().getURI().getPath();
- SelectorData selectorData =
obtainSelectorDataCacheIfEnabled(exchange);
+ // early exit
+ if (Objects.isNull(pluginData) || !pluginData.getEnabled()) {
+ return chain.execute(exchange);
+ }
+ final String path = exchange.getRequest().getURI().getPath();
+ List<SelectorData> selectors =
BaseDataCache.getInstance().obtainSelectorData(pluginName);
+ SelectorData selectorData = obtainSelectorDataCacheIfEnabled(path);
+ // handle Selector
+ if (Objects.nonNull(selectorData) &&
StringUtils.isBlank(selectorData.getId())) {
+ return handleSelectorIfNull(pluginName, exchange, chain);
+ }
+ if (Objects.isNull(selectorData)) {
+ if (CollectionUtils.isEmpty(selectors)) {
+ return handleSelectorIfNull(pluginName, exchange, chain);
+ }
+ Pair<Boolean, SelectorData> matchSelectorData =
matchSelector(exchange, selectors);
+ selectorData = matchSelectorData.getRight();
if (Objects.isNull(selectorData)) {
- List<SelectorData> selectors =
BaseDataCache.getInstance().obtainSelectorData(pluginName);
- if (CollectionUtils.isEmpty(selectors)) {
- return handleSelectorIfNull(pluginName, exchange, chain);
- }
- Pair<Boolean, SelectorData> matchSelectorData =
matchSelector(exchange, selectors);
- selectorData = matchSelectorData.getRight();
- if (Objects.isNull(selectorData)) {
- if (matchCacheConfig.getSelectorEnabled() &&
matchSelectorData.getLeft()) {
- selectorData = new SelectorData();
- selectorData.setPluginName(named());
- cacheSelectorData(path, selectorData);
- }
- return handleSelectorIfNull(pluginName, exchange, chain);
- } else {
- if (matchCacheConfig.getSelectorEnabled() &&
matchSelectorData.getLeft()) {
- cacheSelectorData(path, selectorData);
- }
+ if (matchCacheConfig.getSelectorEnabled() &&
matchSelectorData.getLeft()) {
+ selectorData = new SelectorData();
+ selectorData.setPluginName(pluginName);
+ cacheSelectorData(path, selectorData);
}
+ return handleSelectorIfNull(pluginName, exchange, chain);
} else {
- if (StringUtils.isBlank(selectorData.getId())) {
- return handleSelectorIfNull(pluginName, exchange, chain);
+ if (matchCacheConfig.getSelectorEnabled() &&
matchSelectorData.getLeft()) {
+ cacheSelectorData(path, selectorData);
}
}
- selectorLog(selectorData, pluginName);
- if (Objects.nonNull(selectorData.getContinued()) &&
!selectorData.getContinued()) {
- // if continued, not match rules
- return doExecute(exchange, chain, selectorData,
defaultRuleData(selectorData));
- }
- // handle rule
- RuleData ruleData = obtainRuleDataCacheIfEnabled(exchange);
+ }
+ printLog(selectorData, pluginName);
+ if (Objects.nonNull(selectorData.getContinued()) &&
!selectorData.getContinued()) {
+ // if continued, not match rules
+ return doExecute(exchange, chain, selectorData,
defaultRuleData(selectorData));
+ }
+ // handle Rule
+ RuleData ruleData = obtainRuleDataCacheIfEnabled(path);
+ List<RuleData> rules =
BaseDataCache.getInstance().obtainRuleData(selectorData.getId());
+ if (Objects.nonNull(ruleData) && Objects.isNull(ruleData.getId())) {
+ return handleRuleIfNull(pluginName, exchange, chain);
+ }
+ if (CollectionUtils.isEmpty(rules)) {
+ return handleRuleIfNull(pluginName, exchange, chain);
+ }
+ if (selectorData.getType() == SelectorTypeEnum.FULL_FLOW.getCode()) {
+ //get last
+ RuleData rule = rules.get(rules.size() - 1);
+ printLog(rule, pluginName);
+ return doExecute(exchange, chain, selectorData, rule);
+ } else {
+ Pair<Boolean, RuleData> matchRuleData = matchRule(exchange, rules);
+ ruleData = matchRuleData.getRight();
if (Objects.isNull(ruleData)) {
- // execute no cache
- List<RuleData> rules =
BaseDataCache.getInstance().obtainRuleData(selectorData.getId());
- if (CollectionUtils.isEmpty(rules)) {
- return handleRuleIfNull(pluginName, exchange, chain);
- }
- if (selectorData.getType() ==
SelectorTypeEnum.FULL_FLOW.getCode()) {
- //get last
- RuleData rule = rules.get(rules.size() - 1);
- ruleLog(rule, pluginName);
- return doExecute(exchange, chain, selectorData, rule);
- } else {
- Pair<Boolean, RuleData> matchRuleData =
matchRule(exchange, rules);
- ruleData = matchRuleData.getRight();
- if (Objects.isNull(ruleData)) {
- this.cacheRuleData(pluginName, path, matchRuleData);
- return handleRuleIfNull(pluginName, exchange, chain);
- } else {
- // if match success, cache rule.
- if (matchCacheConfig.getRuleEnabled() &&
matchRuleData.getLeft()) {
- cacheRuleData(path, ruleData);
- }
- }
- }
+ this.cacheRuleData(pluginName, path, matchRuleData);
+ return handleRuleIfNull(pluginName, exchange, chain);
} else {
- if (Objects.isNull(ruleData.getId())) {
- // handle rule not match
- return handleRuleIfNull(pluginName, exchange, chain);
+ // if match success, cache rule.
+ if (matchCacheConfig.getRuleEnabled() &&
matchRuleData.getLeft()) {
+ cacheRuleData(path, ruleData);
}
}
- ruleLog(ruleData, pluginName);
- return doExecute(exchange, chain, selectorData, ruleData);
}
- return chain.execute(exchange);
+ printLog(ruleData, pluginName);
+ return doExecute(exchange, chain, selectorData, ruleData);
}
private void initMatchCacheConfig() {
@@ -202,14 +198,14 @@ public abstract class AbstractShenyuPlugin implements
ShenyuPlugin {
return matchCacheConfig.getMaxRuleFreeMemory() * 1024 * 1024;
}
- private SelectorData obtainSelectorDataCacheIfEnabled(final
ServerWebExchange exchange) {
- return matchCacheConfig.getSelectorEnabled() ?
MatchDataCache.getInstance().obtainSelectorData(named(),
exchange.getRequest().getURI().getPath()) : null;
+ private SelectorData obtainSelectorDataCacheIfEnabled(final String path) {
+ return matchCacheConfig.getSelectorEnabled() ?
MatchDataCache.getInstance().obtainSelectorData(named(), path) : null;
}
- private RuleData obtainRuleDataCacheIfEnabled(final ServerWebExchange
exchange) {
- return matchCacheConfig.getRuleEnabled() ?
MatchDataCache.getInstance().obtainRuleData(named(),
exchange.getRequest().getURI().getPath()) : null;
+ private RuleData obtainRuleDataCacheIfEnabled(final String path) {
+ return matchCacheConfig.getRuleEnabled() ?
MatchDataCache.getInstance().obtainRuleData(named(), path) : null;
}
-
+
protected RuleData defaultRuleData(final SelectorData selectorData) {
RuleData ruleData = new RuleData();
ruleData.setSelectorId(selectorData.getId());
@@ -296,15 +292,18 @@ public abstract class AbstractShenyuPlugin implements
ShenyuPlugin {
return ruleData.getEnabled() &&
MatchStrategyFactory.match(ruleData.getMatchMode(),
ruleData.getConditionDataList(), exchange);
}
- private void selectorLog(final SelectorData selectorData, final String
pluginName) {
- if (selectorData.getLogged()) {
- LOG.info("{} selector success match , selector name :{}",
pluginName, selectorData.getName());
+ private void printLog(final Object data, final String pluginName) {
+ if (data instanceof SelectorData) {
+ SelectorData selector = (SelectorData) data;
+ if (selector.getLogged()) {
+ LOG.info("{} selector success match , selector name :{}",
pluginName, selector.getName());
+ }
}
- }
-
- private void ruleLog(final RuleData ruleData, final String pluginName) {
- if (ruleData.getLoged()) {
- LOG.info("{} rule success match , rule name :{}", pluginName,
ruleData.getName());
+ if (data instanceof RuleData) {
+ RuleData rule = (RuleData) data;
+ if (rule.getLoged()) {
+ LOG.info("{} rule success match , rule name :{}", pluginName,
rule.getName());
+ }
}
}
}
diff --git
a/shenyu-spi/src/main/java/org/apache/shenyu/spi/ExtensionLoader.java
b/shenyu-spi/src/main/java/org/apache/shenyu/spi/ExtensionLoader.java
index 3083aa68e..6299d3ec1 100644
--- a/shenyu-spi/src/main/java/org/apache/shenyu/spi/ExtensionLoader.java
+++ b/shenyu-spi/src/main/java/org/apache/shenyu/spi/ExtensionLoader.java
@@ -194,7 +194,7 @@ public final class ExtensionLoader<T> {
private void createExtension(final String name, final Holder<Object>
holder) {
ClassEntity classEntity = getExtensionClassesEntity().get(name);
if (Objects.isNull(classEntity)) {
- throw new IllegalArgumentException("name is error");
+ throw new IllegalArgumentException(name + "name is error");
}
Class<?> aClass = classEntity.getClazz();
Object o = joinInstances.get(aClass);