Skip to content

Commit ff8238c

Browse files
committed
Add enabled instances filter before weight-random load balance
1 parent f65bba4 commit ff8238c

File tree

2 files changed

+42
-28
lines changed

2 files changed

+42
-28
lines changed

discovery-plugin-framework/discovery-plugin-framework-starter/src/main/java/com/nepxion/discovery/plugin/framework/decorator/PredicateBasedRuleDecorator.java

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import com.nepxion.discovery.plugin.framework.loadbalance.DiscoveryEnabledLoadBalance;
2020
import com.nepxion.discovery.plugin.framework.loadbalance.weight.RuleWeightRandomLoadBalance;
2121
import com.nepxion.discovery.plugin.framework.loadbalance.weight.StrategyWeightRandomLoadBalance;
22-
import com.netflix.loadbalancer.ILoadBalancer;
2322
import com.netflix.loadbalancer.PredicateBasedRule;
2423
import com.netflix.loadbalancer.Server;
2524

@@ -40,55 +39,63 @@ private List<Server> getServerList(Object key) {
4039

4140
@Override
4241
public Server choose(Object key) {
42+
List<Server> serverList = getServerList(key);
43+
4344
boolean isTriggered = false;
4445

4546
WeightFilterEntity strategyWeightFilterEntity = strategyWeightRandomLoadBalance.getT();
4647
if (strategyWeightFilterEntity != null && strategyWeightFilterEntity.hasWeight()) {
4748
isTriggered = true;
4849

49-
List<Server> serverList = getServerList(key);
5050
boolean isWeightChecked = strategyWeightRandomLoadBalance.checkWeight(serverList, strategyWeightFilterEntity);
5151
if (isWeightChecked) {
5252
try {
53-
return strategyWeightRandomLoadBalance.choose(serverList, strategyWeightFilterEntity);
53+
List<Server> filterServerList = filterEnabledServers(serverList);
54+
55+
return strategyWeightRandomLoadBalance.choose(filterServerList, strategyWeightFilterEntity);
5456
} catch (Exception e) {
55-
return filterChoose(key);
57+
return filterChoose(serverList, key);
5658
}
5759
} else {
58-
return filterChoose(key);
60+
return filterChoose(serverList, key);
5961
}
6062
}
6163

6264
if (!isTriggered) {
6365
WeightFilterEntity ruleWeightFilterEntity = ruleWeightRandomLoadBalance.getT();
6466
if (ruleWeightFilterEntity != null && ruleWeightFilterEntity.hasWeight()) {
65-
List<Server> serverList = getServerList(key);
6667
boolean isWeightChecked = ruleWeightRandomLoadBalance.checkWeight(serverList, ruleWeightFilterEntity);
6768
if (isWeightChecked) {
6869
try {
69-
return ruleWeightRandomLoadBalance.choose(serverList, ruleWeightFilterEntity);
70+
List<Server> filterServerList = filterEnabledServers(serverList);
71+
72+
return ruleWeightRandomLoadBalance.choose(filterServerList, ruleWeightFilterEntity);
7073
} catch (Exception e) {
71-
return filterChoose(key);
74+
return filterChoose(serverList, key);
7275
}
7376
} else {
74-
return filterChoose(key);
77+
return filterChoose(serverList, key);
7578
}
7679
}
7780
}
7881

79-
return filterChoose(key);
82+
return filterChoose(serverList, key);
8083
}
8184

82-
public Server filterChoose(Object key) {
83-
ILoadBalancer lb = getLoadBalancer();
84-
85+
public List<Server> filterEnabledServers(List<Server> servers) {
8586
List<Server> serverList = new ArrayList<Server>();
86-
serverList.addAll(lb.getAllServers());
87+
serverList.addAll(servers);
8788

8889
if (discoveryEnabledLoadBalance != null) {
8990
discoveryEnabledLoadBalance.filter(serverList);
9091
}
9192

93+
return serverList;
94+
}
95+
96+
public Server filterChoose(List<Server> servers, Object key) {
97+
List<Server> serverList = filterEnabledServers(servers);
98+
9299
Optional<Server> server = getPredicate().chooseRoundRobinAfterFiltering(serverList, key);
93100
if (server.isPresent()) {
94101
return server.get();

discovery-plugin-framework/discovery-plugin-framework-starter/src/main/java/com/nepxion/discovery/plugin/framework/decorator/ZoneAvoidanceRuleDecorator.java

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import com.nepxion.discovery.plugin.framework.loadbalance.DiscoveryEnabledLoadBalance;
2020
import com.nepxion.discovery.plugin.framework.loadbalance.weight.RuleWeightRandomLoadBalance;
2121
import com.nepxion.discovery.plugin.framework.loadbalance.weight.StrategyWeightRandomLoadBalance;
22-
import com.netflix.loadbalancer.ILoadBalancer;
2322
import com.netflix.loadbalancer.Server;
2423
import com.netflix.loadbalancer.ZoneAvoidanceRule;
2524

@@ -40,55 +39,63 @@ private List<Server> getServerList(Object key) {
4039

4140
@Override
4241
public Server choose(Object key) {
42+
List<Server> serverList = getServerList(key);
43+
4344
boolean isTriggered = false;
4445

4546
WeightFilterEntity strategyWeightFilterEntity = strategyWeightRandomLoadBalance.getT();
4647
if (strategyWeightFilterEntity != null && strategyWeightFilterEntity.hasWeight()) {
4748
isTriggered = true;
4849

49-
List<Server> serverList = getServerList(key);
5050
boolean isWeightChecked = strategyWeightRandomLoadBalance.checkWeight(serverList, strategyWeightFilterEntity);
5151
if (isWeightChecked) {
5252
try {
53-
return strategyWeightRandomLoadBalance.choose(serverList, strategyWeightFilterEntity);
53+
List<Server> filterServerList = filterEnabledServers(serverList);
54+
55+
return strategyWeightRandomLoadBalance.choose(filterServerList, strategyWeightFilterEntity);
5456
} catch (Exception e) {
55-
return filterChoose(key);
57+
return filterChoose(serverList, key);
5658
}
5759
} else {
58-
return filterChoose(key);
60+
return filterChoose(serverList, key);
5961
}
6062
}
6163

6264
if (!isTriggered) {
6365
WeightFilterEntity ruleWeightFilterEntity = ruleWeightRandomLoadBalance.getT();
6466
if (ruleWeightFilterEntity != null && ruleWeightFilterEntity.hasWeight()) {
65-
List<Server> serverList = getServerList(key);
6667
boolean isWeightChecked = ruleWeightRandomLoadBalance.checkWeight(serverList, ruleWeightFilterEntity);
6768
if (isWeightChecked) {
6869
try {
69-
return ruleWeightRandomLoadBalance.choose(serverList, ruleWeightFilterEntity);
70+
List<Server> filterServerList = filterEnabledServers(serverList);
71+
72+
return ruleWeightRandomLoadBalance.choose(filterServerList, ruleWeightFilterEntity);
7073
} catch (Exception e) {
71-
return filterChoose(key);
74+
return filterChoose(serverList, key);
7275
}
7376
} else {
74-
return filterChoose(key);
77+
return filterChoose(serverList, key);
7578
}
7679
}
7780
}
7881

79-
return filterChoose(key);
82+
return filterChoose(serverList, key);
8083
}
8184

82-
public Server filterChoose(Object key) {
83-
ILoadBalancer lb = getLoadBalancer();
84-
85+
public List<Server> filterEnabledServers(List<Server> servers) {
8586
List<Server> serverList = new ArrayList<Server>();
86-
serverList.addAll(lb.getAllServers());
87+
serverList.addAll(servers);
8788

8889
if (discoveryEnabledLoadBalance != null) {
8990
discoveryEnabledLoadBalance.filter(serverList);
9091
}
9192

93+
return serverList;
94+
}
95+
96+
public Server filterChoose(List<Server> servers, Object key) {
97+
List<Server> serverList = filterEnabledServers(servers);
98+
9299
Optional<Server> server = getPredicate().chooseRoundRobinAfterFiltering(serverList, key);
93100
if (server.isPresent()) {
94101
return server.get();

0 commit comments

Comments
 (0)