Skip to content

Commit 051d583

Browse files
su-yhsczyh30
authored andcommitted
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
1 parent 3e9f42e commit 051d583

File tree

1 file changed

+9
-12
lines changed
  • sentinel-adapter/sentinel-spring-cloud-gateway-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/api

1 file changed

+9
-12
lines changed

sentinel-adapter/sentinel-spring-cloud-gateway-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/api/GatewayApiMatcherManager.java

+9-12
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,23 @@
1515
*/
1616
package com.alibaba.csp.sentinel.adapter.gateway.sc.api;
1717

18+
import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition;
19+
import com.alibaba.csp.sentinel.adapter.gateway.sc.api.matcher.WebExchangeApiMatcher;
20+
1821
import java.util.Collections;
22+
import java.util.HashMap;
1923
import java.util.Map;
2024
import java.util.Optional;
2125
import java.util.Set;
22-
import java.util.concurrent.ConcurrentHashMap;
2326
import java.util.stream.Collectors;
2427

25-
import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition;
26-
import com.alibaba.csp.sentinel.adapter.gateway.sc.api.matcher.WebExchangeApiMatcher;
27-
2828
/**
2929
* @author Eric Zhao
3030
* @since 1.6.0
3131
*/
3232
public final class GatewayApiMatcherManager {
3333

34-
private static final Map<String, WebExchangeApiMatcher> API_MATCHER_MAP = new ConcurrentHashMap<>();
34+
private static volatile Map<String, WebExchangeApiMatcher> API_MATCHER_MAP = new HashMap<>();
3535

3636
public static Map<String, WebExchangeApiMatcher> getApiMatcherMap() {
3737
return Collections.unmodifiableMap(API_MATCHER_MAP);
@@ -50,15 +50,12 @@ public static Set<ApiDefinition> getApiDefinitionSet() {
5050
}
5151

5252
static synchronized void loadApiDefinitions(/*@Valid*/ Set<ApiDefinition> definitions) {
53-
if (definitions == null || definitions.isEmpty()) {
54-
API_MATCHER_MAP.clear();
55-
return;
53+
Map<String, WebExchangeApiMatcher> apiMatcherMap = new HashMap<>();
54+
for (ApiDefinition definition : definitions) {
55+
apiMatcherMap.put(definition.getApiName(), new WebExchangeApiMatcher(definition));
5656
}
57-
definitions.forEach(GatewayApiMatcherManager::addApiDefinition);
58-
}
5957

60-
static void addApiDefinition(ApiDefinition definition) {
61-
API_MATCHER_MAP.put(definition.getApiName(), new WebExchangeApiMatcher(definition));
58+
API_MATCHER_MAP = apiMatcherMap;
6259
}
6360

6461
private GatewayApiMatcherManager() {}

0 commit comments

Comments
 (0)