[SCB-2665]Add the load balance governance #3267
Conversation
…onfiguration item.
| LoadBalanceDecorateCheckedSupplier<Object> ds = LoadBalanceDecorators.ofCheckedSupplier(()->"test"); | ||
| GovernanceRequest request = new GovernanceRequest(); | ||
| request.setUri("/loadrandom"); | ||
| request.setServiceName("RandomTest"); | ||
| LoadBalance loadBalance = loadBalanceHandler.getActuator(request); | ||
| Assert.assertEquals("Random",ds.withFaultInjection(loadBalance)); |
There was a problem hiding this comment.
I think for load balance do not need this complicity.
for example
GovernanceRequest request = new GovernanceRequest();
request.setUri("/loadrandom");
request.setServiceName("RandomTest");
LoadBalance loadBalance = loadBalanceHandler.getActuator(request);
Assert.assertEquals("Random",loadBalance.getRule());
This is quit enough
| servicecomb: | ||
| loadbalance: | ||
| rule: | | ||
| loadrule: Random |
There was a problem hiding this comment.
servicecomb:
loadbalance:
XXXXXXMatch: |
rule: Random
Use this definition and should define matchGroup for XXXXXXMatch
| package org.apache.servicecomb.governance.policy; | ||
|
|
||
| public class LoadBalancerPolicy extends AbstractPolicy { | ||
| private String loadrule; |
| if (key.equals("rule")) { | ||
| return true; | ||
| } |
| public abstract class AbstractLoadbalance implements LoadBalance { | ||
| protected String loadrule; | ||
|
|
||
| public AbstractLoadbalance(String loadrule) { | ||
| this.loadrule = loadrule; | ||
| } | ||
|
|
||
| @Override | ||
| public String choose() { | ||
| return choose(loadrule); | ||
| } | ||
|
|
| static String decorateCheckedSupplier(LoadBalance loadBalance) { | ||
| return loadBalance.choose(); | ||
| } | ||
|
|
||
| public String choose(); | ||
|
|
||
| public String choose(String type); | ||
|
|
||
| int getOrder(); | ||
|
|
||
| String getName(); |
There was a problem hiding this comment.
only need one method getRule which return rule in LoadBalancePolicy
| public interface LoadBalanceDecorators { | ||
| static <T> LoadBalanceDecorateCheckedSupplier<T> ofCheckedSupplier(CheckedFunction0<T> supplier) { | ||
| return new LoadBalanceDecorateCheckedSupplier<>(supplier); | ||
| } | ||
|
|
||
| class LoadBalanceDecorateCheckedSupplier<T> { | ||
|
|
||
| private CheckedFunction0<T> supplier; | ||
|
|
||
| protected LoadBalanceDecorateCheckedSupplier(CheckedFunction0<T> supplier) { | ||
| this.supplier = supplier; | ||
| } | ||
|
|
||
| public String withFaultInjection(LoadBalance loadBalance) { | ||
| return LoadBalance.decorateCheckedSupplier(loadBalance); | ||
| } | ||
|
|
||
| public T get() throws Throwable { |
| public class LoadBalanceUtil { | ||
|
|
||
| public static LoadBalance getLoadBalance(String key, LoadBalancerPolicy policy) { | ||
| LoadBalance loadBalance = null; | ||
| if (LoadBalanceConst.TYPE_RANDOM.equals(policy.getLoadrule())) { | ||
| loadBalance = new RandomBalancer(LoadBalanceConst.TYPE_RANDOM); | ||
| } else if (LoadBalanceConst.TYPE_ROUNDROBIN.equals(policy.getLoadrule())) { | ||
| loadBalance = new RoundRobinBalancer(LoadBalanceConst.TYPE_ROUNDROBIN); | ||
| } | ||
| return loadBalance; | ||
| } | ||
| } |
| public class RandomBalancer extends AbstractLoadbalance implements LoadBalance{ | ||
|
|
||
| public RandomBalancer(String loadrule) { | ||
| super(loadrule); | ||
| } | ||
|
|
||
| @Override | ||
| public String choose(String loadrule) { | ||
| return loadrule; | ||
| } | ||
|
|
||
| @Override | ||
| public int getOrder() { | ||
| return 100; | ||
| } | ||
|
|
||
| @Override | ||
| public String getName() { | ||
| return LoadBalanceConst.TYPE_RANDOM; | ||
| } | ||
| } |
|
|
||
| public RoundRobinBalancer(String loadrule) { | ||
| super(loadrule); | ||
| } | ||
|
|
||
| @Override | ||
| public String choose(String loadrule) { | ||
| return loadrule; | ||
| } | ||
|
|
||
| @Override | ||
| public int getOrder() { | ||
| return 100; | ||
| } | ||
|
|
||
| @Override |
|
|
||
| @Override | ||
| protected LoadBalance createProcessor(String key, GovernanceRequest governanceRequest, LoadBalancerPolicy policy) { | ||
| return LoadBalanceUtil.getLoadBalance(key, policy); |
There was a problem hiding this comment.
return new LoadBalanceImpl()
class LoadBalanceImpl implements LoadBalance {
@Override
public String getRule() {
return policy.getRule();
}
}
| @Override | ||
| public int getOrder() { | ||
| return 100; | ||
| } | ||
|
|
||
| @Override | ||
| public String getName() { | ||
| return null; | ||
| } |
There was a problem hiding this comment.
This two methods never read, why add them?
| package org.apache.servicecomb.loadbanlance; | ||
|
|
||
| public class LoadBalanceImpl implements LoadBalance { | ||
| private String rule; |
| public String getRule() { | ||
| return rule; | ||
| } | ||
|
|
||
| public void setRule(String rule) { | ||
| this.rule = rule; | ||
| } |
There was a problem hiding this comment.
put methods definition after constructor
| public class LoadBalanceUtil { | ||
|
|
||
| public static LoadBalance getLoadBalance(String key, LoadBalancerPolicy policy) { | ||
| LoadBalance loadBalance = new LoadBalanceImpl(policy.getRule()); | ||
| return loadBalance; | ||
| } | ||
| } |
There was a problem hiding this comment.
delete this class and inline code
| int getOrder(); | ||
|
|
||
| String getName(); |
There was a problem hiding this comment.
these two methods never read, why add them?
| @@ -0,0 +1,28 @@ | |||
| package org.apache.servicecomb.loadbanlance; | |||
| @@ -0,0 +1,43 @@ | |||
| package org.apache.servicecomb.governance; | |||
Codecov Report
@@ Coverage Diff @@
## master #3267 +/- ##
============================================
+ Coverage 77.44% 77.45% +0.01%
Complexity 1439 1439
============================================
Files 1641 1646 +5
Lines 43575 43596 +21
Branches 3665 3665
============================================
+ Hits 33746 33767 +21
Misses 8309 8309
Partials 1520 1520
📣 Codecov can now indicate which changes are the most critical in Pull Requests. Learn more |
Follow this checklist to help us incorporate your contribution quickly and easily:
[SCB-XXX] Fixes bug in ApproximateQuantiles, where you replaceSCB-XXXwith the appropriate JIRA issue.mvn clean install -Pitto make sure basic checks pass. A more thorough check will be performed on your pull request automatically.