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) {