You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2021/12/13 15:47:10 UTC

[dubbo] branch 3.0.5-release updated: [3.0] fix #9346 use CopyOnWriteArrayList (#9348)

This is an automated email from the ASF dual-hosted git repository.

liujun pushed a commit to branch 3.0.5-release
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.0.5-release by this push:
     new 9ef175a  [3.0] fix #9346 use CopyOnWriteArrayList (#9348)
9ef175a is described below

commit 9ef175ac7d7d9c3ddae91518b96cc4e92cbbf255
Author: Wang Chengming <63...@qq.com>
AuthorDate: Mon Dec 13 23:46:33 2021 +0800

    [3.0] fix #9346 use CopyOnWriteArrayList (#9348)
    
    fixes #9346
---
 .../dubbo/common/config/CompositeConfiguration.java     | 17 +++++++++--------
 .../apache/dubbo/common/config/ConfigurationCache.java  |  3 ++-
 .../apache/dubbo/common/config/ConfigurationUtils.java  |  7 ++++---
 .../dubbo/common/config/InmemoryConfiguration.java      |  6 ++++--
 4 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java
index 887591b..a1e5e0e 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java
@@ -21,19 +21,19 @@ import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.utils.ArrayUtils;
 
 import java.util.Arrays;
-import java.util.LinkedList;
 import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 /**
  * This is an abstraction specially customized for the sequence Dubbo retrieves properties.
  */
 public class CompositeConfiguration implements Configuration {
-    private Logger logger = LoggerFactory.getLogger(CompositeConfiguration.class);
+    private final Logger logger = LoggerFactory.getLogger(CompositeConfiguration.class);
 
     /**
      * List holding all the configuration
      */
-    private List<Configuration> configList = new LinkedList<>();
+    private final List<Configuration> configList = new CopyOnWriteArrayList<>();
 
     //FIXME, consider change configList to SortedMap to replace this boolean status.
     private boolean dynamicIncluded;
@@ -47,15 +47,15 @@ public class CompositeConfiguration implements Configuration {
         }
     }
 
-    public void setDynamicIncluded(boolean dynamicIncluded) {
-        this.dynamicIncluded = dynamicIncluded;
-    }
-
     //FIXME, consider change configList to SortedMap to replace this boolean status.
     public boolean isDynamicIncluded() {
         return dynamicIncluded;
     }
 
+    public void setDynamicIncluded(boolean dynamicIncluded) {
+        this.dynamicIncluded = dynamicIncluded;
+    }
+
     public void addConfiguration(Configuration configuration) {
         if (configList.contains(configuration)) {
             return;
@@ -80,7 +80,8 @@ public class CompositeConfiguration implements Configuration {
                     return value;
                 }
             } catch (Exception e) {
-                logger.error("Error when trying to get value for key " + key + " from " + config + ", will continue to try the next one.");
+                logger.error("Error when trying to get value for key " + key + " from " + config + ", " +
+                    "will continue to try the next one.");
             }
         }
         return null;
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationCache.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationCache.java
index 977cdfb..c4e5ab3 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationCache.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationCache.java
@@ -16,6 +16,7 @@
  */
 package org.apache.dubbo.common.config;
 
+import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.rpc.model.ScopeModel;
 
 import java.util.Map;
@@ -37,7 +38,7 @@ public class ConfigurationCache {
      */
     public String computeIfAbsent(String key, Function<String, String> function) {
         String value = cache.get(key);
-        if (value == null) {
+        if (StringUtils.isEmpty(value)) {
             // lock free, tolerate repeat apply, will return previous value
             cache.putIfAbsent(key, function.apply(key));
             value = cache.get(key);
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 427473c..d0c2f23 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
@@ -21,6 +21,7 @@ import org.apache.dubbo.common.extension.ExtensionAccessor;
 import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
+import org.apache.dubbo.common.utils.CollectionUtils;
 import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.rpc.model.ApplicationModel;
 import org.apache.dubbo.rpc.model.ScopeModel;
@@ -107,7 +108,7 @@ public class ConfigurationUtils {
         Configuration configuration = getGlobalConfiguration(scopeModel);
         String value = StringUtils.trim(configuration.getString(SHUTDOWN_WAIT_KEY));
 
-        if (value != null && value.length() > 0) {
+        if (StringUtils.isNotEmpty(value)) {
             try {
                 timeout = Integer.parseInt(value);
             } catch (Exception e) {
@@ -115,7 +116,7 @@ public class ConfigurationUtils {
             }
         } else {
             value = StringUtils.trim(configuration.getString(SHUTDOWN_WAIT_SECONDS_KEY));
-            if (value != null && value.length() > 0) {
+            if (StringUtils.isNotEmpty(value)) {
                 try {
                     timeout = Integer.parseInt(value) * 1000;
                 } catch (Exception e) {
@@ -229,7 +230,7 @@ public class ConfigurationUtils {
             resultMap = new LinkedHashMap<>();
         }
 
-        if (null != configMap) {
+        if (CollectionUtils.isNotEmptyMap(configMap)) {
             for(Map.Entry<String, V> entry : configMap.entrySet()) {
                 String key = entry.getKey();
                 V val = entry.getValue();
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/InmemoryConfiguration.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/InmemoryConfiguration.java
index 92d808d..7b3fa98 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/InmemoryConfiguration.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/InmemoryConfiguration.java
@@ -16,6 +16,8 @@
  */
 package org.apache.dubbo.common.config;
 
+import org.apache.dubbo.common.utils.CollectionUtils;
+
 import java.util.LinkedHashMap;
 import java.util.Map;
 
@@ -56,7 +58,7 @@ public class InmemoryConfiguration implements Configuration {
      * Add a set of properties into the store
      */
     public void addProperties(Map<String, String> properties) {
-        if (properties != null) {
+        if (CollectionUtils.isNotEmptyMap(properties)) {
             this.store.putAll(properties);
         }
     }
@@ -65,7 +67,7 @@ public class InmemoryConfiguration implements Configuration {
      * set store
      */
     public void setProperties(Map<String, String> properties) {
-        if (properties != null) {
+        if (CollectionUtils.isNotEmptyMap(properties)) {
             this.store = properties;
         }
     }