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 <[email protected]>
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) {

Reply via email to