Fix update logic of minRt in bucket

- Fix incorrect usage. It's not thread-safe when comparing and updating `minRt`, but it's okay since the actual minimum RT often matches free load.

Signed-off-by: Eric Zhao <sczyh16@gmail.com>
This commit is contained in:
Eric Zhao 2018-08-14 20:23:42 +08:00
parent 6392cb0336
commit 820160d542
2 changed files with 11 additions and 7 deletions

View File

@ -15,6 +15,8 @@
*/
package com.alibaba.csp.sentinel.slots.statistic.base;
import com.alibaba.csp.sentinel.Constants;
/**
* Represents metrics data in a period of time window.
*
@ -28,14 +30,15 @@ public class Window {
private final LongAdder exception = new LongAdder();
private final LongAdder rt = new LongAdder();
private final LongAdder success = new LongAdder();
private final LongAdder minRt = new LongAdder();
private volatile long minRt;
public Window() {
initMinRt();
}
private void initMinRt() {
minRt.add(4900);
this.minRt = Constants.TIME_DROP_VALVE;
}
/**
@ -49,7 +52,6 @@ public class Window {
exception.reset();
rt.reset();
success.reset();
minRt.reset();
initMinRt();
return this;
}
@ -71,7 +73,7 @@ public class Window {
}
public long minRt() {
return minRt.longValue();
return minRt;
}
public long success() {
@ -97,8 +99,9 @@ public class Window {
public void addRT(long rt) {
this.rt.add(rt);
if (minRt.longValue() > rt) {
minRt.internalReset(rt);
// Not thread-safe, but it's okay.
if (rt < minRt) {
minRt = rt;
}
}
}

View File

@ -18,6 +18,7 @@ package com.alibaba.csp.sentinel.slots.statistic.metric;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.csp.sentinel.Constants;
import com.alibaba.csp.sentinel.node.metric.MetricNode;
import com.alibaba.csp.sentinel.slots.statistic.base.Window;
import com.alibaba.csp.sentinel.slots.statistic.base.WindowWrap;
@ -117,7 +118,7 @@ public class ArrayMetric implements Metric {
@Override
public long minRt() {
data.currentWindow();
long rt = 4900;
long rt = Constants.TIME_DROP_VALVE;
List<Window> list = data.values();
for (Window window : list) {
if (window.minRt() < rt) {