You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2024/07/27 03:18:25 UTC
(servicecomb-java-chassis) branch 2.8.x updated: [#4427]able to disable both consumer and provider zone-aware (#4430)
This is an automated email from the ASF dual-hosted git repository.
liubao pushed a commit to branch 2.8.x
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
The following commit(s) were added to refs/heads/2.8.x by this push:
new 384bece6d [#4427]able to disable both consumer and provider zone-aware (#4430)
384bece6d is described below
commit 384bece6d59e3e4d7c4cdf616a55610835689f20
Author: liubao68 <bi...@qq.com>
AuthorDate: Sat Jul 27 11:18:20 2024 +0800
[#4427]able to disable both consumer and provider zone-aware (#4430)
---
.../loadbalance/filterext/ZoneAwareDiscoveryFilter.java | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filterext/ZoneAwareDiscoveryFilter.java b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filterext/ZoneAwareDiscoveryFilter.java
index 4702f53c8..fdf621892 100644
--- a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filterext/ZoneAwareDiscoveryFilter.java
+++ b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filterext/ZoneAwareDiscoveryFilter.java
@@ -31,6 +31,8 @@ import com.netflix.config.DynamicPropertyFactory;
public class ZoneAwareDiscoveryFilter implements ServerListFilterExt {
public static final String CONFIG_RATIO = "servicecomb.loadbalance.filter.zoneaware.ratio";
+ public static final String CONFIG_RATIO_CEILING = "servicecomb.loadbalance.filter.zoneaware.ratioCeiling";
+
@Override
public int getOrder() {
return ORDER_ZONE_AWARE;
@@ -48,6 +50,11 @@ public class ZoneAwareDiscoveryFilter implements ServerListFilterExt {
.getIntProperty(CONFIG_RATIO, 30).get();
}
+ private int getRatioCeiling() {
+ return DynamicPropertyFactory.getInstance()
+ .getIntProperty(CONFIG_RATIO_CEILING, 70).get();
+ }
+
@Override
public List<ServiceCombServer> getFilteredListOfServers(List<ServiceCombServer> servers,
Invocation invocation) {
@@ -67,14 +74,15 @@ public class ZoneAwareDiscoveryFilter implements ServerListFilterExt {
});
int ratio = getRatio();
+ int ratioCeiling = getRatioCeiling();
- if (hasEnoughMembers(servers.size(), instancesRegionAndAZMatch.size(), ratio)) {
+ if (hasEnoughMembers(servers.size(), instancesRegionAndAZMatch.size(), ratio, ratioCeiling)) {
return instancesRegionAndAZMatch;
} else {
instancesAZMatch.addAll(instancesRegionAndAZMatch);
}
- if (hasEnoughMembers(servers.size(), instancesAZMatch.size(), ratio)) {
+ if (hasEnoughMembers(servers.size(), instancesAZMatch.size(), ratio, ratioCeiling)) {
return instancesAZMatch;
} else {
instancesNoMatch.addAll(instancesAZMatch);
@@ -82,11 +90,12 @@ public class ZoneAwareDiscoveryFilter implements ServerListFilterExt {
return instancesNoMatch;
}
- private boolean hasEnoughMembers(int totalSize, int groupSize, int ratio) {
+ private boolean hasEnoughMembers(int totalSize, int groupSize, int ratio, int ratioCeiling) {
if (totalSize == 0 || groupSize == 0) {
return false;
}
- return Math.floorDiv(groupSize * 100, totalSize) >= ratio;
+ int actual = Math.floorDiv(groupSize * 100, totalSize);
+ return actual >= ratio && actual <= ratioCeiling;
}
private boolean regionAndAZMatch(MicroserviceInstance myself, MicroserviceInstance target) {