This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
The following commit(s) were added to refs/heads/master by this push:
new e8d645b Merge pull request #3566, optimize compareTo of Router to
guarantee consistent behaviour.
e8d645b is described below
commit e8d645b254c5fe8d786000473d62a5dcc2bebddc
Author: xujingfeng <[email protected]>
AuthorDate: Mon Mar 4 14:58:49 2019 +0800
Merge pull request #3566, optimize compareTo of Router to guarantee
consistent behaviour.
---
.../main/java/org/apache/dubbo/rpc/cluster/Router.java | 15 ++++-----------
.../apache/dubbo/rpc/cluster/router/AbstractRouter.java | 2 +-
.../rpc/cluster/router/condition/ConditionRouter.java | 3 +--
.../rpc/cluster/router/condition/config/AppRouter.java | 5 +++++
.../cluster/router/condition/config/ListenableRouter.java | 2 +-
.../cluster/router/condition/config/ServiceRouter.java | 5 +++++
.../rpc/cluster/router/mock/MockInvokersSelector.java | 11 +++++------
.../dubbo/rpc/cluster/router/script/ScriptRouter.java | 12 ++----------
.../apache/dubbo/rpc/cluster/router/tag/TagRouter.java | 11 +++--------
9 files changed, 27 insertions(+), 39 deletions(-)
diff --git
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Router.java
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Router.java
index 70fd8fa..fadefde 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Router.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Router.java
@@ -32,6 +32,9 @@ import java.util.List;
* @see org.apache.dubbo.rpc.cluster.Directory#list(Invocation)
*/
public interface Router extends Comparable<Router> {
+
+ int DEFAULT_PRIORITY = Integer.MAX_VALUE;
+
/**
* Get the router url.
*
@@ -91,16 +94,6 @@ public interface Router extends Comparable<Router> {
if (o == null) {
throw new IllegalArgumentException();
}
- if (this.getPriority() == o.getPriority()) {
- if (o.getUrl() == null) {
- return 1;
- }
- if (getUrl() == null) {
- return -1;
- }
- return
getUrl().toFullString().compareTo(o.getUrl().toFullString());
- } else {
- return getPriority() > o.getPriority() ? 1 : -1;
- }
+ return Integer.compare(this.getPriority(), o.getPriority());
}
}
diff --git
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/AbstractRouter.java
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/AbstractRouter.java
index f826dae..657ad86 100644
---
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/AbstractRouter.java
+++
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/AbstractRouter.java
@@ -21,7 +21,7 @@ import org.apache.dubbo.configcenter.DynamicConfiguration;
import org.apache.dubbo.rpc.cluster.Router;
public abstract class AbstractRouter implements Router {
- protected int priority;
+ protected int priority = DEFAULT_PRIORITY;
protected boolean force = false;
protected URL url;
diff --git
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/ConditionRouter.java
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/ConditionRouter.java
index 844b1b8..6549cda 100644
---
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/ConditionRouter.java
+++
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/ConditionRouter.java
@@ -27,7 +27,6 @@ import org.apache.dubbo.common.utils.UrlUtils;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.RpcException;
-import org.apache.dubbo.rpc.cluster.Router;
import org.apache.dubbo.rpc.cluster.router.AbstractRouter;
import java.text.ParseException;
@@ -44,7 +43,7 @@ import java.util.regex.Pattern;
* ConditionRouter
*
*/
-public class ConditionRouter extends AbstractRouter implements
Comparable<Router> {
+public class ConditionRouter extends AbstractRouter {
public static final String NAME = "condition";
private static final Logger logger =
LoggerFactory.getLogger(ConditionRouter.class);
diff --git
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/AppRouter.java
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/AppRouter.java
index 9c723df..31a5df1 100644
---
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/AppRouter.java
+++
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/AppRouter.java
@@ -25,8 +25,13 @@ import org.apache.dubbo.configcenter.DynamicConfiguration;
*/
public class AppRouter extends ListenableRouter {
public static final String NAME = "APP_ROUTER";
+ /**
+ * AppRouter should after ServiceRouter
+ */
+ private static final int APP_ROUTER_DEFAULT_PRIORITY = 150;
public AppRouter(DynamicConfiguration configuration, URL url) {
super(configuration, url, url.getParameter(Constants.APPLICATION_KEY));
+ this.priority = APP_ROUTER_DEFAULT_PRIORITY;
}
}
diff --git
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/ListenableRouter.java
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/ListenableRouter.java
index 65a4eec..913fd55 100644
---
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/ListenableRouter.java
+++
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/ListenableRouter.java
@@ -44,7 +44,7 @@ import java.util.stream.Collectors;
public abstract class ListenableRouter extends AbstractRouter implements
ConfigurationListener {
public static final String NAME = "LISTENABLE_ROUTER";
private static final String RULE_SUFFIX = ".condition-router";
- public static final int DEFAULT_PRIORITY = 200;
+
private static final Logger logger =
LoggerFactory.getLogger(ListenableRouter.class);
private ConditionRouterRule routerRule;
private List<ConditionRouter> conditionRouters = Collections.emptyList();
diff --git
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/ServiceRouter.java
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/ServiceRouter.java
index c76f2a7..ed3748e 100644
---
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/ServiceRouter.java
+++
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/ServiceRouter.java
@@ -24,8 +24,13 @@ import org.apache.dubbo.configcenter.DynamicConfiguration;
*/
public class ServiceRouter extends ListenableRouter {
public static final String NAME = "SERVICE_ROUTER";
+ /**
+ * ServiceRouter should before AppRouter
+ */
+ private static final int SERVICE_ROUTER_DEFAULT_PRIORITY = 140;
public ServiceRouter(DynamicConfiguration configuration, URL url) {
super(configuration, url, url.getEncodedServiceKey());
+ this.priority = SERVICE_ROUTER_DEFAULT_PRIORITY;
}
}
diff --git
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mock/MockInvokersSelector.java
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mock/MockInvokersSelector.java
index d6961d6..78ada66 100644
---
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mock/MockInvokersSelector.java
+++
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mock/MockInvokersSelector.java
@@ -30,11 +30,15 @@ import java.util.List;
/**
* A specific Router designed to realize mock feature.
* If a request is configured to use mock, then this router guarantees that
only the invokers with protocol MOCK appear in final the invoker list, all
other invokers will be excluded.
- *
*/
public class MockInvokersSelector extends AbstractRouter {
public static final String NAME = "MOCK_ROUTER";
+ private static final int MOCK_INVOKERS_DEFAULT_PRIORITY =
Integer.MIN_VALUE;
+
+ public MockInvokersSelector() {
+ this.priority = MOCK_INVOKERS_DEFAULT_PRIORITY;
+ }
@Override
public <T> List<Invoker<T>> route(final List<Invoker<T>> invokers,
@@ -94,9 +98,4 @@ public class MockInvokersSelector extends AbstractRouter {
return hasMockProvider;
}
- @Override
- public int getPriority() {
- return Integer.MAX_VALUE;
- }
-
}
diff --git
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/script/ScriptRouter.java
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/script/ScriptRouter.java
index b7f3587..0b47d2e 100644
---
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/script/ScriptRouter.java
+++
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/script/ScriptRouter.java
@@ -25,7 +25,6 @@ import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.RpcContext;
import org.apache.dubbo.rpc.RpcException;
-import org.apache.dubbo.rpc.cluster.Router;
import org.apache.dubbo.rpc.cluster.router.AbstractRouter;
import javax.script.Bindings;
@@ -46,6 +45,7 @@ import java.util.stream.Collectors;
*/
public class ScriptRouter extends AbstractRouter {
public static final String NAME = "SCRIPT_ROUTER";
+ private static final int SCRIPT_ROUTER_DEFAULT_PRIORITY = 0;
private static final Logger logger =
LoggerFactory.getLogger(ScriptRouter.class);
private static final Map<String, ScriptEngine> engines = new
ConcurrentHashMap<>();
@@ -58,7 +58,7 @@ public class ScriptRouter extends AbstractRouter {
public ScriptRouter(URL url) {
this.url = url;
- this.priority = url.getParameter(Constants.PRIORITY_KEY, 0);
+ this.priority = url.getParameter(Constants.PRIORITY_KEY,
SCRIPT_ROUTER_DEFAULT_PRIORITY);
engine = getEngine(url);
rule = getRule(url);
@@ -150,12 +150,4 @@ public class ScriptRouter extends AbstractRouter {
return url.getParameter(Constants.FORCE_KEY, false);
}
- @Override
- public int compareTo(Router o) {
- if (o == null || o.getClass() != ScriptRouter.class) {
- return 1;
- }
- ScriptRouter c = (ScriptRouter) o;
- return this.priority == c.priority ? rule.compareTo(c.rule) :
(this.priority > c.priority ? 1 : -1);
- }
}
diff --git
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java
index c8e8750..3150c29 100644
---
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java
+++
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java
@@ -29,7 +29,6 @@ import org.apache.dubbo.configcenter.DynamicConfiguration;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.RpcException;
-import org.apache.dubbo.rpc.cluster.Router;
import org.apache.dubbo.rpc.cluster.router.AbstractRouter;
import org.apache.dubbo.rpc.cluster.router.tag.model.TagRouterRule;
import org.apache.dubbo.rpc.cluster.router.tag.model.TagRuleParser;
@@ -44,9 +43,9 @@ import static org.apache.dubbo.common.Constants.TAG_KEY;
/**
* TagRouter, "application.tag-router"
*/
-public class TagRouter extends AbstractRouter implements Comparable<Router>,
ConfigurationListener {
+public class TagRouter extends AbstractRouter implements ConfigurationListener
{
public static final String NAME = "TAG_ROUTER";
- private static final int DEFAULT_PRIORITY = 100;
+ private static final int TAG_ROUTER_DEFAULT_PRIORITY = 100;
private static final Logger logger =
LoggerFactory.getLogger(TagRouter.class);
private static final String RULE_SUFFIX = ".tag-router";
@@ -55,6 +54,7 @@ public class TagRouter extends AbstractRouter implements
Comparable<Router>, Con
public TagRouter(DynamicConfiguration configuration, URL url) {
super(configuration, url);
+ this.priority = TAG_ROUTER_DEFAULT_PRIORITY;
}
@Override
@@ -173,11 +173,6 @@ public class TagRouter extends AbstractRouter implements
Comparable<Router>, Con
}
@Override
- public int getPriority() {
- return DEFAULT_PRIORITY;
- }
-
- @Override
public boolean isRuntime() {
return tagRouterRule != null && tagRouterRule.isRuntime();
}