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/01/15 09:41:14 UTC
[dubbo] 01/03: Merge branch '3.0' into 3.0-k8s
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch 3.0-k8s
in repository https://gitbox.apache.org/repos/asf/dubbo.git
commit 2bf901b5f0d6d697a52495707612260df6bbc254
Merge: 79bb595 829c0df
Author: ken.lj <ke...@gmail.com>
AuthorDate: Fri Jan 15 17:12:16 2021 +0800
Merge branch '3.0' into 3.0-k8s
.../dubbo/config/AbstractInterfaceConfig.java | 7 +-
.../org/apache/dubbo/config/RegistryConfig.java | 2 +
.../java/org/apache/dubbo/event/EventListener.java | 1 +
.../apache/dubbo/common/lang/PrioritizedTest.java | 1 +
.../dubbo/common/utils/DefaultCharSequence.java | 1 +
.../apache/dubbo/generic/GenericServiceTest.java | 42 ++++++------
.../apache/dubbo/demo/consumer/Application.java | 25 +++++++-
.../src/main/resources/spring/dubbo-consumer.xml | 5 +-
.../metadata/InstanceMetadataChangedListener.java | 35 ----------
.../apache/dubbo/metadata/MappingChangedEvent.java | 7 ++
.../dubbo/metadata/WritableMetadataService.java | 7 ++
.../metadata/definition/TypeDefinitionBuilder.java | 17 +++--
.../definition/builder/ArrayTypeBuilder.java | 18 ++++--
.../definition/builder/CollectionTypeBuilder.java | 23 +++++--
.../definition/builder/DefaultTypeBuilder.java | 21 +++---
.../definition/builder/EnumTypeBuilder.java | 22 +++++--
.../definition/builder/MapTypeBuilder.java | 22 +++++--
.../metadata/definition/builder/TypeBuilder.java | 2 +-
.../definition/model/MethodDefinition.java | 13 ++--
.../definition/model/ServiceDefinition.java | 18 ++++++
.../metadata/definition/model/TypeDefinition.java | 74 ++++++++++------------
.../dubbo/metadata/definition/util/ClassUtils.java | 55 ++++++++++++++++
.../rest/jaxrs/DefaultValueParameterProcessor.java | 1 +
.../dubbo/metadata/definition/MetadataTest.java | 18 ++----
.../definition/ServiceDefinitionBuilderTest.java | 40 ++++++------
.../metadata/definition/Test3TypeBuilder.java | 3 +-
.../dubbo/metadata/definition/TestTypeBuilder.java | 3 +-
.../definition/protobuf/ProtobufTypeBuilder.java | 56 +++++++++-------
.../protobuf/ProtobufTypeBuilderTest.java | 41 ++++++++----
.../builder/ArrayTypeDefinitionBuilder.java | 13 ++--
.../builder/CollectionTypeDefinitionBuilder.java | 11 +++-
.../builder/DeclaredTypeDefinitionBuilder.java | 4 +-
.../builder/EnumTypeDefinitionBuilder.java | 8 ++-
.../builder/GeneralTypeDefinitionBuilder.java | 17 +++--
.../builder/MapTypeDefinitionBuilder.java | 10 +--
.../builder/MethodDefinitionBuilder.java | 9 +--
.../builder/PrimitiveTypeDefinitionBuilder.java | 11 ++--
.../builder/ServiceDefinitionBuilder.java | 15 +++--
.../builder/SimpleTypeDefinitionBuilder.java | 9 ++-
.../annotation/processing/builder/TypeBuilder.java | 31 +++++++++
.../processing/builder/TypeDefinitionBuilder.java | 43 ++++---------
.../rest/AbstractServiceRestMetadataResolver.java | 2 +-
.../rest/jaxrs/DefaultValueParameterProcessor.java | 1 +
...data.annotation.processing.builder.TypeBuilder} | 0
.../builder/ArrayTypeDefinitionBuilderTest.java | 10 ++-
.../builder/EnumTypeDefinitionBuilderTest.java | 6 +-
.../builder/MapTypeDefinitionBuilderTest.java | 23 ++++---
.../PrimitiveTypeDefinitionBuilderTest.java | 10 +--
.../builder/ServiceDefinitionBuilderTest.java | 35 +++++++---
.../registry/client/AbstractServiceDiscovery.java | 6 ++
.../registry/client/DefaultServiceInstance.java | 5 +-
.../registry/client/ServiceDiscoveryRegistry.java | 13 ++--
.../listener/ServiceInstancesChangedListener.java | 25 +++++++-
.../registry/client/metadata/MetadataUtils.java | 5 ++
.../metadata/ServiceInstanceMetadataUtils.java | 14 ++--
.../store/InMemoryWritableMetadataService.java | 41 ++++++++++--
.../client/migration/MigrationClusterInvoker.java | 50 ---------------
.../registry/nacos/NacosServiceDiscovery.java | 2 +-
.../zookeeper/ZookeeperServiceDiscovery.java | 12 +---
dubbo-registry/pom.xml | 4 +-
60 files changed, 630 insertions(+), 395 deletions(-)
diff --cc dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java
index 27f66f5,0321a16..dff55f3
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java
@@@ -91,62 -78,37 +91,67 @@@ public class MetadataUtils
}
public static MetadataService getMetadataServiceProxy(ServiceInstance instance, ServiceDiscovery serviceDiscovery) {
- String key = instance.getServiceName() + "##" +
- ServiceInstanceMetadataUtils.getExportedServicesRevision(instance);
- return metadataServiceProxies.computeIfAbsent(key, k -> {
- MetadataServiceURLBuilder builder = null;
- ExtensionLoader<MetadataServiceURLBuilder> loader
- = ExtensionLoader.getExtensionLoader(MetadataServiceURLBuilder.class);
-
- Map<String, String> metadata = instance.getMetadata();
- // METADATA_SERVICE_URLS_PROPERTY_NAME is a unique key exists only on instances of spring-cloud-alibaba.
- String dubboURLsJSON = metadata.get(METADATA_SERVICE_URLS_PROPERTY_NAME);
- if (StringUtils.isNotEmpty(dubboURLsJSON)) {
- builder = loader.getExtension(SpringCloudMetadataServiceURLBuilder.NAME);
- } else {
- builder = loader.getExtension(StandardMetadataServiceURLBuilder.NAME);
- }
+ String key = computeKey(instance);
+ Lock lock = metadataServiceLocks.computeIfAbsent(key, k -> new ReentrantLock());
+
+ lock.lock();
+ try {
+ return metadataServiceProxies.computeIfAbsent(key, k -> referProxy(k, instance));
+ } finally {
+ lock.unlock();
+ }
+ }
- List<URL> urls = builder.build(instance);
- if (CollectionUtils.isEmpty(urls)) {
- throw new IllegalStateException("You have enabled introspection service discovery mode for instance "
- + instance + ", but no metadata service can build from it.");
+ public static void destroyMetadataServiceProxy(ServiceInstance instance, ServiceDiscovery serviceDiscovery) {
+ String key = computeKey(instance);
+ Lock lock = metadataServiceLocks.computeIfAbsent(key, k -> new ReentrantLock());
+
+ lock.lock();
+ try {
+ if (metadataServiceProxies.containsKey(key)) {
+ metadataServiceProxies.remove(key);
+ Invoker<?> invoker = metadataServiceInvokers.remove(key);
+ invoker.destroy();
}
+ } finally {
+ lock.unlock();
+ }
+ }
+
+ private static MetadataService referProxy(String key, ServiceInstance instance) {
+ MetadataServiceURLBuilder builder = null;
+ ExtensionLoader<MetadataServiceURLBuilder> loader
+ = ExtensionLoader.getExtensionLoader(MetadataServiceURLBuilder.class);
+
+ Map<String, String> metadata = instance.getMetadata();
+ // METADATA_SERVICE_URLS_PROPERTY_NAME is a unique key exists only on instances of spring-cloud-alibaba.
+ String dubboURLsJSON = metadata.get(METADATA_SERVICE_URLS_PROPERTY_NAME);
+ if (metadata.isEmpty() || StringUtils.isEmpty(dubboURLsJSON)) {
+ builder = loader.getExtension(StandardMetadataServiceURLBuilder.NAME);
+ } else {
+ builder = loader.getExtension(SpringCloudMetadataServiceURLBuilder.NAME);
+ }
+
+ List<URL> urls = builder.build(instance);
+ if (CollectionUtils.isEmpty(urls)) {
+ throw new IllegalStateException("You have enabled introspection service discovery mode for instance "
+ + instance + ", but no metadata service can build from it.");
+ }
- // Simply rely on the first metadata url, as stated in MetadataServiceURLBuilder.
- Invoker<MetadataService> invoker = protocol.refer(MetadataService.class, urls.get(0));
+ // Simply rely on the first metadata url, as stated in MetadataServiceURLBuilder.
+ Invoker<MetadataService> invoker = protocol.refer(MetadataService.class, urls.get(0));
+ metadataServiceInvokers.put(key, invoker);
- return proxyFactory.getProxy(invoker);
- });
+ return proxyFactory.getProxy(invoker);
+ }
+
+ public static void saveMetadataURL(URL url) {
+ // store in local
+ getLocalMetadataService().setMetadataServiceURL(url);
}
+
+ public static void saveMetadataURL(URL url) {
+ // store in local
+ getLocalMetadataService().setMetadataServiceURL(url);
+ }
}
diff --cc dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java
index df397cc,e31745a..fdecb76
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java
@@@ -19,8 -19,8 +19,9 @@@ package org.apache.dubbo.registry.clien
import org.apache.dubbo.common.URL;
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.metadata.InstanceMetadataChangedListener;
import org.apache.dubbo.metadata.MetadataInfo;
import org.apache.dubbo.metadata.MetadataInfo.ServiceInfo;
import org.apache.dubbo.metadata.MetadataService;
@@@ -235,21 -241,18 +245,34 @@@ public class InMemoryWritableMetadataSe
}
@Override
+ public void exportInstanceMetadata(String metadata) {
+ this.instanceMetadata = metadata;
+ }
+
+ @Override
+ public Map<String, InstanceMetadataChangedListener> getInstanceMetadataChangedListenerMap() {
+ return instanceMetadataChangedListenerMap;
+ }
+
+ @Override
+ public String getAndListenInstanceMetadata(String consumerId, InstanceMetadataChangedListener listener) {
+ instanceMetadataChangedListenerMap.put(consumerId, listener);
+ return instanceMetadata;
+ }
+
++ @Override
+ public MetadataInfo getDefaultMetadataInfo() {
+ if (CollectionUtils.isEmptyMap(metadataInfos)) {
+ return null;
+ }
+ for (Map.Entry<String, MetadataInfo> entry : metadataInfos.entrySet()) {
+ if (entry.getKey().equalsIgnoreCase(DEFAULT_KEY)) {
+ return entry.getValue();
+ }
+ }
+ return metadataInfos.entrySet().iterator().next().getValue();
+ }
+
public void blockUntilUpdated() {
try {
metadataSemaphore.acquire();
diff --cc dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationClusterInvoker.java
index 91fa942,91fa942..0000000
deleted file mode 100644,100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationClusterInvoker.java
+++ /dev/null
@@@ -1,50 -1,50 +1,0 @@@
--/*
-- * Licensed to the Apache Software Foundation (ASF) under one or more
-- * contributor license agreements. See the NOTICE file distributed with
-- * this work for additional information regarding copyright ownership.
-- * The ASF licenses this file to You under the Apache License, Version 2.0
-- * (the "License"); you may not use this file except in compliance with
-- * the License. You may obtain a copy of the License at
-- *
-- * http://www.apache.org/licenses/LICENSE-2.0
-- *
-- * Unless required by applicable law or agreed to in writing, software
-- * distributed under the License is distributed on an "AS IS" BASIS,
-- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- * See the License for the specific language governing permissions and
-- * limitations under the License.
-- */
--package org.apache.dubbo.registry.client.migration;
--
--import org.apache.dubbo.common.URL;
--import org.apache.dubbo.registry.client.migration.model.MigrationRule;
--import org.apache.dubbo.registry.client.migration.model.MigrationStep;
--import org.apache.dubbo.rpc.cluster.ClusterInvoker;
--
--/**
-- * FIXME, some methods need to be further optimized.
-- *
-- * @param <T>
-- */
--public interface MigrationClusterInvoker<T> extends ClusterInvoker<T> {
--
-- boolean isServiceDiscovery();
--
-- MigrationStep getMigrationStep();
--
-- void setMigrationStep(MigrationStep step);
--
-- MigrationRule getMigrationRule();
--
-- void setMigrationRule(MigrationRule rule);
--
-- boolean invokersChanged();
--
-- void fallbackToInterfaceInvoker();
--
-- void migrateToServiceDiscoveryInvoker(boolean forceMigrate);
--
-- void refreshServiceDiscoveryInvokerOnMappingCallback(boolean forceMigrate);
--
-- void reRefer(URL newSubscribeUrl);
--}
diff --cc dubbo-registry/pom.xml
index 2fa73ed,3f9b247..db3ee35
--- a/dubbo-registry/pom.xml
+++ b/dubbo-registry/pom.xml
@@@ -33,9 -33,7 +33,9 @@@
<module>dubbo-registry-api</module>
<module>dubbo-registry-multicast</module>
<module>dubbo-registry-zookeeper</module>
- <module>dubbo-registry-kubernetes</module>
- <module>dubbo-registry-dns</module>
<module>dubbo-registry-nacos</module>
<module>dubbo-registry-multiple</module>
++ <module>dubbo-registry-kubernetes</module>
++ <module>dubbo-registry-dns</module>
</modules>
</project>