This is an automated email from the ASF dual-hosted git repository. liujun pushed a commit to branch 3.0-metadata-refactor in repository https://gitbox.apache.org/repos/asf/dubbo.git
commit 084113ad2a0322aee74a68f6d56c99a70a5d3e1f Merge: 1448ebe 8a7c360 Author: ken.lj <[email protected]> AuthorDate: Mon Dec 6 16:47:56 2021 +0800 Merge branch '3.0' into 3.0-metadata-refactor-merged # Conflicts: # dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java # dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java # dubbo-common/src/test/java/org/apache/dubbo/common/status/reporter/MockFrameworkStatusReporter.java # dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java # dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java # dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java # dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ConfigurableMetadataServiceExporter.java # dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapTest.java # dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/servicediscoveryregistry/MultipleRegistryCenterServiceDiscoveryRegistryIntegrationTest.java # dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/single/SingleRegistryCenterDubboProtocolIntegrationTest.java # dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/metadata/MetadataServiceExporterTest.java # dubbo-metadata/dubbo-metadata-report-zookeeper/src/test/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReportTest.java # dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java # dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataUtils.java # dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java # dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/RemoteMetadataServiceImpl.java # dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListenerTest.java # dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceHostPortCustomizerTest.java # dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataUtilsTest.java # dubbo-registry/dubbo-registry-zookeeper/src/test/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscoveryTest.java # dubbo-registry/dubbo-registry-zookeeper/src/test/java/org/apache/dubbo/registry/zookeeper/util/CuratorFrameworkUtilsTest.java # dubbo-test/dubbo-test-spring/src/main/java/org/apache/dubbo/test/spring/SpringXmlConfigTest.java # dubbo-test/dubbo-test-spring/src/main/resources/spring/dubbo-demo.xml .gitignore | 3 + dubbo-cluster/pom.xml | 4 - .../org/apache/dubbo/rpc/cluster/Constants.java | 4 - .../org/apache/dubbo/rpc/cluster/Directory.java | 29 ++ .../java/org/apache/dubbo/rpc/cluster/Router.java | 23 +- .../org/apache/dubbo/rpc/cluster/RouterChain.java | 278 ++++++------ .../rpc/cluster/directory/AbstractDirectory.java | 280 +++++++++++- .../rpc/cluster/directory/StaticDirectory.java | 38 +- .../cluster/filter/DefaultFilterChainBuilder.java | 7 +- .../dubbo/rpc/cluster/router/RouterResult.java | 55 +++ .../rpc/cluster/router/RouterSnapshotNode.java | 117 +++++ ...ditionRouter.java => ConditionStateRouter.java} | 54 ++- ...ctory.java => ConditionStateRouterFactory.java} | 13 +- .../config/{AppRouter.java => AppStateRouter.java} | 4 +- ...uterFactory.java => AppStateRouterFactory.java} | 14 +- ...nableRouter.java => ListenableStateRouter.java} | 39 +- .../router/condition/config/ServiceRouter.java | 2 +- ...Factory.java => ServiceStateRouterFactory.java} | 10 +- ...terFactory.java => FileStateRouterFactory.java} | 18 +- .../cluster/router/mesh/route/MeshRuleRouter.java | 12 +- .../cluster/router/mock/MockInvokersSelector.java | 79 ++-- ...terFactory.java => MockStateRouterFactory.java} | 10 +- .../{ScriptRouter.java => ScriptStateRouter.java} | 36 +- ...rFactory.java => ScriptStateRouterFactory.java} | 10 +- .../cluster/router/state/AbstractStateRouter.java | 61 +-- .../dubbo/rpc/cluster/router/state/BitList.java | 484 +++++++++++++++------ .../router/state/CacheableStateRouterFactory.java | 12 +- .../rpc/cluster/router/state/RouterCache.java | 49 --- .../rpc/cluster/router/state/StateRouter.java | 54 +-- .../cluster/router/state/StateRouterFactory.java | 3 +- .../{AddrCache.java => StateRouterResult.java} | 48 +- .../cluster/router/tag/TagDynamicStateRouter.java | 260 ----------- .../tag/{TagRouter.java => TagStateRouter.java} | 67 +-- ...uterFactory.java => TagStateRouterFactory.java} | 9 +- .../cluster/router/tag/TagStaticStateRouter.java | 142 ------ .../cluster/support/AbstractClusterInvoker.java | 137 ++++-- .../rpc/cluster/support/AvailableCluster.java | 8 +- .../support/wrapper/MockClusterInvoker.java | 2 + .../org.apache.dubbo.rpc.cluster.RouterFactory | 6 - ...bbo.rpc.cluster.router.state.StateRouterFactory | 8 +- .../apache/dubbo/rpc/cluster/RouterChainTest.java | 7 +- .../rpc/cluster/directory/StaticDirectoryTest.java | 25 +- .../loadbalance/ConsistentHashLoadBalanceTest.java | 8 +- .../router/condition/ConditionRouterTest.java | 253 ++++++----- .../cluster/router/file/FileRouterEngineTest.java | 18 +- .../router/mesh/route/MeshRuleRouterTest.java | 19 +- .../router/mock/MockInvokersSelectorTest.java | 11 +- ...tRouterTest.java => ScriptStateRouterTest.java} | 59 +-- .../rpc/cluster/router/state/BitListTest.java | 479 +++++++++++++++++++- .../support/AbstractClusterInvokerTest.java | 11 +- .../support/ConnectivityValidationTest.java | 323 ++++++++++++++ .../support/FailoverClusterInvokerTest.java | 10 +- .../org.apache.dubbo.rpc.cluster.RouterFactory | 1 - ...bbo.rpc.cluster.router.state.StateRouterFactory | 1 + .../apache/dubbo/common/BaseServiceMetadata.java | 4 +- .../src/main/java/org/apache/dubbo/common/URL.java | 112 +++-- .../common/beans/ScopeBeanExtensionInjector.java | 1 + .../common/beans/factory/ScopeBeanFactory.java | 4 +- .../beans/support/InstantiationStrategy.java | 2 +- .../common/config/CompositeConfiguration.java | 4 +- .../apache/dubbo/common/config/Environment.java | 9 +- .../config/OrderedPropertiesConfiguration.java | 10 +- .../dubbo/common/constants/CommonConstants.java | 17 +- .../dubbo/common/deploy/AbstractDeployer.java | 12 +- .../org/apache/dubbo/common/deploy/Deployer.java | 1 + .../dubbo/common/extension/ExtensionDirector.java | 9 +- .../dubbo/common/extension/ExtensionLoader.java | 38 +- .../dubbo/common/extension/LoadingStrategy.java | 4 +- .../extension/inject/SpiExtensionInjector.java | 1 + .../extension/support/ActivateComparator.java | 10 +- .../org/apache/dubbo/common/io/StreamUtils.java | 4 +- .../common/io/UnsafeByteArrayOutputStream.java | 16 +- .../apache/dubbo/common/io/UnsafeStringWriter.java | 4 +- .../dubbo/common/lang/ShutdownHookCallbacks.java | 2 +- .../common/resource/GlobalResourcesRepository.java | 22 +- .../reporter/FrameworkStatusReportService.java | 12 +- .../dubbo/common/threadlocal/InternalRunnable.java | 2 +- .../manager/DefaultExecutorRepository.java | 32 +- .../threadpool/manager/ExecutorRepository.java | 7 + .../threadpool/serial/SerializingExecutor.java | 2 +- .../dubbo/common/timer/HashedWheelTimer.java | 4 +- .../common/url/component/ServiceAddressURL.java | 6 + .../common/url/component/ServiceConfigURL.java | 14 +- .../dubbo/common/url/component/URLAddress.java | 2 +- .../common/utils/ClassLoaderResourceLoader.java | 18 +- .../org/apache/dubbo/common/utils/ConfigUtils.java | 10 +- .../org/apache/dubbo/common/utils/MD5Utils.java | 19 +- .../dubbo/config/AbstractInterfaceConfig.java | 7 + .../apache/dubbo/config/AbstractMethodConfig.java | 4 + .../dubbo/config/AbstractReferenceConfig.java | 8 + .../apache/dubbo/config/AbstractServiceConfig.java | 8 + .../org/apache/dubbo/config/ApplicationConfig.java | 4 + .../apache/dubbo/config/ConfigCenterConfig.java | 5 + .../org/apache/dubbo/config/ConsumerConfig.java | 9 + .../apache/dubbo/config/MetadataReportConfig.java | 10 + .../java/org/apache/dubbo/config/MethodConfig.java | 5 + .../org/apache/dubbo/config/MetricsConfig.java | 6 +- .../java/org/apache/dubbo/config/ModuleConfig.java | 9 + .../org/apache/dubbo/config/MonitorConfig.java | 10 + .../org/apache/dubbo/config/ProtocolConfig.java | 57 +-- .../org/apache/dubbo/config/ProviderConfig.java | 74 +--- .../apache/dubbo/config/ReferenceConfigBase.java | 15 + .../org/apache/dubbo/config/RegistryConfig.java | 18 +- .../org/apache/dubbo/config/ServiceConfigBase.java | 16 +- .../java/org/apache/dubbo/config/SslConfig.java | 8 + .../dubbo/config/annotation/DubboReference.java | 4 +- .../dubbo/config/annotation/DubboService.java | 2 +- .../config/context/AbstractConfigManager.java | 17 +- .../apache/dubbo/config/context/ConfigManager.java | 2 +- .../dubbo/config/context/ModuleConfigManager.java | 126 +++++- .../apache/dubbo/rpc/model/ApplicationModel.java | 5 +- .../org/apache/dubbo/rpc/model/FrameworkModel.java | 62 +-- .../rpc/model/FrameworkServiceRepository.java | 13 +- .../apache/dubbo/rpc/model/MethodDescriptor.java | 3 - .../org/apache/dubbo/rpc/model/ScopeModel.java | 4 + .../model/ScopeModelAwareExtensionProcessor.java | 2 +- .../apache/dubbo/rpc/model/ServiceMetadata.java | 2 +- .../common/CommonScopeModelInitializerTest.java | 62 +++ .../test/java/org/apache/dubbo/common/URLTest.java | 76 +++- .../common/config/CompositeConfigurationTest.java | 21 +- ...rationTest.java => ConfigurationCacheTest.java} | 18 +- .../dubbo/common/config/EnvironmentTest.java | 63 ++- ...ava => OrderedPropertiesConfigurationTest.java} | 5 +- .../common/config/PropertiesConfigurationTest.java | 26 +- .../file/FileSystemDynamicConfigurationTest.java | 5 +- .../common/extension/ExtensionLoaderTest.java | 22 +- .../impl/{Ext5Impl1.java => Ext6Impl1.java} | 4 +- .../impl/{Ext5Impl2.java => Ext6Impl2.java} | 4 +- .../impl/{Ext5Wrapper1.java => Ext6Wrapper1.java} | 4 +- .../impl/{Ext5Wrapper2.java => Ext6Wrapper2.java} | 4 +- .../inject/AdaptiveExtensionInjectorTest.java | 58 +++ .../dubbo/common/io/UnsafeStringWriterTest.java | 4 +- .../resource/GlobalResourcesRepositoryTest.java | 77 ++++ .../reporter/FrameworkStatusReportServiceTest.java | 106 +++++ .../threadlocal/InternalThreadLocalTest.java | 6 + .../dubbo/common/utils/AnnotationUtilsTest.java | 74 ++-- .../utils/ClassLoaderResourceLoaderTest.java | 58 +++ .../apache/dubbo/common/utils/ConfigUtilsTest.java | 10 + .../apache/dubbo/common/utils/MD5UtilsTest.java | 95 ++++ .../context/ConfigConfigurationAdapterTest.java} | 25 +- .../dubbo/config/context/ConfigManagerTest.java | 104 ++++- .../dubbo/rpc/model/ApplicationModelTest.java | 146 +++++++ .../apache/dubbo/rpc/model/FrameworkModelTest.java | 106 +++++ .../rpc/model/FrameworkServiceRepositoryTest.java | 113 +++++ .../apache/dubbo/rpc/model/ModuleModelTest.java | 89 ++++ .../rpc/model/ModuleServiceRepositoryTest.java | 113 +++++ .../ScopeModelAwareExtensionProcessorTest.java | 78 ++++ .../org/apache/dubbo/rpc/model/ScopeModelTest.java | 9 +- .../apache/dubbo/rpc/model/ScopeModelUtilTest.java | 114 +++++ .../dubbo/rpc/model/ServiceRepositoryTest.java | 90 ++++ .../support/DemoService.java} | 8 +- .../support/DemoServiceImpl.java} | 11 +- .../dubbo/rpc/support/MockScopeModelAware.java | 72 +++ .../support/MockScopeModelDestroyListener.java} | 26 +- ...che.dubbo.common.extension.ext6_wrap.WrappedExt | 8 +- ....common.status.reporter.FrameworkStatusReporter | 1 + .../src/test/resources/dubbo-migration.yaml | 6 +- .../main/java/com/alibaba/dubbo/common/URL.java | 5 +- dubbo-config/dubbo-config-api/pom.xml | 12 - .../org/apache/dubbo/config/ReferenceConfig.java | 21 +- .../org/apache/dubbo/config/ServiceConfig.java | 28 +- .../config/deploy/DefaultApplicationDeployer.java | 177 +++++--- .../dubbo/config/deploy/DefaultModuleDeployer.java | 63 ++- .../invoker/DelegateProviderMetaDataInvoker.java | 3 +- .../dubbo/config/utils/SimpleReferenceCache.java | 13 +- .../dubbo/config/AbstractReferenceConfigTest.java | 19 +- .../dubbo/config/ConfigCenterConfigTest.java | 13 +- .../config/ConfigScopeModelInitializerTest.java} | 37 +- .../apache/dubbo/config/ReferenceConfigTest.java | 19 +- .../apache/dubbo/config/RegistryConfigTest.java | 7 +- .../dubbo/config/bootstrap/DubboBootstrapTest.java | 30 +- .../bootstrap/DubboServiceConsumerBootstrap.java | 5 +- .../bootstrap/DubboServiceProviderBootstrap.java | 7 +- .../DubboServiceProviderMinimumBootstrap.java | 3 +- .../dubbo/config/bootstrap/MultiInstanceTest.java | 44 +- .../ZookeeperDubboServiceConsumerBootstrap.java | 3 +- .../DubboInterfaceConsumerBootstrap.java | 3 +- .../AbstractRegistryCenterExporterListener.java | 2 +- .../AbstractRegistryCenterServiceListener.java | 2 +- .../dubbo/{ => config}/integration/Constants.java | 2 +- .../{ => config}/integration/IntegrationTest.java | 2 +- .../integration/multiple/AbstractStorage.java | 2 +- .../{ => config}/integration/multiple/Storage.java | 2 +- ...gistryCenterExportMetadataExporterListener.java | 4 +- ...egistryCenterExportMetadataIntegrationTest.java | 25 +- ...ultipleRegistryCenterExportMetadataService.java | 2 +- ...pleRegistryCenterExportMetadataServiceImpl.java | 2 +- ...egistryCenterExportMetadataServiceListener.java | 4 +- ...gistryCenterExportProviderExporterListener.java | 4 +- ...MultipleRegistryCenterExportProviderFilter.java | 2 +- ...egistryCenterExportProviderIntegrationTest.java | 27 +- ...nterExportProviderRegistryProtocolListener.java | 2 +- ...ultipleRegistryCenterExportProviderService.java | 2 +- ...pleRegistryCenterExportProviderServiceImpl.java | 2 +- ...egistryCenterExportProviderServiceListener.java | 4 +- ...ultipleRegistryCenterInjvmExporterListener.java | 4 +- .../injvm/MultipleRegistryCenterInjvmFilter.java | 2 +- ...MultipleRegistryCenterInjvmIntegrationTest.java | 29 +- .../injvm/MultipleRegistryCenterInjvmService.java | 2 +- .../MultipleRegistryCenterInjvmServiceImpl.java | 2 +- ...MultipleRegistryCenterInjvmServiceListener.java | 4 +- .../integration/multiple/package-info.java | 2 +- ...terServiceDiscoveryRegistryIntegrationTest.java | 41 +- ...ceDiscoveryRegistryRegistryServiceListener.java | 4 +- ...istryCenterServiceDiscoveryRegistryService.java | 2 +- ...yCenterServiceDiscoveryRegistryServiceImpl.java | 2 +- .../ServiceDiscoveryRegistryInfoWrapper.java | 2 +- .../ServiceDiscoveryRegistryStorage.java | 4 +- ...RegistryCenterDubboProtocolIntegrationTest.java | 22 +- ...ingleRegistryCenterExportedServiceListener.java | 4 +- .../SingleRegistryCenterIntegrationService.java | 2 +- ...SingleRegistryCenterIntegrationServiceImpl.java | 2 +- ...gistryCenterExportMetadataExporterListener.java | 4 +- ...egistryCenterExportMetadataIntegrationTest.java | 23 +- .../SingleRegistryCenterExportMetadataService.java | 2 +- ...gleRegistryCenterExportMetadataServiceImpl.java | 2 +- ...egistryCenterExportMetadataServiceListener.java | 4 +- ...gistryCenterExportProviderExporterListener.java | 4 +- .../SingleRegistryCenterExportProviderFilter.java | 2 +- ...egistryCenterExportProviderIntegrationTest.java | 24 +- ...nterExportProviderRegistryProtocolListener.java | 4 +- .../SingleRegistryCenterExportProviderService.java | 2 +- ...gleRegistryCenterExportProviderServiceImpl.java | 2 +- ...egistryCenterExportProviderServiceListener.java | 4 +- .../SingleRegistryCenterInjvmExporterListener.java | 4 +- .../injvm/SingleRegistryCenterInjvmFilter.java | 2 +- .../SingleRegistryCenterInjvmIntegrationTest.java | 23 +- .../injvm/SingleRegistryCenterInjvmService.java | 2 +- .../SingleRegistryCenterInjvmServiceImpl.java | 2 +- .../SingleRegistryCenterInjvmServiceListener.java | 4 +- .../integration/single/package-info.java | 2 +- .../metadata/MetadataServiceExporterTest.java | 252 +++++++++++ .../registrycenter/AbstractRegistryCenter.java | 107 ----- .../dubbo/registrycenter/RegistryCenter.java | 70 --- .../ZookeeperMultipleRegistryCenter.java | 45 -- .../registrycenter/ZookeeperRegistryCenter.java | 142 ------ .../org.apache.dubbo.config.ServiceListener | 14 +- ...g.apache.dubbo.registry.RegistryServiceListener | 2 +- ...o.registry.integration.RegistryProtocolListener | 4 +- .../services/org.apache.dubbo.rpc.ExporterListener | 12 +- .../META-INF/services/org.apache.dubbo.rpc.Filter | 8 +- dubbo-config/dubbo-config-spring/pom.xml | 22 - .../dubbo/config/spring/ConfigCenterBean.java | 9 + .../apache/dubbo/config/spring/ServiceBean.java | 11 + .../config/spring/SpringScopeModelInitializer.java | 3 +- .../annotation/ServiceAnnotationPostProcessor.java | 10 +- .../spring/context/DubboConfigBeanInitializer.java | 12 +- .../config/spring/reference/ReferenceCreator.java | 139 ++---- .../org/apache/dubbo/config/spring/ConfigTest.java | 15 - .../dubbo/config/spring/JavaConfigBeanTest.java | 19 +- .../annotation/MethodConfigCallbackTest.java | 9 +- .../factory/annotation/ReferenceCreatorTest.java | 40 +- .../XmlReferenceBeanConditionalTest.java | 7 - ...nfigAnnotationReferenceBeanConditionalTest.java | 7 - .../JavaConfigRawReferenceBeanConditionalTest.java | 7 - .../JavaConfigReferenceBeanConditionalTest4.java | 7 - .../configprops/SpringBootConfigPropsTest.java | 64 ++- .../SpringBootMultipleConfigPropsTest.java | 17 +- .../importxml/SpringBootImportDubboXmlTest.java | 7 - .../annotation/DubboConfigConfigurationTest.java | 24 +- .../context/annotation/EnableDubboConfigTest.java | 7 - .../customize/DubboSpringInitCustomizerTest.java | 11 +- .../spring/issues/issue6000/Issue6000Test.java | 7 - .../spring/issues/issue6252/Issue6252Test.java | 7 - .../spring/issues/issue7003/Issue7003Test.java | 7 - .../issue9172/MultipleConsumerAndProviderTest.java | 105 +++++ .../issues/issue9207/ConfigCenterBeanTest.java | 108 +++++ .../consumer/PropertyConfigurerTest.java | 7 - .../propertyconfigurer/consumer/app.properties | 2 +- .../propertyconfigurer/consumer/dubbo-consumer.xml | 2 +- .../consumer2/PropertySourcesConfigurerTest.java | 7 - .../propertyconfigurer/consumer2/app.properties | 2 +- .../consumer2/dubbo-consumer.xml | 2 +- .../consumer3/PropertySourcesInJavaConfigTest.java | 16 - .../propertyconfigurer/consumer3/app.properties | 2 +- .../consumer3/dubbo-consumer.xml | 2 +- .../propertyconfigurer/provider/app.properties | 6 +- .../reference/DubboConfigBeanInitializerTest.java | 8 +- .../config/spring/reference/ReferenceKeyTest.java | 18 - .../javaconfig/JavaConfigReferenceBeanTest.java | 19 - .../reference/javaconfig/consumer.properties | 2 +- .../spring/reference/localcall/LocalCallTest.java | 8 - .../spring/reference/localcall/LocalCallTest2.java | 7 - .../reference/localcall/local-call-provider.xml | 2 +- .../LocalCallMultipleReferenceAnnotationsTest.java | 12 - .../localcallam/local-call-config.properties | 2 +- .../registrycenter/AbstractRegistryCenter.java | 107 ----- .../spring/registrycenter/RegistryCenter.java | 75 ---- .../ZookeeperMultipleRegistryCenter.java | 43 -- .../registrycenter/ZookeeperRegistryCenter.java | 147 ------- .../ZookeeperSingleRegistryCenter.java | 44 -- .../config/spring/schema/GenericServiceTest.java | 7 - .../schema/GenericServiceWithoutInterfaceTest.java | 7 - .../META-INF/issues/issue6000/config.properties | 2 +- .../META-INF/issues/issue6252/config.properties | 4 +- .../META-INF/issues/issue7003/config.properties | 2 +- .../META-INF/issues/issue9172/consumer.properties | 30 ++ .../META-INF/issues/issue9172/provider.properties | 24 + .../dubbo-properties-in-configcenter.properties | 6 +- .../zookeeper-dubbb-consumer.properties | 2 +- .../zookeeper-dubbb-provider.properties | 2 +- .../zookeeper-dubbo-consumer.xml | 4 +- .../dubbo-generic-consumer-without-interface.xml | 2 +- .../META-INF/spring/dubbo-generic-consumer.xml | 2 +- .../support/apollo/ApolloDynamicConfiguration.java | 66 +-- .../support/nacos/NacosDynamicConfiguration.java | 4 +- .../dubbo-configcenter-zookeeper/pom.xml | 5 - .../ZookeeperDynamicConfigurationTest.java | 98 ++--- .../resources/spring/dubbo-consumer.properties | 1 + .../resources/spring/dubbo-provider.properties | 2 +- .../apache/dubbo/demo/consumer/Application.java | 13 +- .../apache/dubbo/demo/provider/Application.java | 3 + .../dubbo/demo/consumer/GenericApplication.java | 2 + .../dubbo/demo/graalvm/consumer/Application.java | 17 +- .../dubbo/demo/graalvm/provider/Application.java | 15 +- .../dubbo-demo-spring-boot-consumer}/pom.xml | 90 ++-- .../demo/consumer/ConsumerApplication.java | 47 ++ .../src/main/resources/application.yml | 29 ++ .../src/main/resources/log4j.properties | 0 .../dubbo-demo-spring-boot-interface}/pom.xml | 20 +- .../apache/dubbo/springboot/demo/DemoService.java | 13 +- .../dubbo-demo-spring-boot-provider}/pom.xml | 91 ++-- .../springboot/demo/provider/DemoServiceImpl.java | 21 +- .../demo/provider/ProviderApplication.java} | 20 +- .../src/main/resources/application.yml | 29 ++ .../src/main/resources/log4j.properties | 0 .../dubbo-demo-spring-boot}/pom.xml | 28 +- .../apache/dubbo/demo/consumer/ApiConsumer.java | 12 +- .../dubbo/demo/consumer/ApiWrapperConsumer.java | 9 +- .../apache/dubbo/demo/provider/ApiProvider.java | 10 +- .../dubbo/demo/provider/ApiWrapperProvider.java | 10 +- .../src/main/resources/spring/dubbo-consumer.xml | 4 + .../demo/provider/chain/ChainServiceImpl.java | 33 -- .../src/main/resources/dubbo.properties | 1 - .../main/resources/spring/dubbo-provider-chain.xml | 35 -- dubbo-demo/pom.xml | 1 + dubbo-dependencies-bom/pom.xml | 20 +- dubbo-distribution/dubbo-all/pom.xml | 4 - dubbo-metadata/dubbo-metadata-api/pom.xml | 6 - .../org/apache/dubbo/metadata/MetadataInfo.java | 4 + .../apache/dubbo/metadata/RevisionResolver.java | 4 +- .../dubbo/metadata/rest/SpringRestService.java | 10 +- .../dubbo/metadata/rest/SpringRestService.java | 10 +- .../metadata/store/nacos/NacosMetadataReport.java | 14 +- dubbo-metadata/dubbo-metadata-report-redis/pom.xml | 5 - .../dubbo-metadata-report-zookeeper/pom.xml | 5 - .../zookeeper/ZookeeperMetadataReportTest.java | 21 +- .../java/org/apache/dubbo/monitor/Constants.java | 36 +- .../org/apache/dubbo/monitor/MonitorService.java | 38 -- .../dubbo/monitor/support/MonitorFilter.java | 43 +- .../dubbo/monitor/support/MonitorFilterTest.java | 39 +- .../apache/dubbo/monitor/dubbo/DubboMonitor.java | 141 +++--- .../apache/dubbo/monitor/dubbo/MetricsFilter.java | 6 +- .../org/apache/dubbo/monitor/dubbo/Statistics.java | 23 +- .../apache/dubbo/monitor/dubbo/StatisticsItem.java | 132 ++++++ .../dubbo/monitor/dubbo/DubboMonitorTest.java | 106 +++-- .../dubbo/monitor/dubbo/MetricsFilterTest.java | 8 +- .../apache/dubbo/monitor/dubbo/StatisticsTest.java | 54 ++- .../META-INF/native-image/reflect-config.json | 8 +- .../router/state/StateRouterFactory$Adaptive.java | 6 +- .../dubbo/qos/command/CommandContextFactory.java | 6 +- .../qos/command/decoder/HttpCommandDecoder.java | 6 +- .../apache/dubbo/qos/command/impl/BaseOffline.java | 5 +- .../dubbo/qos/command/impl/ChangeTelnet.java | 3 +- .../apache/dubbo/qos/command/impl/CountTelnet.java | 4 +- .../org/apache/dubbo/qos/command/impl/Help.java | 14 +- .../dubbo/qos/command/impl/InvokeTelnet.java | 13 +- .../org/apache/dubbo/qos/command/impl/Live.java | 23 +- .../apache/dubbo/qos/command/impl/OfflineApp.java | 3 - .../org/apache/dubbo/qos/command/impl/Online.java | 12 +- .../apache/dubbo/qos/command/impl/OnlineApp.java | 2 +- .../apache/dubbo/qos/command/impl/PortTelnet.java | 2 +- .../apache/dubbo/qos/command/impl/PwdTelnet.java | 3 +- .../dubbo/qos/command/impl/SelectTelnet.java | 3 +- .../dubbo/qos/command/util/CommandHelper.java | 2 +- .../dubbo/qos/legacy/ChangeTelnetHandler.java | 3 +- .../dubbo/qos/legacy/TraceTelnetHandler.java | 6 +- .../org/apache/dubbo/qos/probe/LivenessProbe.java | 2 +- .../org/apache/dubbo/qos/probe/ReadinessProbe.java | 2 +- .../org/apache/dubbo/qos/probe/StartupProbe.java | 2 +- .../qos/server/handler/HttpProcessHandler.java | 4 +- .../command/decoder/HttpCommandDecoderTest.java | 10 +- .../dubbo/qos/command/impl/InvokeTelnetTest.java | 10 +- .../apache/dubbo/qos/command/impl/LiveTest.java | 52 +++ .../org/apache/dubbo/qos/command/impl/LsTest.java | 177 ++++---- .../dubbo/qos/command/impl/MockLivenessProbe.java | 24 +- .../apache/dubbo/qos/command/impl/OfflineTest.java | 170 +++++--- .../apache/dubbo/qos/command/impl/OnlineTest.java | 162 ++++--- .../qos/command/impl/PublishMetadataTest.java | 78 ++++ .../apache/dubbo/qos/command/impl/ReadyTest.java | 78 ++++ .../apache/dubbo/qos/command/impl/StartupTest.java | 75 ++++ .../dubbo/qos/legacy/service/DemoServiceImpl.java | 4 +- .../qos/server/handler/HttpProcessHandlerTest.java | 16 +- .../org.apache.dubbo.qos.probe.LivenessProbe | 1 + .../dubbo/registry/ListenerRegistryWrapper.java | 4 +- .../registry/client/DefaultServiceInstance.java | 76 +++- .../dubbo/registry/client/InstanceAddressURL.java | 6 +- .../client/ServiceDiscoveryRegistryDirectory.java | 47 +- .../dubbo/registry/client/ServiceInstance.java | 10 +- .../listener/ServiceInstancesChangedListener.java | 7 +- .../registry/client/metadata/MetadataUtils.java | 4 +- .../StandardMetadataServiceURLBuilder.java | 10 +- .../DefaultMigrationAddressComparator.java | 20 +- .../client/migration/MigrationInvoker.java | 2 +- .../integration/AbstractConfiguratorListener.java | 27 +- .../registry/integration/DynamicDirectory.java | 30 +- .../registry/integration/RegistryDirectory.java | 89 ++-- .../support/CacheableFailbackRegistry.java | 2 +- .../client/DefaultServiceInstanceTest.java | 2 +- .../client/metadata/MetadataUtilsTest.java | 31 +- .../StandardMetadataServiceURLBuilderTest.java | 9 +- .../registry/support/FailbackRegistryTest.java | 38 +- dubbo-registry/dubbo-registry-multiple/pom.xml | 5 - .../multiple/MultipleRegistry2S2RTest.java | 61 +-- .../apache/dubbo/registry/nacos/NacosRegistry.java | 45 +- dubbo-registry/dubbo-registry-zookeeper/pom.xml | 5 - .../registry/zookeeper/ZookeeperRegistryTest.java | 24 +- .../zookeeper/ZookeeperServiceDiscoveryTest.java | 14 +- .../zookeeper/util/CuratorFrameworkUtilsTest.java | 16 +- .../org/apache/dubbo/remoting/api/SslContexts.java | 50 ++- .../exchange/PortUnificationExchanger.java | 5 +- .../remoting/exchange/codec/ExchangeCodec.java | 2 - .../telnet/support/command/ClearTelnetHandler.java | 3 +- .../telnet/support/command/ExitTelnetHandler.java | 2 +- .../telnet/support/command/HelpTelnetHandler.java | 66 +-- .../dubbo/remoting/transport/AbstractClient.java | 28 +- .../dubbo/remoting/http/jetty/JettyHttpServer.java | 9 +- .../remoting/http/jetty/JettyLoggerAdapter.java | 157 +++++++ .../http/jetty/JettyLoggerAdapterTest.java | 127 ++++++ .../src/test/resources/log4j.xml | 41 ++ .../dubbo-remoting-zookeeper-curator5/pom.xml | 6 - .../curator5/Curator5ZookeeperClient.java | 12 +- .../curator5/Curator5ZookeeperClientTest.java | 27 +- .../curator5/Curator5ZookeeperTransporterTest.java | 21 +- .../support/AbstractZookeeperTransporterTest.java | 134 ++---- dubbo-remoting/dubbo-remoting-zookeeper/pom.xml | 5 - .../zookeeper/curator/CuratorZookeeperClient.java | 12 +- .../curator/CuratorZookeeperClientTest.java | 27 +- .../curator/CuratorZookeeperTransporterTest.java | 22 +- .../support/AbstractZookeeperTransporterTest.java | 137 +++--- .../org/apache/dubbo/rpc/RpcContextAttachment.java | 4 +- .../java/org/apache/dubbo/rpc/RpcInvocation.java | 20 +- .../org/apache/dubbo/rpc/filter/ContextFilter.java | 2 +- .../apache/dubbo/rpc/CancellationContextTest.java | 61 +++ .../dubbo/rpc/protocol/grpc/GrpcOptionsUtils.java | 48 +- .../dubbo/rpc/protocol/grpc/GrpcProtocolTest.java | 8 +- .../dubbo/rpc/protocol/injvm/InjvmInvoker.java | 6 +- .../rpc/protocol/tri/AbstractClientStream.java | 6 +- .../dubbo/rpc/protocol/tri/AbstractStream.java | 5 +- .../tri/ClientOutboundTransportObserver.java | 36 +- .../apache/dubbo/rpc/protocol/tri/Compressor.java | 3 + .../apache/dubbo/rpc/protocol/tri/GrpcStatus.java | 2 +- .../protocol/tri/OutboundTransportObserver.java | 16 +- .../tri/ServerOutboundTransportObserver.java | 51 +-- .../rpc/protocol/tri/SingleProtobufUtils.java | 17 +- .../dubbo/rpc/protocol/tri/TransportState.java | 3 +- .../protocol/tri/TripleClientRequestHandler.java | 5 +- .../protocol/tri/TripleCommandOutBoundHandler.java | 29 +- .../dubbo/rpc/protocol/tri/TripleHeaderEnum.java | 3 - .../tri/TripleHttp2FrameServerHandler.java | 25 +- .../rpc/protocol/tri/TripleHttp2Protocol.java | 1 + .../dubbo/rpc/protocol/tri/TripleProtocol.java | 3 - .../dubbo/rpc/protocol/tri/UnaryClientStream.java | 2 +- .../dubbo/rpc/protocol/tri/UnaryServerStream.java | 2 +- .../apache/dubbo/rpc/protocol/tri/WriteQueue.java | 87 ++++ .../protocol/tri/command/CancelQueueCommand.java | 34 +- .../rpc/protocol/tri/command/DataQueueCommand.java | 99 +++++ .../protocol/tri/command/FlushQueueCommand.java | 15 +- .../protocol/tri/command/HeaderQueueCommand.java | 81 ++++ .../rpc/protocol/tri/command/QueuedCommand.java | 69 +++ .../protocol/tri/command/TextDataQueueCommand.java | 46 ++ .../protocol/tri/service/TriBuiltinService.java | 2 +- .../rpc/protocol/tri/service/TriHealthImpl.java | 2 +- .../dubbo/rpc/protocol/tri/AbstractStreamTest.java | 118 +++++ .../dubbo/rpc/protocol/tri/ClientStreamTest.java | 367 ++++++++++++++++ .../rpc/protocol/tri/GrpcDataDecoderTest.java | 101 +++++ .../dubbo/rpc/protocol/tri/ServerStreamTest.java | 291 +++++++++++++ .../rpc/protocol/tri/SingleProtobufUtilsTest.java | 77 ++++ .../dubbo/rpc/protocol/tri/TransportStateTest.java | 2 +- .../tri/TripleHttp2ClientResponseHandlerTest.java | 107 +++++ .../dubbo/rpc/protocol/tri/TripleProtocolTest.java | 52 ++- .../dubbo/rpc/protocol/tri/WriteQueueTest.java | 113 +++++ .../tri/service/TriBuiltinServiceTest.java | 43 ++ .../protocol/tri/service/TriHealthImplTest.java | 129 ++++++ .../dubbo/rpc/protocol/tri/support/IGreeter.java | 4 + .../rpc/protocol/tri/support/IGreeterImpl.java | 15 +- .../tri/support/MockAbstractStreamImpl.java | 34 +- .../{IGreeterImpl.java => MockStreamObserver.java} | 44 +- .../dubbo/DefaultHessian2FactoryInitializer.java | 2 +- .../dubbo/WhitelistHessian2FactoryInitializer.java | 2 +- .../DubboListenerAutoConfiguration.java | 7 - .../src/main/resources/META-INF/spring.factories | 2 + dubbo-test/dubbo-test-check/pom.xml | 37 +- ...bstractRegistryCenterTestExecutionListener.java | 100 +++++ .../dubbo/test/check/RegistryCenterFinished.java | 28 +- .../dubbo/test/check/RegistryCenterStarted.java | 50 +++ .../test/check/exception/DubboTestException.java | 43 ++ .../dubbo/test/check/registrycenter/Config.java | 67 +++ .../dubbo/test/check/registrycenter/Context.java | 6 +- .../registrycenter/GlobalRegistryCenter.java} | 35 +- .../test/check/registrycenter/Initializer.java | 14 +- .../dubbo/test/check/registrycenter/Processor.java | 22 +- .../test/check/registrycenter/RegistryCenter.java | 31 +- .../registrycenter/ZookeeperRegistryCenter.java | 239 ++++++++++ .../registrycenter/config/ZookeeperConfig.java | 175 ++++++++ .../config/ZookeeperRegistryCenterConfig.java | 84 ++++ .../registrycenter/context/ZookeeperContext.java | 92 ++++ .../context/ZookeeperWindowsContext.java | 110 +++++ .../initializer/ConfigZookeeperInitializer.java | 143 ++++++ .../initializer/DownloadZookeeperInitializer.java | 177 ++++++++ .../initializer/UnpackZookeeperInitializer.java | 114 +++++ .../initializer/ZookeeperInitializer.java | 51 +++ .../processor/FindPidWindowsProcessor.java | 119 +++++ .../processor/KillProcessWindowsProcessor.java | 61 +++ .../processor/ResetZookeeperProcessor.java | 55 +++ .../processor/StartZookeeperUnixProcessor.java | 68 +++ .../processor/StartZookeeperWindowsProcessor.java | 81 ++++ .../processor/StopZookeeperUnixProcessor.java | 66 +++ .../processor/StopZookeeperWindowsProcessor.java | 52 +++ .../processor/ZookeeperUnixProcessor.java | 109 +++++ .../processor/ZookeeperWindowsProcessor.java | 41 ++ ...g.junit.platform.launcher.TestExecutionListener | 4 + dubbo-test/dubbo-test-common/pom.xml | 12 - .../dubbo/test/common/EmbeddedZooKeeper.java | 248 ----------- .../apache/dubbo/test/common/ZooKeeperServer.java | 57 --- .../registrycenter/AbstractRegistryCenter.java | 107 ----- .../test/common/registrycenter/RegistryCenter.java | 70 --- .../ZookeeperMultipleRegistryCenter.java | 43 -- .../registrycenter/ZookeeperRegistryCenter.java | 142 ------ .../test/spring/SpringAnnotationBeanTest.java | 7 - .../test/spring/SpringJavaConfigBeanTest.java | 10 +- .../dubbo/test/spring/SpringXmlConfigTest.java | 6 - .../src/main/resources/demo-app.properties | 6 +- .../src/main/resources/spring/dubbo-demo.xml | 6 +- 534 files changed, 12634 insertions(+), 5970 deletions(-) diff --cc dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java index d4e4774,887591b..154a993 --- 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 @@@ -18,10 -18,11 +18,11 @@@ package org.apache.dubbo.common.config import org.apache.dubbo.common.logger.Logger; 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. diff --cc dubbo-common/src/main/java/org/apache/dubbo/common/deploy/AbstractDeployer.java index e01b46ac,ba53201..704f0ea --- a/dubbo-common/src/main/java/org/apache/dubbo/common/deploy/AbstractDeployer.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/deploy/AbstractDeployer.java @@@ -37,9 -37,11 +37,11 @@@ public abstract class AbstractDeployer< private volatile DeployState state = PENDING; + private volatile Throwable lastError; + protected AtomicBoolean initialized = new AtomicBoolean(false); - private List<DeployListener<E>> listeners = new ArrayList<>(); + protected List<DeployListener<E>> listeners = new ArrayList<>(); private E scopeModel; diff --cc dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java index 4a1a8df,0a07fc3..880fce3 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java @@@ -739,12 -727,10 +748,11 @@@ public class ServiceConfig<T> extends S * @param name * @return */ - private Integer findConfigedPorts(ProtocolConfig protocolConfig, - String name, - Map<String, String> map) { + private static synchronized Integer findConfiguredPort(ProtocolConfig protocolConfig, + ProviderConfig provider, + ExtensionLoader<Protocol> extensionLoader, - String name, - Map<String, String> map) { - Integer portToBind = null; ++ String name,Map<String, String> map) { + Integer portToBind; // parse bind port from environment String port = getValueFromConfig(protocolConfig, DUBBO_PORT_TO_BIND); @@@ -769,20 -755,20 +777,20 @@@ } } - // registry port, not used as binding port by default + // save bind port, used as url's key later + map.put(BIND_PORT_KEY, String.valueOf(portToBind)); + + // registry port, not used as bind port by default String portToRegistryStr = getValueFromConfig(protocolConfig, DUBBO_PORT_TO_REGISTRY); Integer portToRegistry = parsePort(portToRegistryStr); - if (portToRegistry != null) { - portToBind = portToRegistry; + if (portToRegistry == null) { + portToRegistry = portToBind; } - // save binding port, will be used as key in url later - map.put(BIND_PORT_KEY, String.valueOf(portToBind)); - - return portToBind; + return portToRegistry; } - private Integer parsePort(String configPort) { + private static Integer parsePort(String configPort) { Integer port = null; if (configPort != null && configPort.length() > 0) { try { diff --cc dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java index 7645b6c,3688d67..b8ffa6f --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java @@@ -548,29 -581,30 +553,30 @@@ public class DefaultApplicationDeploye startModules(); // prepare application instance - prepareApplicationInstance(); +// prepareApplicationInstance(); - executorRepository.getSharedExecutor().submit(() -> { - try { - while (isStarting()) { - // notify when any module state changed - synchronized (stateLock) { - try { - stateLock.wait(500); - } catch (InterruptedException e) { - // ignore - } - } - - // if has new module, do start again - if (hasPendingModule()) { - startModules(); - } - } - } catch (Exception e) { - logger.warn("waiting for application startup occurred an exception", e); - } - }); + // Ignore checking new module after start + // executorRepository.getSharedExecutor().submit(() -> { + // try { + // while (isStarting()) { + // // notify when any module state changed + // synchronized (stateLock) { + // try { + // stateLock.wait(500); + // } catch (InterruptedException e) { + // // ignore + // } + // } + // + // // if has new module, do start again + // if (hasPendingModule()) { + // startModules(); + // } + // } + // } catch (Throwable e) { + // onFailed(getIdentifier() + " check start occurred an exception", e); + // } + // }); } private void startModules() { @@@ -910,15 -1035,12 +938,12 @@@ } // refresh metadata try { - if (serviceInstance != null) { - ServiceInstanceMetadataUtils.refreshMetadataAndInstance(serviceInstance); + if (registered) { + ServiceInstanceMetadataUtils.refreshMetadataAndInstance(applicationModel); } } catch (Exception e) { - logger.error("refresh metadata failed: " + e.getMessage(), e); + logger.error("refresh meta and instance failed: " + e.getMessage(), e); } - // shutdown export/refer executor after started - executorRepository.shutdownServiceExportExecutor(); - executorRepository.shutdownServiceReferExecutor(); } finally { // complete future completeStartFuture(true); diff --cc dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java index de27724,173b343..30d2892 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultModuleDeployer.java @@@ -127,41 -127,50 +127,50 @@@ public class DefaultModuleDeployer exte throw new IllegalStateException(getIdentifier() + " is stopping or stopped, can not start again"); } - if (isStarting() || isStarted()) { - return startFuture; - } + try { + if (isStarting() || isStarted()) { + return startFuture; + } - onModuleStarting(); + onModuleStarting(); - // initialize - applicationDeployer.initialize(); - initialize(); + // initialize + applicationDeployer.initialize(); + initialize(); - // export services - exportServices(); + // export services + exportServices(); - // prepare application instance - // exclude internal module to avoid wait itself - if (moduleModel != moduleModel.getApplicationModel().getInternalModule()) { - applicationDeployer.prepareApplicationInstance(); - } + // prepare application instance + // exclude internal module to avoid wait itself + if (moduleModel != moduleModel.getApplicationModel().getInternalModule()) { + applicationDeployer.prepareInternalModule(); + } - // refer services - referServices(); - - executorRepository.getSharedExecutor().submit(() -> { - try { - // wait for export finish - waitExportFinish(); - // wait for refer finish - waitReferFinish(); - } catch (Throwable e) { - logger.warn("wait for export/refer services occurred an exception", e); - } finally { + // refer services + referServices(); + + // if no async export/refer services, just set started + if (asyncExportingFutures.isEmpty() && asyncReferringFutures.isEmpty()) { onModuleStarted(); + } else { + executorRepository.getSharedExecutor().submit(() -> { + try { + // wait for export finish + waitExportFinish(); + // wait for refer finish + waitReferFinish(); + } catch (Throwable e) { + logger.warn("wait for export/refer services occurred an exception", e); + } finally { + onModuleStarted(); + } + }); } - }); - + } catch (Throwable e) { + onModuleFailed(getIdentifier() + " start failed: " + e.toString(), e); + throw e; + } return startFuture; } diff --cc dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapTest.java index e989cc8,15707bd..201991f --- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapTest.java +++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapTest.java @@@ -288,7 -275,7 +274,7 @@@ public class DubboBootstrapTest .service(service) .start(); -- assertMetadataService(bootstrap, availablePort, true); ++ assertMetadataService(bootstrap, availablePort, false); } @Test diff --cc dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/servicediscoveryregistry/MultipleRegistryCenterServiceDiscoveryRegistryRegistryServiceListener.java index 50ae00f,519f75a..f84a9b8 --- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/servicediscoveryregistry/MultipleRegistryCenterServiceDiscoveryRegistryRegistryServiceListener.java +++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/servicediscoveryregistry/MultipleRegistryCenterServiceDiscoveryRegistryRegistryServiceListener.java @@@ -21,8 -21,10 +21,8 @@@ import org.apache.dubbo.common.extensio import org.apache.dubbo.registry.Registry; import org.apache.dubbo.registry.RegistryServiceListener; import org.apache.dubbo.registry.client.ServiceDiscoveryRegistry; -import org.apache.dubbo.registry.client.metadata.store.InMemoryWritableMetadataService; - import static org.apache.dubbo.integration.Constants.MULTIPLE_CONFIG_CENTER_SERVICE_DISCOVERY_REGISTRY; + import static org.apache.dubbo.config.integration.Constants.MULTIPLE_CONFIG_CENTER_SERVICE_DISCOVERY_REGISTRY; @Activate(value = MULTIPLE_CONFIG_CENTER_SERVICE_DISCOVERY_REGISTRY) diff --cc dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/servicediscoveryregistry/ServiceDiscoveryRegistryInfoWrapper.java index f513003,a5f35f8..be60e4e --- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/servicediscoveryregistry/ServiceDiscoveryRegistryInfoWrapper.java +++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/servicediscoveryregistry/ServiceDiscoveryRegistryInfoWrapper.java @@@ -14,10 -14,10 +14,10 @@@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.dubbo.integration.multiple.servicediscoveryregistry; + package org.apache.dubbo.config.integration.multiple.servicediscoveryregistry; +import org.apache.dubbo.config.metadata.MetadataServiceDelegation; import org.apache.dubbo.registry.client.ServiceDiscoveryRegistry; -import org.apache.dubbo.registry.client.metadata.store.InMemoryWritableMetadataService; /** * The instance to wrap {@link org.apache.dubbo.registry.client.ServiceDiscoveryRegistry} diff --cc dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/single/SingleRegistryCenterDubboProtocolIntegrationTest.java index fb76315,5b4b8dd..5f9f3f6 --- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/single/SingleRegistryCenterDubboProtocolIntegrationTest.java +++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/single/SingleRegistryCenterDubboProtocolIntegrationTest.java @@@ -38,11 -36,10 +37,10 @@@ import org.apache.dubbo.registry.client import org.apache.dubbo.registry.client.migration.MigrationInvoker; import org.apache.dubbo.registry.support.RegistryManager; import org.apache.dubbo.registry.zookeeper.ZookeeperServiceDiscovery; - import org.apache.dubbo.registrycenter.RegistryCenter; - import org.apache.dubbo.registrycenter.ZookeeperSingleRegistryCenter; import org.apache.dubbo.rpc.cluster.Directory; import org.apache.dubbo.rpc.model.ApplicationModel; + import org.apache.dubbo.test.check.registrycenter.config.ZookeeperRegistryCenterConfig; + import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; diff --cc dubbo-demo/dubbo-demo-xml/dubbo-demo-xml-consumer/src/main/resources/spring/dubbo-consumer.xml index e8c9521,a89803c..d04700d --- a/dubbo-demo/dubbo-demo-xml/dubbo-demo-xml-consumer/src/main/resources/spring/dubbo-consumer.xml +++ b/dubbo-demo/dubbo-demo-xml/dubbo-demo-xml-consumer/src/main/resources/spring/dubbo-consumer.xml @@@ -26,8 -26,12 +26,12 @@@ <dubbo:metadata-report address="zookeeper://127.0.0.1:2181"/> - <dubbo:registry address="zookeeper://127.0.0.1:2181"/> + <dubbo:registry id="demo1" address="zookeeper://127.0.0.1:2181?registry-type=service"/> + <dubbo:protocol name="dubbo" port="-1"/> + <dubbo:protocol name="rest" port="-1"/> + <dubbo:protocol name="tri" port="-1"/> + <dubbo:reference id="demoService" check="false" interface="org.apache.dubbo.demo.DemoService"/> diff --cc dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataInfo.java index 5221ed2,3c3a614..38f103e --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataInfo.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataInfo.java @@@ -85,42 -76,36 +85,46 @@@ public class MetadataInfo implements Se this.revision = revision; this.services = services == null ? new ConcurrentHashMap<>() : services; this.extendParams = new ConcurrentHashMap<>(); + this.instanceParams = new ConcurrentHashMap<>(); } - public void addService(ServiceInfo serviceInfo) { - if (serviceInfo == null) { - return; - } + public synchronized void addService(URL url) { + // fixme, pass in application mode context during initialization of MetadataInfo. + this.loader = url.getOrDefaultApplicationModel().getExtensionLoader(MetadataParamsFilter.class); + List<MetadataParamsFilter> filters = loader.getActivateExtension(url, "params-filter"); + // generate service level metadata + ServiceInfo serviceInfo = new ServiceInfo(url, filters); this.services.put(serviceInfo.getMatchKey(), serviceInfo); - markChanged(); - } + // extract common instance level params + extractInstanceParams(url, filters); - public void removeService(ServiceInfo serviceInfo) { - if (serviceInfo == null) { - return; + if (exportedServiceURLs == null) { + exportedServiceURLs = new ConcurrentSkipListMap<>(); } - this.services.remove(serviceInfo.getMatchKey()); - markChanged(); + addURL(exportedServiceURLs, url); + updated.compareAndSet(false, true); } - public void removeService(String key) { - if (key == null) { + public synchronized void removeService(URL url) { + if (url == null) { return; } - this.services.remove(key); - markChanged(); + this.services.remove(url.getProtocolServiceKey()); + if (exportedServiceURLs != null) { + removeURL(exportedServiceURLs, url); + } + + updated.compareAndSet(false, true); + } + + public String getRevision() { + return revision; } + public String getRevision() { + return revision; + } + /** * Reported status and metadata modification must be synchronized if used in multiple threads. */ diff --cc dubbo-metadata/dubbo-metadata-report-nacos/src/main/java/org/apache/dubbo/metadata/store/nacos/NacosMetadataReport.java index 3a7f116,23e866a..e22fa59 --- a/dubbo-metadata/dubbo-metadata-report-nacos/src/main/java/org/apache/dubbo/metadata/store/nacos/NacosMetadataReport.java +++ b/dubbo-metadata/dubbo-metadata-report-nacos/src/main/java/org/apache/dubbo/metadata/store/nacos/NacosMetadataReport.java @@@ -34,13 -39,8 +39,7 @@@ import org.apache.dubbo.metadata.report import org.apache.dubbo.metadata.report.identifier.ServiceMetadataIdentifier; import org.apache.dubbo.metadata.report.identifier.SubscriberMetadataIdentifier; import org.apache.dubbo.metadata.report.support.AbstractMetadataReport; -import org.apache.dubbo.rpc.RpcException; - import com.alibaba.nacos.api.NacosFactory; - import com.alibaba.nacos.api.PropertyKeyConst; - import com.alibaba.nacos.api.config.listener.AbstractSharedListener; - import com.alibaba.nacos.api.exception.NacosException; - import com.google.gson.Gson; - import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; diff --cc dubbo-metadata/dubbo-metadata-report-zookeeper/src/test/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReportTest.java index 9c07dbb,86732aa..28873d7 --- a/dubbo-metadata/dubbo-metadata-report-zookeeper/src/test/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReportTest.java +++ b/dubbo-metadata/dubbo-metadata-report-zookeeper/src/test/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReportTest.java @@@ -30,12 -29,9 +31,10 @@@ import org.apache.dubbo.metadata.report import org.apache.dubbo.metadata.report.identifier.ServiceMetadataIdentifier; import org.apache.dubbo.metadata.report.identifier.SubscriberMetadataIdentifier; import org.apache.dubbo.rpc.model.ApplicationModel; + - import com.google.gson.Gson; - import org.apache.curator.test.TestingServer; - import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; + import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import java.util.Arrays; diff --cc dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java index a191826,f7f5aaa..cdfbf78 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java @@@ -130,16 -140,23 +130,19 @@@ public class ServiceInstancesChangedLis String revision = entry.getKey(); List<ServiceInstance> subInstances = entry.getValue(); ServiceInstance instance = selectInstance(subInstances); - MetadataInfo metadata = getRemoteMetadata(revision, localServiceToRevisions, instance); + MetadataInfo metadata = serviceDiscovery.getRemoteMetadata(revision, instance); + parseMetadata(revision, metadata, localServiceToRevisions); // update metadata into each instance, in case new instance created. for (ServiceInstance tmpInstance : subInstances) { - ((DefaultServiceInstance) tmpInstance).setServiceMetadata(metadata); + MetadataInfo originMetadata = ((DefaultServiceInstance) tmpInstance).getServiceMetadata(); + if (originMetadata == null || !Objects.equals(originMetadata.getRevision(), metadata.getRevision())) { + ((DefaultServiceInstance) tmpInstance).setServiceMetadata(metadata); + } } -// ((DefaultServiceInstance) instance).setServiceMetadata(metadata); - newRevisionToMetadata.putIfAbsent(revision, metadata); - } - - if (logger.isDebugEnabled()) { - logger.debug(newRevisionToMetadata.size() + " unique revisions: " + newRevisionToMetadata.keySet()); } - if (hasEmptyMetadata(newRevisionToMetadata)) {// retry every 10 seconds + if (hasEmptyMetadata(revisionToInstances)) {// retry every 10 seconds + hasEmptyMetadata = true; if (retryPermission.tryAcquire()) { if (retryFuture != null && !retryFuture.isDone()) { // cancel last retryFuture because only one retryFuture will be canceled at destroy(). diff --cc dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilderTest.java index 052e123,d69a6dd..b297f1c --- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilderTest.java +++ b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilderTest.java @@@ -64,9 -65,10 +66,10 @@@ public class StandardMetadataServiceURL assertEquals(url.getGroup(), "test"); assertEquals(url.getSide(), "consumer"); assertEquals(url.getVersion(), "1.0.0"); - assertEquals(url.getParameters().get("getAndListenInstanceMetadata.1.callback"), "true"); +// assertEquals(url.getParameters().get("getAndListenInstanceMetadata.1.callback"), "true"); assertEquals(url.getParameters().get("reconnect"), "false"); assertEquals(url.getParameters().get("timeout"), "5000"); + assertEquals(url.getApplicationModel(), ApplicationModel.defaultModel()); // test generateWithMetadata urls = builder.build(serviceInstance); diff --cc dubbo-registry/dubbo-registry-zookeeper/src/test/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscoveryTest.java index dd7c4c5,aa54bd9..784d5ac --- a/dubbo-registry/dubbo-registry-zookeeper/src/test/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscoveryTest.java +++ b/dubbo-registry/dubbo-registry-zookeeper/src/test/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscoveryTest.java @@@ -23,9 -24,10 +23,10 @@@ import org.apache.dubbo.registry.client import org.apache.dubbo.registry.client.event.ServiceInstancesChangedEvent; import org.apache.dubbo.registry.client.event.listener.ServiceInstancesChangedListener; import org.apache.dubbo.rpc.model.ApplicationModel; -import org.apache.dubbo.rpc.model.ScopeModelUtil; +import org.apache.curator.test.TestingServer; import org.junit.jupiter.api.AfterEach; + import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.internal.util.collections.Sets; @@@ -59,15 -67,10 +64,11 @@@ public class ZookeeperServiceDiscoveryT @BeforeEach public void init() throws Exception { - zkServerPort = getAvailablePort(); - zkServer = new TestingServer(zkServerPort, true); - zkServer.start(); - - this.registryUrl = URL.valueOf(zookeeperConnectionAddress1); - registryUrl.setScopeModel(ApplicationModel.defaultModel()); - this.discovery = new ZookeeperServiceDiscovery(); - this.discovery.initialize(registryUrl); + this.registryUrl = URL.valueOf("zookeeper://127.0.0.1:" + zkServerPort); + ApplicationModel applicationModel = ApplicationModel.defaultModel(); + applicationModel.getApplicationConfigManager().setApplication(new ApplicationConfig(SERVICE_NAME)); + registryUrl.setScopeModel(applicationModel); + this.discovery = new ZookeeperServiceDiscovery(applicationModel, registryUrl); } @AfterEach diff --cc dubbo-registry/dubbo-registry-zookeeper/src/test/java/org/apache/dubbo/registry/zookeeper/util/CuratorFrameworkUtilsTest.java index 11bfa06,71ad98f..1eec916 --- a/dubbo-registry/dubbo-registry-zookeeper/src/test/java/org/apache/dubbo/registry/zookeeper/util/CuratorFrameworkUtilsTest.java +++ b/dubbo-registry/dubbo-registry-zookeeper/src/test/java/org/apache/dubbo/registry/zookeeper/util/CuratorFrameworkUtilsTest.java @@@ -45,28 -38,17 +43,20 @@@ import static org.apache.dubbo.registry * {@link CuratorFrameworkUtils} Test */ class CuratorFrameworkUtilsTest { - private static TestingServer zkServer; private static URL registryUrl; + private static String zookeeperConnectionAddress1; + private static MetadataReport metadataReport; @BeforeAll public static void init() throws Exception { - int zkServerPort = getAvailablePort(); - zkServer = new TestingServer(zkServerPort, true); - zkServer.start(); + zookeeperConnectionAddress1 = System.getProperty("zookeeper.connection.address.1"); - registryUrl = URL.valueOf("zookeeper://127.0.0.1:" + zkServerPort); + registryUrl = URL.valueOf(zookeeperConnectionAddress1); registryUrl.setScopeModel(ApplicationModel.defaultModel()); + + metadataReport = Mockito.mock(MetadataReport.class); } - @AfterAll - public static void tearDown() throws Exception { - zkServer.stop(); - } - - @Test void testBuildCuratorFramework() throws Exception { CuratorFramework curatorFramework = CuratorFrameworkUtils.buildCuratorFramework(registryUrl); diff --cc dubbo-test/dubbo-test-spring/src/main/java/org/apache/dubbo/test/spring/SpringXmlConfigTest.java index 484940a,5530de7..7171b5d --- a/dubbo-test/dubbo-test-spring/src/main/java/org/apache/dubbo/test/spring/SpringXmlConfigTest.java +++ b/dubbo-test/dubbo-test-spring/src/main/java/org/apache/dubbo/test/spring/SpringXmlConfigTest.java @@@ -21,10 -21,7 +21,8 @@@ import org.apache.dubbo.test.common.Sys import org.apache.dubbo.test.common.api.DemoService; import org.apache.dubbo.test.common.api.GreetingService; import org.apache.dubbo.test.common.api.RestDemoService; - import org.apache.dubbo.test.common.registrycenter.RegistryCenter; - import org.apache.dubbo.test.common.registrycenter.ZookeeperSingleRegistryCenter; import org.apache.dubbo.test.spring.context.MockSpringInitCustomizer; + import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@@ -35,25 -32,14 +33,21 @@@ import static org.apache.dubbo.common.c public class SpringXmlConfigTest { - private static RegistryCenter registryCenter; + private static ClassPathXmlApplicationContext providerContext; + @BeforeAll public static void beforeAll() { - registryCenter = new ZookeeperSingleRegistryCenter(); - registryCenter.startup(); DubboBootstrap.reset(); } @AfterAll public static void afterAll(){ DubboBootstrap.reset(); - registryCenter.shutdown(); + providerContext.close(); + } + + private void startProvider() { + providerContext = new ClassPathXmlApplicationContext("/spring/dubbo-demo-provider.xml"); } @Test
