Fix the bug that legacy API matchers in ScGatewayApiMatcherManager were not removed (#2436)
* Fix the bug that legacy API matchers in SC gateway adapter GatewayApiMatcherManager were not removed after the API group has been removed
This commit is contained in:
parent
3e9f42efce
commit
051d583fd8
|
|
@ -15,23 +15,23 @@
|
|||
*/
|
||||
package com.alibaba.csp.sentinel.adapter.gateway.sc.api;
|
||||
|
||||
import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition;
|
||||
import com.alibaba.csp.sentinel.adapter.gateway.sc.api.matcher.WebExchangeApiMatcher;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition;
|
||||
import com.alibaba.csp.sentinel.adapter.gateway.sc.api.matcher.WebExchangeApiMatcher;
|
||||
|
||||
/**
|
||||
* @author Eric Zhao
|
||||
* @since 1.6.0
|
||||
*/
|
||||
public final class GatewayApiMatcherManager {
|
||||
|
||||
private static final Map<String, WebExchangeApiMatcher> API_MATCHER_MAP = new ConcurrentHashMap<>();
|
||||
private static volatile Map<String, WebExchangeApiMatcher> API_MATCHER_MAP = new HashMap<>();
|
||||
|
||||
public static Map<String, WebExchangeApiMatcher> getApiMatcherMap() {
|
||||
return Collections.unmodifiableMap(API_MATCHER_MAP);
|
||||
|
|
@ -50,15 +50,12 @@ public final class GatewayApiMatcherManager {
|
|||
}
|
||||
|
||||
static synchronized void loadApiDefinitions(/*@Valid*/ Set<ApiDefinition> definitions) {
|
||||
if (definitions == null || definitions.isEmpty()) {
|
||||
API_MATCHER_MAP.clear();
|
||||
return;
|
||||
Map<String, WebExchangeApiMatcher> apiMatcherMap = new HashMap<>();
|
||||
for (ApiDefinition definition : definitions) {
|
||||
apiMatcherMap.put(definition.getApiName(), new WebExchangeApiMatcher(definition));
|
||||
}
|
||||
definitions.forEach(GatewayApiMatcherManager::addApiDefinition);
|
||||
}
|
||||
|
||||
static void addApiDefinition(ApiDefinition definition) {
|
||||
API_MATCHER_MAP.put(definition.getApiName(), new WebExchangeApiMatcher(definition));
|
||||
API_MATCHER_MAP = apiMatcherMap;
|
||||
}
|
||||
|
||||
private GatewayApiMatcherManager() {}
|
||||
|
|
|
|||
Loading…
Reference in New Issue