Skip to content

Commit cf7ed5c

Browse files
feat:support recover router zero protect switch. (#611)
1 parent 5c8ce7f commit cf7ed5c

File tree

4 files changed

+21
-9
lines changed

4 files changed

+21
-9
lines changed

polaris-common/polaris-config-default/src/main/resources/conf/default-config.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,8 @@ consumer:
212212
recoverRouter:
213213
# 是否剔除被熔断的实例
214214
excludeCircuitBreakInstances: true
215+
# 是否启用全死全活
216+
allRecoverEnable: true
215217
metadataRouter:
216218
#描述: 元数据路由降级策略。none(不降级), all(降级返回所有的节点), others(降级返回其他KEY的节点)
217219
metadataFailOverType: all

polaris-common/polaris-config/src/main/java/com/tencent/polaris/factory/config/global/APIConfigImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,8 @@ public void setDefault(Object defaultObject) {
160160
if (null == reportInterval) {
161161
setReportInterval(apiConfig.getReportInterval());
162162
}
163-
if (null == reportInterval) {
164-
setReportInterval(apiConfig.getReportInterval());
163+
if (null == reportEnable) {
164+
setReportEnable(apiConfig.isReportEnable());
165165
}
166166
if (null == retryInterval) {
167167
setRetryInterval(apiConfig.getRetryInterval());

polaris-plugins/polaris-plugins-router/router-healthy/src/main/java/com/tencent/polaris/plugins/router/healthy/RecoverRouter.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,12 @@
2828
import com.tencent.polaris.api.plugin.common.PluginTypes;
2929
import com.tencent.polaris.api.plugin.route.RouteInfo;
3030
import com.tencent.polaris.api.plugin.route.RouteResult;
31-
import com.tencent.polaris.api.pojo.CircuitBreakerStatus;
32-
import com.tencent.polaris.api.pojo.Instance;
33-
import com.tencent.polaris.api.pojo.ServiceInstances;
34-
import com.tencent.polaris.api.pojo.ServiceKey;
35-
import com.tencent.polaris.api.pojo.ServiceMetadata;
31+
import com.tencent.polaris.api.pojo.*;
3632
import com.tencent.polaris.circuitbreak.api.flow.CircuitBreakerFlow;
3733
import com.tencent.polaris.circuitbreak.api.pojo.CheckResult;
38-
import com.tencent.polaris.circuitbreak.client.api.DefaultCircuitBreakAPI;
3934
import com.tencent.polaris.client.util.Utils;
4035
import com.tencent.polaris.plugins.router.common.AbstractServiceRouter;
36+
4137
import java.util.List;
4238
import java.util.function.Predicate;
4339
import java.util.stream.Collectors;
@@ -76,7 +72,7 @@ public boolean test(Instance instance) {
7672

7773
int healthyInstanceCount = healthyInstance.size();
7874
//如果过滤之后,没有实例,则返回全量的实例。推空保护
79-
if (healthyInstanceCount == 0) {
75+
if (recoverRouterConfig.isAllRecoverEnable() && healthyInstanceCount == 0) {
8076
return new RouteResult(instances.getInstances(), RouteResult.State.Next);
8177
}
8278

polaris-plugins/polaris-plugins-router/router-healthy/src/main/java/com/tencent/polaris/plugins/router/healthy/RecoverRouterConfig.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ public class RecoverRouterConfig implements Verifier {
3030
@JsonProperty
3131
private Boolean excludeCircuitBreakInstances;
3232

33+
@JsonProperty
34+
private Boolean allRecoverEnable;
35+
3336
@Override
3437
public void verify() {
3538

@@ -42,6 +45,9 @@ public void setDefault(Object defaultConfig) {
4245
if (excludeCircuitBreakInstances == null) {
4346
setExcludeCircuitBreakInstances(recoverRouterConfig.isExcludeCircuitBreakInstances());
4447
}
48+
if (allRecoverEnable == null) {
49+
setAllRecoverEnable(recoverRouterConfig.isAllRecoverEnable());
50+
}
4551
}
4652
}
4753

@@ -52,4 +58,12 @@ public Boolean isExcludeCircuitBreakInstances() {
5258
public void setExcludeCircuitBreakInstances(Boolean excludeCircuitBreakInstances) {
5359
this.excludeCircuitBreakInstances = excludeCircuitBreakInstances;
5460
}
61+
62+
public Boolean isAllRecoverEnable() {
63+
return allRecoverEnable;
64+
}
65+
66+
public void setAllRecoverEnable(Boolean allRecoverEnable) {
67+
this.allRecoverEnable = allRecoverEnable;
68+
}
5569
}

0 commit comments

Comments
 (0)