Fix zero-count divide overflow bug in RateLimiterController (#461)
This commit is contained in:
parent
223ad252df
commit
2cf6e29e72
|
|
@ -44,6 +44,21 @@ public class RateLimiterController implements TrafficShapingController {
|
|||
|
||||
@Override
|
||||
public boolean canPass(Node node, int acquireCount, boolean prioritized) {
|
||||
/*
|
||||
1. Pass when acquire count is less or equal than 0
|
||||
2. Reject when count is less or equal than 0.
|
||||
Otherwise,the costTime will be max of long and waitTime will overflow in some cases.
|
||||
This will lead to pass of following request.It's dangerous!!!
|
||||
*/
|
||||
|
||||
if (acquireCount <= 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (count <= 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
long currentTime = TimeUtil.currentTimeMillis();
|
||||
// Calculate the interval between every two requests.
|
||||
long costTime = Math.round(1.0 * (acquireCount) / count * 1000);
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
*/
|
||||
package com.alibaba.csp.sentinel.slots.block.flow.controller;
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
||||
|
|
@ -25,7 +26,6 @@ import org.junit.Test;
|
|||
|
||||
import com.alibaba.csp.sentinel.util.TimeUtil;
|
||||
import com.alibaba.csp.sentinel.node.Node;
|
||||
import com.alibaba.csp.sentinel.slots.block.flow.controller.RateLimiterController;
|
||||
|
||||
/**
|
||||
* @author jialiang.linjl
|
||||
|
|
@ -85,4 +85,14 @@ public class RateLimiterControllerTest {
|
|||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPaceController_zeroattack() throws InterruptedException {
|
||||
RateLimiterController paceController = new RateLimiterController(500, 0d);
|
||||
Node node = mock(Node.class);
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
assertFalse(paceController.canPass(node, 1));
|
||||
assertTrue(paceController.canPass(node, 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue