Release 2.6.2
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>fizz-gateway-community</artifactId>
|
||||
<groupId>com.fizzgate</groupId>
|
||||
<version>2.6.2-beta1</version>
|
||||
<version>2.6.2</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
@@ -52,6 +52,10 @@ public class FlowStat {
|
||||
*/
|
||||
public static long INTERVAL = 1000;
|
||||
|
||||
public boolean cleanResource = true;
|
||||
|
||||
public boolean createTimeSlotOnlyTraffic = true;
|
||||
|
||||
/**
|
||||
* A string Resource ID as key
|
||||
*/
|
||||
@@ -73,6 +77,12 @@ public class FlowStat {
|
||||
runScheduleJob();
|
||||
}
|
||||
|
||||
public FlowStat(boolean cleanResource, boolean createTimeSlotOnlyTraffic) {
|
||||
this.cleanResource = cleanResource;
|
||||
this.createTimeSlotOnlyTraffic = createTimeSlotOnlyTraffic;
|
||||
runScheduleJob();
|
||||
}
|
||||
|
||||
public FlowStat(CircuitBreakManager circuitBreakManager) {
|
||||
this.circuitBreakManager = circuitBreakManager;
|
||||
runScheduleJob();
|
||||
@@ -588,27 +598,28 @@ public class FlowStat {
|
||||
lastSlotId = slotId;
|
||||
// log.debug("housekeeping done");
|
||||
|
||||
|
||||
long currentTimeSlot = stat.currentTimeSlotId();
|
||||
long startTimeSlot = currentTimeSlot - n;
|
||||
for (Entry<String, ResourceStat> entry : stat.resourceStats.entrySet()) {
|
||||
String resource = entry.getKey();
|
||||
if (ResourceIdUtils.NODE_RESOURCE.equals(resource)) {
|
||||
continue;
|
||||
}
|
||||
ResourceStat resourceStat = entry.getValue();
|
||||
boolean noTraffic = true;
|
||||
long timeSlot = startTimeSlot;
|
||||
for ( ; timeSlot < currentTimeSlot; timeSlot += FlowStat.INTERVAL) {
|
||||
int reqCnt = resourceStat.getTimeSlot(timeSlot).getCounter();
|
||||
if (reqCnt > 0) {
|
||||
noTraffic = false;
|
||||
break;
|
||||
if (cleanResource) {
|
||||
long currentTimeSlot = stat.currentTimeSlotId();
|
||||
long startTimeSlot = currentTimeSlot - n;
|
||||
for (Entry<String, ResourceStat> entry : stat.resourceStats.entrySet()) {
|
||||
String resource = entry.getKey();
|
||||
if (ResourceIdUtils.NODE_RESOURCE.equals(resource)) {
|
||||
continue;
|
||||
}
|
||||
ResourceStat resourceStat = entry.getValue();
|
||||
boolean noTraffic = true;
|
||||
long timeSlot = startTimeSlot;
|
||||
for (; timeSlot < currentTimeSlot; timeSlot += FlowStat.INTERVAL) {
|
||||
int reqCnt = resourceStat.getTimeSlot(timeSlot).getCounter();
|
||||
if (reqCnt > 0) {
|
||||
noTraffic = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (noTraffic) {
|
||||
stat.resourceStats.remove(resource);
|
||||
log.info("HousekeepJob remove {}", resource);
|
||||
}
|
||||
}
|
||||
if (noTraffic) {
|
||||
stat.resourceStats.remove(resource);
|
||||
log.info("HousekeepJob remove {}", resource);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -644,7 +655,9 @@ public class FlowStat {
|
||||
// curTimeSlotId);
|
||||
|
||||
ResourceStat resourceStat = entry.getValue();
|
||||
if (resourceStat.getConcurrentRequests().get() > 0) {
|
||||
if (createTimeSlotOnlyTraffic && resourceStat.getConcurrentRequests().get() > 0) {
|
||||
resourceStat.getTimeSlot(curTimeSlotId);
|
||||
} else {
|
||||
resourceStat.getTimeSlot(curTimeSlotId);
|
||||
}
|
||||
|
||||
|
||||
@@ -319,13 +319,13 @@ public class CircuitBreaker {
|
||||
|
||||
public boolean transit(State current, State target, long currentTimeWindow, FlowStat flowStat) {
|
||||
if (stateRef.compareAndSet(current, target)) {
|
||||
stateStartTime = currentTimeWindow;
|
||||
ResourceStat resourceStat = flowStat.getResourceStat(resource);
|
||||
/*AtomicLong circuitBreakNum = resourceStat.getTimeSlot(currentTimeWindow).getCircuitBreakNum();
|
||||
circuitBreakNum.set(0);*/
|
||||
resourceStat.getTimeSlot(currentTimeWindow).setCircuitBreakNum(0);
|
||||
resourceStat.updateCircuitBreakState(currentTimeWindow, current, target);
|
||||
LOGGER.debug("transit {} current time window {} from {} which start at {} to {}", resource, currentTimeWindow, current, stateStartTime, target);
|
||||
stateStartTime = currentTimeWindow;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
@@ -39,7 +39,7 @@ import we.util.JacksonUtils;
|
||||
*/
|
||||
public class FlowStatTests {
|
||||
|
||||
private FlowStat stat = new FlowStat();
|
||||
private FlowStat stat = new FlowStat(false, false);
|
||||
|
||||
class FlowRuleCase {
|
||||
public int threads = 3;
|
||||
|
||||
@@ -68,6 +68,8 @@ public class CircuitBreakManagerTests {
|
||||
@Test
|
||||
void permitTest() {
|
||||
FlowStat flowStat = new FlowStat(circuitBreakManager);
|
||||
flowStat.cleanResource = false;
|
||||
flowStat.createTimeSlotOnlyTraffic = false;
|
||||
long currentTimeWindow = flowStat.currentTimeSlotId();
|
||||
|
||||
MockServerHttpRequest mockServerHttpRequest = MockServerHttpRequest.get("/xxx").build();
|
||||
|
||||
Reference in New Issue
Block a user