You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2023/05/24 12:19:33 UTC
[dubbo] branch 3.2 updated: Fix alibaba AbstractLoadBalance compact (#12394)
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 <jh...@gmail.com>
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);
+ }
}