|
@@ -351,7 +351,7 @@ public class BigArraysTests extends ESTestCase {
|
|
|
|
|
|
public void testMaxSizeExceededOnResize() throws Exception {
|
|
|
for (String type : Arrays.asList("Byte", "Int", "Long", "Float", "Double", "Object")) {
|
|
|
- final int maxSize = randomIntBetween(1 << 10, 1 << 22);
|
|
|
+ final int maxSize = randomIntBetween(1 << 8, 1 << 14);
|
|
|
HierarchyCircuitBreakerService hcbs = new HierarchyCircuitBreakerService(
|
|
|
Settings.builder()
|
|
|
.put(REQUEST_CIRCUIT_BREAKER_LIMIT_SETTING.getKey(), maxSize, ByteSizeUnit.BYTES)
|
|
@@ -360,12 +360,18 @@ public class BigArraysTests extends ESTestCase {
|
|
|
new ClusterSettings(Settings.EMPTY, ClusterSettings.BUILT_IN_CLUSTER_SETTINGS));
|
|
|
BigArrays bigArrays = new BigArrays(null, hcbs, false).withCircuitBreaking();
|
|
|
Method create = BigArrays.class.getMethod("new" + type + "Array", long.class);
|
|
|
- final int size = scaledRandomIntBetween(10, maxSize / 8);
|
|
|
+ final int size = scaledRandomIntBetween(10, maxSize / 16);
|
|
|
BigArray array = (BigArray) create.invoke(bigArrays, size);
|
|
|
Method resize = BigArrays.class.getMethod("resize", array.getClass().getInterfaces()[0], long.class);
|
|
|
- final long newSize = maxSize + 1;
|
|
|
- InvocationTargetException e = expectThrows(InvocationTargetException.class, () -> resize.invoke(bigArrays, array, newSize));
|
|
|
- assertTrue(e.getCause() instanceof CircuitBreakingException);
|
|
|
+ while (true) {
|
|
|
+ long newSize = array.size() * 2;
|
|
|
+ try {
|
|
|
+ array = (BigArray) resize.invoke(bigArrays, array, newSize);
|
|
|
+ } catch (InvocationTargetException e) {
|
|
|
+ assertTrue(e.getCause() instanceof CircuitBreakingException);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
assertEquals(array.ramBytesUsed(), hcbs.getBreaker(CircuitBreaker.REQUEST).getUsed());
|
|
|
array.close();
|
|
|
assertEquals(0, hcbs.getBreaker(CircuitBreaker.REQUEST).getUsed());
|