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); }
