You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2021/11/23 06:41:06 UTC

[dubbo] branch 3.0 updated: [3.0] Ensure Concurrent Safe of Model & Change MetadataParamsFilter scope (#9309)

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

albumenj pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.0 by this push:
     new 686d357  [3.0] Ensure Concurrent Safe of Model & Change MetadataParamsFilter scope (#9309)
686d357 is described below

commit 686d3571d225adf9500efc9f487f69bcd3b428de
Author: Albumen Kevin <jh...@gmail.com>
AuthorDate: Tue Nov 23 14:40:54 2021 +0800

    [3.0] Ensure Concurrent Safe of Model & Change MetadataParamsFilter scope (#9309)
    
    * [3.0] Ensure Concurrent Safe of Model & Change MetadataParamsFilter scope
    
    * revert ServiceModel
---
 .../org/apache/dubbo/common/beans/factory/ScopeBeanFactory.java    | 4 ++--
 .../apache/dubbo/common/resource/GlobalResourcesRepository.java    | 6 +++---
 .../src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java | 5 +++--
 .../src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java   | 7 ++++---
 .../main/java/org/apache/dubbo/metadata/MetadataParamsFilter.java  | 3 ++-
 5 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/beans/factory/ScopeBeanFactory.java b/dubbo-common/src/main/java/org/apache/dubbo/common/beans/factory/ScopeBeanFactory.java
index e34ea8a..bd58827 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/beans/factory/ScopeBeanFactory.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/beans/factory/ScopeBeanFactory.java
@@ -28,10 +28,10 @@ import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.rpc.model.ScopeModelAccessor;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Function;
@@ -48,7 +48,7 @@ public class ScopeBeanFactory {
     private ExtensionAccessor extensionAccessor;
     private List<ExtensionPostProcessor> extensionPostProcessors;
     private Map<Class, AtomicInteger> beanNameIdCounterMap = new ConcurrentHashMap<>();
-    private List<BeanInfo> registeredBeanInfos = Collections.synchronizedList(new ArrayList<>());
+    private List<BeanInfo> registeredBeanInfos = new CopyOnWriteArrayList<>();
     private InstantiationStrategy instantiationStrategy;
     private AtomicBoolean destroyed = new AtomicBoolean();
 
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/resource/GlobalResourcesRepository.java b/dubbo-common/src/main/java/org/apache/dubbo/common/resource/GlobalResourcesRepository.java
index 58e9b76..4f74ddc 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/resource/GlobalResourcesRepository.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/resource/GlobalResourcesRepository.java
@@ -21,8 +21,8 @@ import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.utils.NamedThreadFactory;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
@@ -36,8 +36,8 @@ public class GlobalResourcesRepository {
 
     private volatile static GlobalResourcesRepository instance;
     private volatile ExecutorService executorService;
-    private final List<Disposable> oneoffDisposables = Collections.synchronizedList(new ArrayList<>());
-    private static final List<Disposable> globalReusedDisposables = Collections.synchronizedList(new ArrayList<>());
+    private final List<Disposable> oneoffDisposables = new CopyOnWriteArrayList<>();
+    private static final List<Disposable> globalReusedDisposables = new CopyOnWriteArrayList<>();
 
     private GlobalResourcesRepository() {
     }
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
index d6001ba..b8dbf60 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
@@ -34,6 +34,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.atomic.AtomicInteger;
 
 /**
@@ -53,8 +54,8 @@ import java.util.concurrent.atomic.AtomicInteger;
 public class ApplicationModel extends ScopeModel {
     protected static final Logger LOGGER = LoggerFactory.getLogger(ApplicationModel.class);
     public static final String NAME = "ApplicationModel";
-    private final List<ModuleModel> moduleModels = Collections.synchronizedList(new ArrayList<>());
-    private final List<ModuleModel> pubModuleModels = Collections.synchronizedList(new ArrayList<>());
+    private final List<ModuleModel> moduleModels = new CopyOnWriteArrayList<>();
+    private final List<ModuleModel> pubModuleModels = new CopyOnWriteArrayList<>();
     private Environment environment;
     private ConfigManager configManager;
     private ServiceRepository serviceRepository;
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java
index b9f2332..f66873a 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java
@@ -30,6 +30,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.stream.Collectors;
 
@@ -51,11 +52,11 @@ public class FrameworkModel extends ScopeModel {
 
     private volatile ApplicationModel defaultAppModel;
 
-    private static List<FrameworkModel> allInstances = Collections.synchronizedList(new ArrayList<>());
+    private static List<FrameworkModel> allInstances = new CopyOnWriteArrayList<>();
 
-    private List<ApplicationModel> applicationModels = Collections.synchronizedList(new ArrayList<>());
+    private List<ApplicationModel> applicationModels = new CopyOnWriteArrayList<>();
 
-    private List<ApplicationModel> pubApplicationModels = Collections.synchronizedList(new ArrayList<>());
+    private List<ApplicationModel> pubApplicationModels = new CopyOnWriteArrayList<>();
 
     private FrameworkServiceRepository serviceRepository;
 
diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataParamsFilter.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataParamsFilter.java
index 542acb1..33ae7c4 100644
--- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataParamsFilter.java
+++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataParamsFilter.java
@@ -16,9 +16,10 @@
  */
 package org.apache.dubbo.metadata;
 
+import org.apache.dubbo.common.extension.ExtensionScope;
 import org.apache.dubbo.common.extension.SPI;
 
-@SPI
+@SPI(scope = ExtensionScope.MODULE)
 public interface MetadataParamsFilter {
 
    /**