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

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


The following commit(s) were added to refs/heads/3.0 by this push:
     new 346166e  Refactor migration
346166e is described below

commit 346166e674fea88d10dc43be82e387f547156709
Author: ken.lj <ken.lj...@gmail.com>
AuthorDate: Thu Aug 27 14:43:10 2020 +0800

    Refactor migration
---
 .../DefaultMigrationAddressComparator.java         |   2 +-
 .../migration}/InvokersChangedListener.java        |   2 +-
 .../migration}/MigrationAddressComparator.java     |   2 +-
 .../migration/MigrationClusterInvoker.java}        |  23 +++-
 .../migration}/MigrationInvoker.java               | 142 +++++++++++----------
 .../migration/MigrationRuleHandler.java}           |  13 +-
 .../MigrationRuleListener.java}                    |  15 +--
 .../ServiceDiscoveryMigrationInvoker.java          |  52 ++++++++
 .../migration/model}/MigrationRule.java            |   9 +-
 .../migration/model}/MigrationStep.java            |   2 +-
 .../registry/integration/DynamicDirectory.java     |   1 +
 .../InterfaceCompatibleRegistryProtocol.java       |   2 +-
 .../{client => integration}/RegistryProtocol.java  |  38 +-----
 .../integration/RegistryProtocolListener.java      |   1 -
 ...try.client.migration.MigrationAddressComparator |   1 +
 ...registry.integration.MigrationAddressComparator |   1 -
 ...o.registry.integration.RegistryProtocolListener |   2 +-
 .../dubbo/internal/org.apache.dubbo.rpc.Protocol   |   2 +-
 pom.xml                                            |  37 ++++++
 19 files changed, 217 insertions(+), 130 deletions(-)

diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/DefaultMigrationAddressComparator.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/DefaultMigrationAddressComparator.java
similarity index 95%
rename from 
dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/DefaultMigrationAddressComparator.java
rename to 
dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/DefaultMigrationAddressComparator.java
index a17d601..5fc8480 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/DefaultMigrationAddressComparator.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/DefaultMigrationAddressComparator.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.registry.integration;
+package org.apache.dubbo.registry.client.migration;
 
 import org.apache.dubbo.rpc.cluster.ClusterInvoker;
 
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/InvokersChangedListener.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/InvokersChangedListener.java
similarity index 94%
rename from 
dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/InvokersChangedListener.java
rename to 
dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/InvokersChangedListener.java
index 5a55a02..9ed886f 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/InvokersChangedListener.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/InvokersChangedListener.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.registry.integration;
+package org.apache.dubbo.registry.client.migration;
 
 public interface InvokersChangedListener {
     void onChange();
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/MigrationAddressComparator.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationAddressComparator.java
similarity index 95%
copy from 
dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/MigrationAddressComparator.java
copy to 
dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationAddressComparator.java
index b288720..2be527b 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/MigrationAddressComparator.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationAddressComparator.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.registry.integration;
+package org.apache.dubbo.registry.client.migration;
 
 import org.apache.dubbo.common.extension.SPI;
 import org.apache.dubbo.rpc.cluster.ClusterInvoker;
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/MigrationAddressComparator.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationClusterInvoker.java
similarity index 63%
rename from 
dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/MigrationAddressComparator.java
rename to 
dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationClusterInvoker.java
index b288720..3bd6fd7 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/MigrationAddressComparator.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationClusterInvoker.java
@@ -14,12 +14,25 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.registry.integration;
+package org.apache.dubbo.registry.client.migration;
 
-import org.apache.dubbo.common.extension.SPI;
+import org.apache.dubbo.registry.client.migration.model.MigrationStep;
 import org.apache.dubbo.rpc.cluster.ClusterInvoker;
 
-@SPI
-public interface MigrationAddressComparator {
-    <T> boolean shouldMigrate(ClusterInvoker<T> serviceDiscoveryInvoker, 
ClusterInvoker<T> invoker);
+/**
+ * FIXME, some methods need to be further optimized.
+ *
+ * @param <T>
+ */
+public interface MigrationClusterInvoker<T> extends ClusterInvoker<T> {
+
+    boolean isServiceDiscovery();
+
+    MigrationStep getCurrentStep();
+
+    boolean invokersChanged();
+
+    void fallbackToInterfaceInvoker();
+
+    void migrateToServiceDiscoveryInvoker(boolean forceMigrate);
 }
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/MigrationInvoker.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationInvoker.java
similarity index 92%
rename from 
dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/MigrationInvoker.java
rename to 
dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationInvoker.java
index 7ba9154..768f496 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/MigrationInvoker.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationInvoker.java
@@ -14,12 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.registry.integration;
+package org.apache.dubbo.registry.client.migration;
 
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.registry.Registry;
-import org.apache.dubbo.registry.client.RegistryProtocol;
+import org.apache.dubbo.registry.client.migration.model.MigrationStep;
+import org.apache.dubbo.registry.integration.DynamicDirectory;
+import org.apache.dubbo.registry.integration.RegistryProtocol;
 import org.apache.dubbo.rpc.Invocation;
 import org.apache.dubbo.rpc.Result;
 import org.apache.dubbo.rpc.RpcException;
@@ -29,7 +31,7 @@ import org.apache.dubbo.rpc.cluster.Directory;
 
 import java.util.Set;
 
-public class MigrationInvoker<T> implements ClusterInvoker<T> {
+public class MigrationInvoker<T> implements MigrationClusterInvoker<T> {
 
     private URL url;
     private Cluster cluster;
@@ -85,18 +87,8 @@ public class MigrationInvoker<T> implements 
ClusterInvoker<T> {
         return type;
     }
 
-    private boolean forceMigrate;
-
-    public boolean isForceMigrate() {
-        return forceMigrate;
-    }
-
-    public void setForceMigrate(boolean forceMigrate) {
-        this.forceMigrate = forceMigrate;
-    }
-
+    @Override
     public synchronized void migrateToServiceDiscoveryInvoker(boolean 
forceMigrate) {
-        setForceMigrate(forceMigrate);
         if (!forceMigrate) {
             refreshServiceDiscoveryInvoker();
             refreshInterfaceInvoker();
@@ -110,63 +102,12 @@ public class MigrationInvoker<T> implements 
ClusterInvoker<T> {
         }
     }
 
-    private synchronized void checkAddresses() {
-        Set<MigrationAddressComparator> detectors = 
ExtensionLoader.getExtensionLoader(MigrationAddressComparator.class).getSupportedExtensionInstances();
-        if (detectors != null && detectors.stream().allMatch(migrationDetector 
-> migrationDetector.shouldMigrate(serviceDiscoveryInvoker, invoker))) {
-            discardInterfaceInvokerAddress();
-        } else {
-            discardServiceDiscoveryInvokerAddress();
-        }
-    }
-
+    @Override
     public synchronized void fallbackToInterfaceInvoker() {
         refreshInterfaceInvoker();
         destroyServiceDiscoveryInvoker();
     }
 
-    protected synchronized void destroyServiceDiscoveryInvoker() {
-        if (serviceDiscoveryInvoker != null) {
-            serviceDiscoveryInvoker.destroy();
-            serviceDiscoveryInvoker = null;
-        }
-    }
-
-    protected synchronized void discardServiceDiscoveryInvokerAddress() {
-        if (serviceDiscoveryInvoker != null) {
-            serviceDiscoveryInvoker.getDirectory().discordAddresses();
-        }
-    }
-
-    protected synchronized void refreshServiceDiscoveryInvoker() {
-        if (needRefresh(serviceDiscoveryInvoker)) {
-            serviceDiscoveryInvoker = 
registryProtocol.getServiceDiscoveryInvoker(cluster, registry, type, url);
-        }
-    }
-
-    protected synchronized void refreshInterfaceInvoker() {
-        if (needRefresh(invoker)) {
-            // FIXME invoker.destroy();
-            invoker = registryProtocol.getInvoker(cluster, registry, type, 
url);
-        }
-    }
-
-    protected synchronized void destroyInterfaceInvoker() {
-        if (invoker != null) {
-            invoker.destroy();
-            invoker = null;
-        }
-    }
-
-    protected synchronized void discardInterfaceInvokerAddress() {
-        if (invoker != null) {
-            invoker.getDirectory().discordAddresses();
-        }
-    }
-
-    private boolean needRefresh(ClusterInvoker<T> invoker) {
-        return invoker == null || invoker.isDestroyed() || 
!invoker.isAvailable();
-    }
-
     @Override
     public Result invoke(Invocation invocation) throws RpcException {
         if (needRefresh(serviceDiscoveryInvoker)) {
@@ -225,4 +166,73 @@ public class MigrationInvoker<T> implements 
ClusterInvoker<T> {
         return (invoker == null || invoker.isDestroyed())
                 && (serviceDiscoveryInvoker == null || 
serviceDiscoveryInvoker.isDestroyed());
     }
+
+    @Override
+    public boolean isServiceDiscovery() {
+        return false;
+    }
+
+    @Override
+    public MigrationStep getCurrentStep() {
+        return null;
+    }
+
+    @Override
+    public boolean invokersChanged() {
+        return false;
+    }
+
+
+    private synchronized void checkAddresses() {
+        Set<MigrationAddressComparator> detectors = 
ExtensionLoader.getExtensionLoader(MigrationAddressComparator.class).getSupportedExtensionInstances();
+        if (detectors != null && detectors.stream().allMatch(migrationDetector 
-> migrationDetector.shouldMigrate(serviceDiscoveryInvoker, invoker))) {
+            discardInterfaceInvokerAddress();
+        } else {
+            discardServiceDiscoveryInvokerAddress();
+        }
+    }
+
+    protected synchronized void destroyServiceDiscoveryInvoker() {
+        if (serviceDiscoveryInvoker != null) {
+            serviceDiscoveryInvoker.destroy();
+            serviceDiscoveryInvoker = null;
+        }
+    }
+
+    protected synchronized void discardServiceDiscoveryInvokerAddress() {
+        if (serviceDiscoveryInvoker != null) {
+            serviceDiscoveryInvoker.getDirectory().discordAddresses();
+        }
+    }
+
+    protected synchronized void refreshServiceDiscoveryInvoker() {
+        if (needRefresh(serviceDiscoveryInvoker)) {
+            serviceDiscoveryInvoker = 
registryProtocol.getServiceDiscoveryInvoker(cluster, registry, type, url);
+        }
+    }
+
+    protected synchronized void refreshInterfaceInvoker() {
+        if (needRefresh(invoker)) {
+            // FIXME invoker.destroy();
+            invoker = registryProtocol.getInvoker(cluster, registry, type, 
url);
+        }
+    }
+
+    protected synchronized void destroyInterfaceInvoker() {
+        if (invoker != null) {
+            invoker.destroy();
+            invoker = null;
+        }
+    }
+
+    protected synchronized void discardInterfaceInvokerAddress() {
+        if (invoker != null) {
+            invoker.getDirectory().discordAddresses();
+        }
+    }
+
+    private boolean needRefresh(ClusterInvoker<T> invoker) {
+        return invoker == null || invoker.isDestroyed() || 
!invoker.isAvailable();
+    }
+
 }
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/MigrationRuleListener.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleHandler.java
similarity index 85%
rename from 
dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/MigrationRuleListener.java
rename to 
dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleHandler.java
index 0e895f8..556c701 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/MigrationRuleListener.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleHandler.java
@@ -14,30 +14,31 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.registry.integration;
+package org.apache.dubbo.registry.client.migration;
 
 import org.apache.dubbo.common.config.ConfigurationUtils;
 import org.apache.dubbo.common.extension.Activate;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.utils.StringUtils;
-import org.apache.dubbo.registry.client.RegistryProtocol;
+import org.apache.dubbo.registry.client.migration.model.MigrationRule;
+import org.apache.dubbo.registry.client.migration.model.MigrationStep;
 
 import static org.apache.dubbo.common.constants.RegistryConstants.INIT;
 
 @Activate
-public class MigrationRuleListener<T> {
-    private static final Logger logger = 
LoggerFactory.getLogger(MigrationRuleListener.class);
+public class MigrationRuleHandler<T> {
+    private static final Logger logger = 
LoggerFactory.getLogger(MigrationRuleHandler.class);
     private static final String DUBBO_SERVICEDISCOVERY_MIGRATION = 
"dubbo.application.service-discovery.migration";
 
     private MigrationInvoker<T> migrationInvoker;
 
-    public MigrationRuleListener(MigrationInvoker<T> invoker) {
+    public MigrationRuleHandler(MigrationInvoker<T> invoker) {
         this.migrationInvoker = invoker;
     }
 
     public void doMigrate(String rawRule) {
-        MigrationStep step = (migrationInvoker instanceof 
RegistryProtocol.ServiceDiscoveryMigrationInvoker)
+        MigrationStep step = (migrationInvoker instanceof 
ServiceDiscoveryMigrationInvoker)
                 ? MigrationStep.FORCE_APPLICATION
                 : MigrationStep.INTERFACE_FIRST;
         if (StringUtils.isEmpty(rawRule)) {
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistryProtocolListener.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleListener.java
similarity index 85%
rename from 
dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistryProtocolListener.java
rename to 
dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleListener.java
index f7b422b..918d9aa 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistryProtocolListener.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleListener.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.registry.client;
+package org.apache.dubbo.registry.client.migration;
 
 import org.apache.dubbo.common.config.configcenter.ConfigChangedEvent;
 import org.apache.dubbo.common.config.configcenter.ConfigurationListener;
@@ -25,8 +25,7 @@ import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.utils.CollectionUtils;
 import org.apache.dubbo.common.utils.ConcurrentHashSet;
 import org.apache.dubbo.common.utils.StringUtils;
-import org.apache.dubbo.registry.integration.MigrationInvoker;
-import org.apache.dubbo.registry.integration.MigrationRuleListener;
+import org.apache.dubbo.registry.integration.RegistryProtocol;
 import org.apache.dubbo.registry.integration.RegistryProtocolListener;
 import org.apache.dubbo.rpc.Exporter;
 import org.apache.dubbo.rpc.Invoker;
@@ -37,17 +36,17 @@ import java.util.Set;
 import static org.apache.dubbo.common.constants.RegistryConstants.INIT;
 
 @Activate
-public class ServiceDiscoveryRegistryProtocolListener implements 
RegistryProtocolListener, ConfigurationListener {
-    private static final Logger logger = 
LoggerFactory.getLogger(ServiceDiscoveryRegistryProtocolListener.class);
+public class MigrationRuleListener implements RegistryProtocolListener, 
ConfigurationListener {
+    private static final Logger logger = 
LoggerFactory.getLogger(MigrationRuleListener.class);
     private static final String RULE_KEY = ApplicationModel.getName() + 
".migration";
     private static final String DUBBO_SERVICEDISCOVERY_MIGRATION = 
"DUBBO_SERVICEDISCOVERY_MIGRATION";
 
-    private Set<MigrationRuleListener> listeners = new ConcurrentHashSet<>();
+    private Set<MigrationRuleHandler> listeners = new ConcurrentHashSet<>();
     private DynamicConfiguration configuration;
 
     private volatile String rawRule;
 
-    public ServiceDiscoveryRegistryProtocolListener() {
+    public MigrationRuleListener() {
         this.configuration = 
ApplicationModel.getEnvironment().getDynamicConfiguration().orElseGet(null);
 
         configuration.addListener(RULE_KEY, DUBBO_SERVICEDISCOVERY_MIGRATION, 
this);
@@ -81,7 +80,7 @@ public class ServiceDiscoveryRegistryProtocolListener 
implements RegistryProtoco
     public synchronized <T> void onRefer(RegistryProtocol registryProtocol, 
Invoker<T> invoker) {
         MigrationInvoker<T> migrationInvoker = (MigrationInvoker<T>) invoker;
 
-        MigrationRuleListener<T> migrationListener = new 
MigrationRuleListener<>(migrationInvoker);
+        MigrationRuleHandler<T> migrationListener = new 
MigrationRuleHandler<>(migrationInvoker);
         listeners.add(migrationListener);
 
         migrationListener.doMigrate(rawRule);
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/ServiceDiscoveryMigrationInvoker.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/ServiceDiscoveryMigrationInvoker.java
new file mode 100644
index 0000000..b37afba
--- /dev/null
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/ServiceDiscoveryMigrationInvoker.java
@@ -0,0 +1,52 @@
+/*
+ * 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.Registry;
+import org.apache.dubbo.registry.integration.RegistryProtocol;
+import org.apache.dubbo.rpc.Invocation;
+import org.apache.dubbo.rpc.Result;
+import org.apache.dubbo.rpc.RpcException;
+import org.apache.dubbo.rpc.cluster.Cluster;
+import org.apache.dubbo.rpc.cluster.ClusterInvoker;
+
+public class ServiceDiscoveryMigrationInvoker<T> extends MigrationInvoker<T> {
+
+    public ServiceDiscoveryMigrationInvoker(RegistryProtocol registryProtocol, 
Cluster cluster, Registry registry, Class<T> type, URL url) {
+        super(registryProtocol, cluster, registry, type, url);
+    }
+
+    @Override
+    public synchronized void fallbackToInterfaceInvoker() {
+        destroyServiceDiscoveryInvoker();
+    }
+
+    @Override
+    public synchronized void migrateToServiceDiscoveryInvoker(boolean 
forceMigrate) {
+        refreshServiceDiscoveryInvoker();
+    }
+
+    @Override
+    public Result invoke(Invocation invocation) throws RpcException {
+        ClusterInvoker<T> invoker = getServiceDiscoveryInvoker();
+        if (invoker == null) {
+            throw new IllegalStateException("There's no service discovery 
invoker available for service " + invocation.getServiceName());
+        }
+        return invoker.invoke(invocation);
+    }
+}
\ No newline at end of file
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/MigrationRule.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/model/MigrationRule.java
similarity index 87%
rename from 
dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/MigrationRule.java
rename to 
dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/model/MigrationRule.java
index 31e9395..b0f84b1 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/MigrationRule.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/model/MigrationRule.java
@@ -14,11 +14,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.registry.integration;
+package org.apache.dubbo.registry.client.migration.model;
 
 import org.yaml.snakeyaml.Yaml;
 import org.yaml.snakeyaml.constructor.Constructor;
 
+/**
+ * # key = demo-consumer.migration
+ * # group = DUBBO_SERVICEDISCOVERY_MIGRATION
+ * # content
+ * key: demo-consumer
+ * step: APPLICATION_FIRST
+ */
 public class MigrationRule {
     private String key;
     private MigrationStep step;
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/MigrationStep.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/model/MigrationStep.java
similarity index 93%
rename from 
dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/MigrationStep.java
rename to 
dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/model/MigrationStep.java
index f0b5ae3..1fe8ec8 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/MigrationStep.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/model/MigrationStep.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.registry.integration;
+package org.apache.dubbo.registry.client.migration.model;
 
 public enum MigrationStep {
     INTERFACE_FIRST,
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/DynamicDirectory.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/DynamicDirectory.java
index 22334ed..41e3584 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/DynamicDirectory.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/DynamicDirectory.java
@@ -26,6 +26,7 @@ import org.apache.dubbo.common.utils.NetUtils;
 import org.apache.dubbo.registry.NotifyListener;
 import org.apache.dubbo.registry.Registry;
 import 
org.apache.dubbo.registry.client.event.listener.ServiceInstancesChangedListener;
+import org.apache.dubbo.registry.client.migration.InvokersChangedListener;
 import org.apache.dubbo.rpc.Invocation;
 import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.Protocol;
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/InterfaceCompatibleRegistryProtocol.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/InterfaceCompatibleRegistryProtocol.java
index b73f674..d073aff 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/InterfaceCompatibleRegistryProtocol.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/InterfaceCompatibleRegistryProtocol.java
@@ -19,8 +19,8 @@ package org.apache.dubbo.registry.integration;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.URLBuilder;
 import org.apache.dubbo.registry.Registry;
-import org.apache.dubbo.registry.client.RegistryProtocol;
 import org.apache.dubbo.registry.client.ServiceDiscoveryRegistryDirectory;
+import org.apache.dubbo.registry.client.migration.MigrationInvoker;
 import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.cluster.Cluster;
 import org.apache.dubbo.rpc.cluster.ClusterInvoker;
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/RegistryProtocol.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
similarity index 95%
rename from 
dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/RegistryProtocol.java
rename to 
dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
index 945e65d..855b726 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/RegistryProtocol.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.registry.client;
+package org.apache.dubbo.registry.integration;
 
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.config.ConfigurationUtils;
@@ -31,21 +31,15 @@ import org.apache.dubbo.registry.NotifyListener;
 import org.apache.dubbo.registry.Registry;
 import org.apache.dubbo.registry.RegistryFactory;
 import org.apache.dubbo.registry.RegistryService;
-import org.apache.dubbo.registry.integration.AbstractConfiguratorListener;
-import org.apache.dubbo.registry.integration.DynamicDirectory;
-import 
org.apache.dubbo.registry.integration.InterfaceCompatibleRegistryProtocol;
-import org.apache.dubbo.registry.integration.MigrationInvoker;
-import org.apache.dubbo.registry.integration.RegistryDirectory;
-import org.apache.dubbo.registry.integration.RegistryProtocolListener;
+import org.apache.dubbo.registry.client.ServiceDiscoveryRegistryDirectory;
+import 
org.apache.dubbo.registry.client.migration.ServiceDiscoveryMigrationInvoker;
 import org.apache.dubbo.registry.retry.ReExportTask;
 import org.apache.dubbo.registry.support.SkipFailbackWrapperException;
 import org.apache.dubbo.rpc.Exporter;
-import org.apache.dubbo.rpc.Invocation;
 import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.Protocol;
 import org.apache.dubbo.rpc.ProtocolServer;
 import org.apache.dubbo.rpc.ProxyFactory;
-import org.apache.dubbo.rpc.Result;
 import org.apache.dubbo.rpc.RpcException;
 import org.apache.dubbo.rpc.cluster.Cluster;
 import org.apache.dubbo.rpc.cluster.ClusterInvoker;
@@ -837,30 +831,4 @@ public class RegistryProtocol implements Protocol {
         }
         return INSTANCE;
     }
-
-    public static class ServiceDiscoveryMigrationInvoker<T> extends 
MigrationInvoker<T> {
-
-        public ServiceDiscoveryMigrationInvoker(RegistryProtocol 
registryProtocol, Cluster cluster, Registry registry, Class<T> type, URL url) {
-            super(registryProtocol, cluster, registry, type, url);
-        }
-
-        @Override
-        public synchronized void fallbackToInterfaceInvoker() {
-            destroyServiceDiscoveryInvoker();
-        }
-
-        @Override
-        public synchronized void migrateToServiceDiscoveryInvoker(boolean 
forceMigrate) {
-            refreshServiceDiscoveryInvoker();
-        }
-
-        @Override
-        public Result invoke(Invocation invocation) throws RpcException {
-            ClusterInvoker<T> invoker = getServiceDiscoveryInvoker();
-            if (invoker == null) {
-                throw new IllegalStateException("There's no service discovery 
invoker available for service " + invocation.getServiceName());
-            }
-            return invoker.invoke(invocation);
-        }
-    }
 }
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocolListener.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocolListener.java
index ab9bc29..50bdca1 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocolListener.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocolListener.java
@@ -18,7 +18,6 @@ package org.apache.dubbo.registry.integration;
 
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.extension.SPI;
-import org.apache.dubbo.registry.client.RegistryProtocol;
 import org.apache.dubbo.rpc.Exporter;
 import org.apache.dubbo.rpc.Invoker;
 
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.migration.MigrationAddressComparator
 
b/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.migration.MigrationAddressComparator
new file mode 100644
index 0000000..b7fa71c
--- /dev/null
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.migration.MigrationAddressComparator
@@ -0,0 +1 @@
+default=org.apache.dubbo.registry.client.migration.DefaultMigrationAddressComparator
\ No newline at end of file
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.integration.MigrationAddressComparator
 
b/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.integration.MigrationAddressComparator
deleted file mode 100644
index 1c5c52d..0000000
--- 
a/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.integration.MigrationAddressComparator
+++ /dev/null
@@ -1 +0,0 @@
-default=org.apache.dubbo.registry.integration.DefaultMigrationAddressComparator
\ No newline at end of file
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.integration.RegistryProtocolListener
 
b/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.integration.RegistryProtocolListener
index d60633c..24943f7 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.integration.RegistryProtocolListener
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.integration.RegistryProtocolListener
@@ -1 +1 @@
-service-discovery=org.apache.dubbo.registry.client.ServiceDiscoveryRegistryProtocolListener
\ No newline at end of file
+migration=org.apache.dubbo.registry.client.migration.MigrationRuleListener
\ No newline at end of file
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.Protocol
 
b/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.Protocol
index 5dda00e..4c3b148 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.Protocol
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.Protocol
@@ -1,2 +1,2 @@
 
registry=org.apache.dubbo.registry.integration.InterfaceCompatibleRegistryProtocol
-service-discovery-registry=org.apache.dubbo.registry.client.RegistryProtocol
\ No newline at end of file
+service-discovery-registry=org.apache.dubbo.registry.integration.RegistryProtocol
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 26a6a63..e2c22aa 100644
--- a/pom.xml
+++ b/pom.xml
@@ -586,6 +586,43 @@
                     </execution>
                 </executions>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-release-plugin</artifactId>
+                <version>2.5.3</version>
+                <configuration>
+                    <autoVersionSubmodules>true</autoVersionSubmodules>
+                    <useReleaseProfile>false</useReleaseProfile>
+                    <releaseProfiles>release</releaseProfiles>
+                    <goals>deploy</goals>
+                    <arguments>${arguments}</arguments>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>flatten-maven-plugin</artifactId>
+                <version>${maven_flatten_version}</version>
+                <configuration>
+                    <updatePomFile>true</updatePomFile>
+                    <flattenMode>resolveCiFriendliesOnly</flattenMode>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>flatten</id>
+                        <phase>process-resources</phase>
+                        <goals>
+                            <goal>flatten</goal>
+                        </goals>
+                    </execution>
+                    <execution>
+                        <id>flatten.clean</id>
+                        <phase>clean</phase>
+                        <goals>
+                            <goal>clean</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
 
         <pluginManagement>

Reply via email to