This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch 3.2
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.2 by this push:
new da70e9097f Fix alibaba AbstractLoadBalance compact (#12394)
da70e9097f is described below
commit da70e9097f8c4c796f4f3546f8f1e4699e9880b1
Author: Albumen Kevin <[email protected]>
AuthorDate: Wed May 24 20:19:25 2023 +0800
Fix alibaba AbstractLoadBalance compact (#12394)
---
.../cluster/loadbalance/AbstractLoadBalance.java | 41 +++++++++++++++++++++-
1 file changed, 40 insertions(+), 1 deletion(-)
diff --git
a/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/cluster/loadbalance/AbstractLoadBalance.java
b/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/cluster/loadbalance/AbstractLoadBalance.java
index 3ec1c78522..f4aa339403 100644
---
a/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/cluster/loadbalance/AbstractLoadBalance.java
+++
b/dubbo-compatible/src/main/java/com/alibaba/dubbo/rpc/cluster/loadbalance/AbstractLoadBalance.java
@@ -17,6 +17,45 @@
package com.alibaba.dubbo.rpc.cluster.loadbalance;
+import com.alibaba.dubbo.common.Constants;
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.rpc.Invocation;
+import com.alibaba.dubbo.rpc.Invoker;
+import com.alibaba.dubbo.rpc.cluster.LoadBalance;
+
+import java.util.List;
+
@Deprecated
-public abstract class AbstractLoadBalance extends
org.apache.dubbo.rpc.cluster.loadbalance.AbstractLoadBalance {
+public abstract class AbstractLoadBalance extends
org.apache.dubbo.rpc.cluster.loadbalance.AbstractLoadBalance implements
LoadBalance {
+
+ @Override
+ public <T> Invoker<T> select(List<Invoker<T>> invokers, URL url,
Invocation invocation) {
+ if (invokers == null || invokers.size() == 0)
+ return null;
+ if (invokers.size() == 1)
+ return invokers.get(0);
+ return doSelect(invokers, url, invocation);
+ }
+
+ protected abstract <T> Invoker<T> doSelect(List<Invoker<T>> invokers, URL
url, Invocation invocation);
+
+ protected int getWeight(Invoker<?> invoker, Invocation invocation) {
+ int weight =
invoker.getUrl().getMethodParameter(invocation.getMethodName(),
Constants.WEIGHT_KEY, Constants.DEFAULT_WEIGHT);
+ if (weight > 0) {
+ long timestamp =
invoker.getUrl().getParameter(Constants.TIMESTAMP_KEY, 0L);
+ if (timestamp > 0L) {
+ int uptime = (int) (System.currentTimeMillis() - timestamp);
+ int warmup =
invoker.getUrl().getParameter(Constants.WARMUP_KEY, Constants.DEFAULT_WARMUP);
+ if (uptime > 0 && uptime < warmup) {
+ weight = calculateWarmupWeight(uptime, warmup, weight);
+ }
+ }
+ }
+ return weight;
+ }
+
+ static int calculateWarmupWeight(int uptime, int warmup, int weight) {
+ int ww = (int) ( (float) uptime / ( (float) warmup / (float) weight )
);
+ return ww < 1 ? 1 : (ww > weight ? weight : ww);
+ }
}