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>