Skip to content

Commit

Permalink
*
Browse files Browse the repository at this point in the history
Signed-off-by: provenceee <[email protected]>
  • Loading branch information
provenceee committed Jan 16, 2024
1 parent 4ddb41e commit 6ad3427
Showing 1 changed file with 19 additions and 87 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -62,95 +62,27 @@ public FlowKindHandler() {

@Override
public void handle(DynamicConfigEvent event, String cacheName) {
RouterConfiguration configuration = ConfigCache.getLabel(cacheName);
if (event.getEventType() == DynamicConfigEventType.DELETE) {
if (RouterConstant.GLOBAL_ROUTER_KEY.equals(event.getKey())) {
configuration.resetGlobalRule(getEntireRule(RouterConstant.FLOW_MATCH_KIND, null));
RuleUtils.initMatchKeys(configuration);
RouterEventCollector.getInstance()
.collectGlobalRouteRuleEvent(JSON.toJSONString(configuration.getGlobalRule()));
return;
}
if (RouterConstant.ROUTER_KEY_PREFIX.equals(event.getKey())) {
configuration.resetRouteRule(RouterConstant.FLOW_MATCH_KIND, Collections.emptyMap());
RuleUtils.initKeys(configuration);
RouterEventCollector.getInstance()
.collectServiceRouteRuleEvent(JSON.toJSONString(configuration.getRouteRule()));
return;
}
String serviceName = event.getKey().substring(RouterConstant.ROUTER_KEY_PREFIX.length() + 1);
configuration.removeServiceRule(serviceName, RouterConstant.FLOW_MATCH_KIND);
RuleUtils.initKeys(configuration);
RouterEventCollector.getInstance()
.collectServiceRouteRuleEvent(JSON.toJSONString(configuration.getRouteRule()));
return;
}

if (RouterConstant.GLOBAL_ROUTER_KEY.equals(event.getKey())) {
List<Rule> list = JSONArray.parseArray(JSONObject.toJSONString(getRules(event)), Rule.class);
RuleUtils.removeInvalidRules(RouterConstant.FLOW_MATCH_KIND, list,
RouterConstant.DUBBO_CACHE_NAME.equals(cacheName),
RouterConstant.DUBBO_CACHE_NAME.equals(cacheName));
if (!CollectionUtils.isEmpty(list)) {
list.sort((o1, o2) -> o2.getPrecedence() - o1.getPrecedence());
}
configuration.resetGlobalRule(getEntireRule(RouterConstant.FLOW_MATCH_KIND, list));
RuleUtils.initMatchKeys(configuration);
RouterEventCollector.getInstance()
.collectGlobalRouteRuleEvent(JSON.toJSONString(configuration.getGlobalRule()));
return;
}
if (RouterConstant.ROUTER_KEY_PREFIX.equals(event.getKey())) {
Map<String, String> routeRuleMap = getRouteRuleMap(event);
Map<String, EntireRule> routeRule = new HashMap<>();
for (Entry<String, String> entry : routeRuleMap.entrySet()) {
List<Map<String, String>> routeRuleList = yaml.load(entry.getValue());
if (CollectionUtils.isEmpty(routeRuleList)) {
continue;
}
List<Rule> list = JSONArray.parseArray(JSONObject.toJSONString(routeRuleList), Rule.class);
RuleUtils.removeInvalidRules(RouterConstant.FLOW_MATCH_KIND, list,
RouterConstant.DUBBO_CACHE_NAME.equals(cacheName),
RouterConstant.DUBBO_CACHE_NAME.equals(cacheName));
if (!CollectionUtils.isEmpty(list)) {
list.sort((o1, o2) -> o2.getPrecedence() - o1.getPrecedence());
routeRule.put(entry.getKey(), getEntireRule(RouterConstant.FLOW_MATCH_KIND, list));
}
handleGlobalRules(event, cacheName, RouterConstant.FLOW_MATCH_KIND);
} else if (RouterConstant.ROUTER_KEY_PREFIX.equals(event.getKey())) {
handleRouterRules(event, cacheName, RouterConstant.FLOW_MATCH_KIND);
} else {
handleServiceRules(event, cacheName, RouterConstant.FLOW_MATCH_KIND);
}
configuration.resetRouteRule(RouterConstant.FLOW_MATCH_KIND, routeRule);
RuleUtils.initKeys(configuration);
RouterEventCollector.getInstance()
.collectServiceRouteRuleEvent(JSON.toJSONString(configuration.getRouteRule()));
return;
}

String serviceName = event.getKey().substring(RouterConstant.ROUTER_KEY_PREFIX.length() + 1);
List<Rule> list = JSONArray.parseArray(JSONObject.toJSONString(getRule(event, serviceName)),
Rule.class);
RuleUtils.removeInvalidRules(RouterConstant.FLOW_MATCH_KIND, list,
RouterConstant.DUBBO_CACHE_NAME.equals(cacheName),
RouterConstant.DUBBO_CACHE_NAME.equals(cacheName));
if (CollectionUtils.isEmpty(list)) {
configuration.removeServiceRule(serviceName, RouterConstant.FLOW_MATCH_KIND);
} else {
list.sort((o1, o2) -> o2.getPrecedence() - o1.getPrecedence());
configuration.updateServiceRule(serviceName, getEntireRule(RouterConstant.FLOW_MATCH_KIND, list));
}
RuleUtils.initKeys(configuration);
RouterEventCollector.getInstance()
.collectServiceRouteRuleEvent(JSON.toJSONString(configuration.getRouteRule()));
}

@Override
public boolean shouldHandle(String key) {
return keys.contains(key) || key.startsWith(RouterConstant.ROUTER_KEY_PREFIX + RouterConstant.POINT);
}

private void handleGlobalRules(DynamicConfigEvent event, String cacheName) {
private void handleGlobalRules(DynamicConfigEvent event, String cacheName, String kind) {
RouterConfiguration configuration = ConfigCache.getLabel(cacheName);
if (event.getEventType() == DynamicConfigEventType.DELETE) {
if (RouterConstant.GLOBAL_ROUTER_KEY.equals(event.getKey())) {
configuration.resetGlobalRule(getEntireRule(RouterConstant.FLOW_MATCH_KIND, null));
configuration.resetGlobalRule(getEntireRule(kind, null));
RuleUtils.initMatchKeys(configuration);
RouterEventCollector.getInstance()
.collectGlobalRouteRuleEvent(JSON.toJSONString(configuration.getGlobalRule()));
Expand All @@ -160,24 +92,24 @@ private void handleGlobalRules(DynamicConfigEvent event, String cacheName) {

if (RouterConstant.GLOBAL_ROUTER_KEY.equals(event.getKey())) {
List<Rule> list = JSONArray.parseArray(JSONObject.toJSONString(getRules(event)), Rule.class);
RuleUtils.removeInvalidRules(RouterConstant.FLOW_MATCH_KIND, list,
RuleUtils.removeInvalidRules(kind, list,
RouterConstant.DUBBO_CACHE_NAME.equals(cacheName),
RouterConstant.DUBBO_CACHE_NAME.equals(cacheName));
if (!CollectionUtils.isEmpty(list)) {
list.sort((o1, o2) -> o2.getPrecedence() - o1.getPrecedence());
}
configuration.resetGlobalRule(getEntireRule(RouterConstant.FLOW_MATCH_KIND, list));
configuration.resetGlobalRule(getEntireRule(kind, list));
RuleUtils.initMatchKeys(configuration);
RouterEventCollector.getInstance()
.collectGlobalRouteRuleEvent(JSON.toJSONString(configuration.getGlobalRule()));
}
}

private void handleRouterRules(DynamicConfigEvent event, String cacheName) {
private void handleRouterRules(DynamicConfigEvent event, String cacheName, String kind) {
RouterConfiguration configuration = ConfigCache.getLabel(cacheName);
if (event.getEventType() == DynamicConfigEventType.DELETE) {
if (RouterConstant.ROUTER_KEY_PREFIX.equals(event.getKey())) {
configuration.resetRouteRule(RouterConstant.FLOW_MATCH_KIND, Collections.emptyMap());
configuration.resetRouteRule(kind, Collections.emptyMap());
RuleUtils.initKeys(configuration);
RouterEventCollector.getInstance()
.collectServiceRouteRuleEvent(JSON.toJSONString(configuration.getRouteRule()));
Expand All @@ -192,27 +124,27 @@ private void handleRouterRules(DynamicConfigEvent event, String cacheName) {
continue;
}
List<Rule> list = JSONArray.parseArray(JSONObject.toJSONString(routeRuleList), Rule.class);
RuleUtils.removeInvalidRules(RouterConstant.FLOW_MATCH_KIND, list,
RuleUtils.removeInvalidRules(kind, list,
RouterConstant.DUBBO_CACHE_NAME.equals(cacheName),
RouterConstant.DUBBO_CACHE_NAME.equals(cacheName));
if (!CollectionUtils.isEmpty(list)) {
list.sort((o1, o2) -> o2.getPrecedence() - o1.getPrecedence());
routeRule.put(entry.getKey(), getEntireRule(RouterConstant.FLOW_MATCH_KIND, list));
routeRule.put(entry.getKey(), getEntireRule(kind, list));
}
}
configuration.resetRouteRule(RouterConstant.FLOW_MATCH_KIND, routeRule);
configuration.resetRouteRule(kind, routeRule);
RuleUtils.initKeys(configuration);
RouterEventCollector.getInstance()
.collectServiceRouteRuleEvent(JSON.toJSONString(configuration.getRouteRule()));
}
}

private void handleServiceRules(DynamicConfigEvent event, String cacheName) {
private void handleServiceRules(DynamicConfigEvent event, String cacheName, String kind) {
RouterConfiguration configuration = ConfigCache.getLabel(cacheName);
if (event.getEventType() == DynamicConfigEventType.DELETE) {
if (event.getKey().startsWith(RouterConstant.ROUTER_KEY_PREFIX + RouterConstant.POINT)) {
String serviceName = event.getKey().substring(RouterConstant.ROUTER_KEY_PREFIX.length() + 1);
configuration.removeServiceRule(serviceName, RouterConstant.FLOW_MATCH_KIND);
configuration.removeServiceRule(serviceName, kind);
RuleUtils.initKeys(configuration);
RouterEventCollector.getInstance()
.collectServiceRouteRuleEvent(JSON.toJSONString(configuration.getRouteRule()));
Expand All @@ -223,14 +155,14 @@ private void handleServiceRules(DynamicConfigEvent event, String cacheName) {
String serviceName = event.getKey().substring(RouterConstant.ROUTER_KEY_PREFIX.length() + 1);
List<Rule> list = JSONArray.parseArray(JSONObject.toJSONString(getRule(event, serviceName)),
Rule.class);
RuleUtils.removeInvalidRules(RouterConstant.FLOW_MATCH_KIND, list,
RuleUtils.removeInvalidRules(kind, list,
RouterConstant.DUBBO_CACHE_NAME.equals(cacheName),
RouterConstant.DUBBO_CACHE_NAME.equals(cacheName));
if (CollectionUtils.isEmpty(list)) {
configuration.removeServiceRule(serviceName, RouterConstant.FLOW_MATCH_KIND);
configuration.removeServiceRule(serviceName, kind);
} else {
list.sort((o1, o2) -> o2.getPrecedence() - o1.getPrecedence());
configuration.updateServiceRule(serviceName, getEntireRule(RouterConstant.FLOW_MATCH_KIND, list));
configuration.updateServiceRule(serviceName, getEntireRule(kind, list));
}
RuleUtils.initKeys(configuration);
RouterEventCollector.getInstance()
Expand Down

0 comments on commit 6ad3427

Please sign in to comment.