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

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

commit 6c062586b4347f0e75a5be246c2278c52544f23b
Merge: 7a774d21a6 08d278f3f5
Author: Albumen Kevin <[email protected]>
AuthorDate: Thu Feb 16 14:16:12 2023 +0800

    Merge branch 'apache-3.1' into apache-3.2
    
    # Conflicts:
    #       
dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
    #       
dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleModel.java
    #       
dubbo-common/src/test/java/org/apache/dubbo/rpc/model/ApplicationModelTest.java

 .../apache/dubbo/common/config/Environment.java    |   2 +-
 .../dubbo/common/config/ModuleEnvironment.java     |   2 +-
 .../apache/dubbo/rpc/model/ApplicationModel.java   | 415 +++++++++++----------
 .../org/apache/dubbo/rpc/model/FrameworkModel.java | 161 ++++----
 .../org/apache/dubbo/rpc/model/ModuleModel.java    | 137 +++----
 .../org/apache/dubbo/rpc/model/ScopeModel.java     |  66 ++--
 .../common/CommonScopeModelInitializerTest.java    |   6 +-
 .../common/config/ConfigurationUtilsTest.java      |   6 +-
 .../dubbo/common/config/EnvironmentTest.java       |   4 +-
 .../common/extension/ExtensionDirectorTest.java    |  24 +-
 .../inject/AdaptiveExtensionInjectorTest.java      |   2 +-
 .../reporter/FrameworkStatusReportServiceTest.java |   4 +-
 .../dubbo/rpc/model/ApplicationModelTest.java      |   8 +-
 .../apache/dubbo/rpc/model/FrameworkModelTest.java |   2 +-
 .../rpc/model/FrameworkServiceRepositoryTest.java  |   6 +-
 .../apache/dubbo/rpc/model/ModuleModelTest.java    |  14 +-
 .../rpc/model/ModuleServiceRepositoryTest.java     |   6 +-
 .../rpc/model/ReflectionServiceDescriptorTest.java |   2 +-
 .../ScopeModelAwareExtensionProcessorTest.java     |   6 +-
 .../org/apache/dubbo/rpc/model/ScopeModelTest.java |   2 +-
 .../apache/dubbo/rpc/model/ScopeModelUtilTest.java |   6 +-
 .../dubbo/rpc/model/ServiceRepositoryTest.java     |   6 +-
 .../config/ConfigScopeModelInitializerTest.java    |   6 +-
 .../apache/dubbo/config/ReferenceConfigTest.java   |   8 +-
 .../dubbo/config/bootstrap/MultiInstanceTest.java  |   2 +-
 .../customize/DubboSpringInitCustomizerTest.java   |   2 +-
 .../dubbo/qos/command/impl/InvokeTelnetTest.java   |   4 +-
 .../apache/dubbo/qos/command/impl/LiveTest.java    |   2 +-
 .../org/apache/dubbo/qos/command/impl/LsTest.java  |   2 +-
 .../apache/dubbo/qos/command/impl/OfflineTest.java |   2 +-
 .../apache/dubbo/qos/command/impl/OnlineTest.java  |   2 +-
 .../qos/command/impl/PublishMetadataTest.java      |   2 +-
 .../qos/command/impl/SerializeCheckStatusTest.java |   1 +
 .../command/impl/SerializeWarnedClassesTest.java   |   1 +
 .../qos/command/util/SerializeCheckUtilsTest.java  |   1 +
 .../metadata/MetadataServiceNameMappingTest.java   |   4 +-
 .../dubbo/DecodeableRpcInvocationTest.java         |   2 +-
 .../rpc/protocol/injvm/InjvmClassLoaderTest.java   |   5 +-
 .../rpc/protocol/injvm/InjvmDeepCopyTest.java      |   3 +-
 .../tri/service/TriBuiltinServiceTest.java         |   4 +-
 40 files changed, 487 insertions(+), 453 deletions(-)

diff --cc 
dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
index 1a10209931,31c11f6aca..00b589402a
--- 
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
@@@ -237,50 -141,52 +140,52 @@@ public class ApplicationModel extends S
  
      @Override
      protected void onDestroy() {
-         // 1. remove from frameworkModel
-         frameworkModel.removeApplication(this);
+         synchronized (instLock) {
+             // 1. remove from frameworkModel
+             frameworkModel.removeApplication(this);
+ 
+             // 2. pre-destroy, set stopping
+             if (deployer != null) {
+                 // destroy registries and unregister services from registries 
first to notify consumers to stop consuming this instance.
+                 deployer.preDestroy();
+             }
  
-         // 2. pre-destroy, set stopping
-         if (deployer != null) {
-             // destroy registries and unregister services from registries 
first to notify consumers to stop consuming this instance.
-             deployer.preDestroy();
-         }
+             // 3. Try to destroy protocols to stop this instance from 
receiving new requests from connections
+             frameworkModel.tryDestroyProtocols();
  
-         // 3. Try to destroy protocols to stop this instance from receiving 
new requests from connections
-         frameworkModel.tryDestroyProtocols();
+             // 4. destroy application resources
 -            for (ModuleModel moduleModel : new ArrayList<>(moduleModels)) {
++            for (ModuleModel moduleModel : moduleModels) {
+                 if (moduleModel != internalModule) {
+                     moduleModel.destroy();
+                 }
+             }
+             // 5. destroy internal module later
+             internalModule.destroy();
  
-         // 4. destroy application resources
-         for (ModuleModel moduleModel : moduleModels) {
-             if (moduleModel != internalModule) {
-                 moduleModel.destroy();
+             // 6. post-destroy, release registry resources
+             if (deployer != null) {
+                 deployer.postDestroy();
              }
-         }
-         // 5. destroy internal module later
-         internalModule.destroy();
  
-         // 6. post-destroy, release registry resources
-         if (deployer != null) {
-             deployer.postDestroy();
-         }
+             // 7. destroy other resources (e.g. ZookeeperTransporter )
+             notifyDestroy();
  
-         // 7. destroy other resources (e.g. ZookeeperTransporter )
-         notifyDestroy();
+             if (environment != null) {
+                 environment.destroy();
+                 environment = null;
+             }
+             if (configManager != null) {
+                 configManager.destroy();
+                 configManager = null;
+             }
+             if (serviceRepository != null) {
+                 serviceRepository.destroy();
+                 serviceRepository = null;
+             }
  
-         if (environment != null) {
-             environment.destroy();
-             environment = null;
-         }
-         if (configManager != null) {
-             configManager.destroy();
-             configManager = null;
+             // 8. destroy framework if none application
+             frameworkModel.tryDestroy();
          }
-         if (serviceRepository != null) {
-             serviceRepository.destroy();
-             serviceRepository = null;
-         }
- 
-         // 8. destroy framework if none application
-         frameworkModel.tryDestroy();
      }
  
      public FrameworkModel getFrameworkModel() {
diff --cc dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleModel.java
index 1af68750f8,c06e3d075d..d11ebc9a0b
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleModel.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleModel.java
@@@ -42,13 -42,12 +42,13 @@@ public class ModuleModel extends ScopeM
      public static final String NAME = "ModuleModel";
  
      private final ApplicationModel applicationModel;
-     private ModuleEnvironment moduleEnvironment;
-     private ModuleServiceRepository serviceRepository;
-     private ModuleConfigManager moduleConfigManager;
-     private ModuleDeployer deployer;
+     private volatile ModuleServiceRepository serviceRepository;
+     private volatile ModuleEnvironment moduleEnvironment;
+     private volatile ModuleConfigManager moduleConfigManager;
+     private volatile ModuleDeployer deployer;
 +    private boolean lifeCycleManagedExternally = false;
  
-     public ModuleModel(ApplicationModel applicationModel) {
+     protected ModuleModel(ApplicationModel applicationModel) {
          this(applicationModel, false);
      }
  

Reply via email to