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;
|
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.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
|
||||||
import java.util.stream.Collectors;
|
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
|
* @author Eric Zhao
|
||||||
* @since 1.6.0
|
* @since 1.6.0
|
||||||
*/
|
*/
|
||||||
public final class GatewayApiMatcherManager {
|
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() {
|
public static Map<String, WebExchangeApiMatcher> getApiMatcherMap() {
|
||||||
return Collections.unmodifiableMap(API_MATCHER_MAP);
|
return Collections.unmodifiableMap(API_MATCHER_MAP);
|
||||||
|
|
@ -50,15 +50,12 @@ public final class GatewayApiMatcherManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
static synchronized void loadApiDefinitions(/*@Valid*/ Set<ApiDefinition> definitions) {
|
static synchronized void loadApiDefinitions(/*@Valid*/ Set<ApiDefinition> definitions) {
|
||||||
if (definitions == null || definitions.isEmpty()) {
|
Map<String, WebExchangeApiMatcher> apiMatcherMap = new HashMap<>();
|
||||||
API_MATCHER_MAP.clear();
|
for (ApiDefinition definition : definitions) {
|
||||||
return;
|
apiMatcherMap.put(definition.getApiName(), new WebExchangeApiMatcher(definition));
|
||||||
}
|
}
|
||||||
definitions.forEach(GatewayApiMatcherManager::addApiDefinition);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void addApiDefinition(ApiDefinition definition) {
|
API_MATCHER_MAP = apiMatcherMap;
|
||||||
API_MATCHER_MAP.put(definition.getApiName(), new WebExchangeApiMatcher(definition));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private GatewayApiMatcherManager() {}
|
private GatewayApiMatcherManager() {}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue