Refine Degrade rule checking.

This commit is contained in:
Carpenter Lee 2018-08-01 17:48:53 +08:00
parent d96172cca6
commit f144a2713f
1 changed files with 10 additions and 16 deletions

View File

@ -100,7 +100,7 @@ public class DegradeRule extends AbstractRule {
return cut; return cut;
} }
public void setCut(boolean cut) { private void setCut(boolean cut) {
this.cut = cut; this.cut = cut;
} }
@ -108,10 +108,6 @@ public class DegradeRule extends AbstractRule {
return passCount; return passCount;
} }
public void setPassCount(AtomicLong passCount) {
this.passCount = passCount;
}
public int getTimeWindow() { public int getTimeWindow() {
return timeWindow; return timeWindow;
} }
@ -143,12 +139,6 @@ public class DegradeRule extends AbstractRule {
if (grade != that.grade) { if (grade != that.grade) {
return false; return false;
} }
// if (cut != that.cut) { return false; }
//// AtomicLong dose not Override equals()
// if ((passCount == null && that.passCount != null)
// || (passCount.get() != that.passCount.get())) {
// return false;
// }
return true; return true;
} }
@ -158,9 +148,6 @@ public class DegradeRule extends AbstractRule {
result = 31 * result + new Double(count).hashCode(); result = 31 * result + new Double(count).hashCode();
result = 31 * result + timeWindow; result = 31 * result + timeWindow;
result = 31 * result + grade; result = 31 * result + grade;
// result = 31 * result + (cut ? 1 : 0);
// result = 31 * result + (passCount != null ? (int)passCount.get() :
// 0);
return result; return result;
} }
@ -179,6 +166,7 @@ public class DegradeRule extends AbstractRule {
if (grade == RuleConstant.DEGRADE_GRADE_RT) { if (grade == RuleConstant.DEGRADE_GRADE_RT) {
double rt = clusterNode.avgRt(); double rt = clusterNode.avgRt();
if (rt < this.count) { if (rt < this.count) {
passCount.set(0);
return true; return true;
} }
@ -189,11 +177,17 @@ public class DegradeRule extends AbstractRule {
} else { } else {
double exception = clusterNode.exceptionQps(); double exception = clusterNode.exceptionQps();
double success = clusterNode.successQps(); double success = clusterNode.successQps();
if (success == 0) { long total = clusterNode.totalQps();
// if total qps less than RT_MAX_EXCEED_N, pass.
if (total < RT_MAX_EXCEED_N) {
return true; return true;
} }
if (exception / success < count) { if (success == 0) {
return exception < RT_MAX_EXCEED_N;
}
if (exception / (success + exception) < count) {
return true; return true;
} }
} }