From fdef33fab3c140482baa6080347d983f16725bf5 Mon Sep 17 00:00:00 2001 From: GuoHao Date: Thu, 15 Sep 2022 14:06:04 +0800 Subject: [PATCH] Copy on read to avoid concurrent issue (#10616) --- .../common/config/ConfigurationUtils.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java index ab4ee4e14d..6daeb9fdf3 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java @@ -239,7 +239,11 @@ public final class ConfigurationUtils { } if (CollectionUtils.isNotEmptyMap(configMap)) { - for(Map.Entry entry : configMap.entrySet()) { + Map copy ; + synchronized (configMap){ + copy = new HashMap<>(configMap); + } + for(Map.Entry entry : copy.entrySet()) { String key = entry.getKey(); V val = entry.getValue(); if (StringUtils.startsWithIgnoreCase(key, prefix) @@ -276,7 +280,11 @@ public final class ConfigurationUtils { if (!prefix.endsWith(".")) { prefix += "."; } - for (Map.Entry entry : configMap.entrySet()) { + Map copy ; + synchronized (configMap){ + copy = new HashMap<>(configMap); + } + for (Map.Entry entry : copy.entrySet()) { String key = entry.getKey(); if (StringUtils.startsWithIgnoreCase(key, prefix) && key.length() > prefix.length() @@ -311,7 +319,11 @@ public final class ConfigurationUtils { } Set ids = new LinkedHashSet<>(); for (Map configMap : configMaps) { - for (Map.Entry entry : configMap.entrySet()) { + Map copy ; + synchronized (configMap){ + copy = new HashMap<>(configMap); + } + for (Map.Entry entry : copy.entrySet()) { String key = entry.getKey(); V val = entry.getValue(); if (StringUtils.startsWithIgnoreCase(key, prefix)