|
@@ -254,6 +254,8 @@ public class HierarchyCircuitBreakerServiceTests extends ESTestCase {
|
|
|
assertThat(exception.getMessage(), containsString("request=157286400/150mb"));
|
|
assertThat(exception.getMessage(), containsString("request=157286400/150mb"));
|
|
|
assertThat(exception.getDurability(), equalTo(CircuitBreaker.Durability.TRANSIENT));
|
|
assertThat(exception.getDurability(), equalTo(CircuitBreaker.Durability.TRANSIENT));
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ assertCircuitBreakerLimitWarning();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public void testParentBreaksOnRealMemoryUsage() {
|
|
public void testParentBreaksOnRealMemoryUsage() {
|
|
@@ -325,6 +327,8 @@ public class HierarchyCircuitBreakerServiceTests extends ESTestCase {
|
|
|
memoryUsage.set(100);
|
|
memoryUsage.set(100);
|
|
|
requestBreaker.addEstimateBytesAndMaybeBreak(reservationInBytes, "request");
|
|
requestBreaker.addEstimateBytesAndMaybeBreak(reservationInBytes, "request");
|
|
|
assertEquals(0, requestBreaker.getTrippedCount());
|
|
assertEquals(0, requestBreaker.getTrippedCount());
|
|
|
|
|
+
|
|
|
|
|
+ assertCircuitBreakerLimitWarning();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -749,6 +753,7 @@ public class HierarchyCircuitBreakerServiceTests extends ESTestCase {
|
|
|
equalTo(expectedDurability)
|
|
equalTo(expectedDurability)
|
|
|
);
|
|
);
|
|
|
}
|
|
}
|
|
|
|
|
+ assertCircuitBreakerLimitWarning();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public void testAllocationBucketsBreaker() {
|
|
public void testAllocationBucketsBreaker() {
|
|
@@ -785,6 +790,8 @@ public class HierarchyCircuitBreakerServiceTests extends ESTestCase {
|
|
|
assertThat(exception.getMessage(), containsString("[parent] Data too large, data for [allocated_buckets] would be"));
|
|
assertThat(exception.getMessage(), containsString("[parent] Data too large, data for [allocated_buckets] would be"));
|
|
|
assertThat(exception.getMessage(), containsString("which is larger than the limit of [100/100b]"));
|
|
assertThat(exception.getMessage(), containsString("which is larger than the limit of [100/100b]"));
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ assertCircuitBreakerLimitWarning();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public void testRegisterCustomCircuitBreakers_WithDuplicates() {
|
|
public void testRegisterCustomCircuitBreakers_WithDuplicates() {
|
|
@@ -891,7 +898,7 @@ public class HierarchyCircuitBreakerServiceTests extends ESTestCase {
|
|
|
service.getParentLimit()
|
|
service.getParentLimit()
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- // total.limit defaults to 70% of the JVM heap if use_real_memory set to true
|
|
|
|
|
|
|
+ // total.limit defaults to 95% of the JVM heap if use_real_memory set to true
|
|
|
clusterSettings.applySettings(Settings.builder().put(useRealMemoryUsageSetting, true).build());
|
|
clusterSettings.applySettings(Settings.builder().put(useRealMemoryUsageSetting, true).build());
|
|
|
assertEquals(
|
|
assertEquals(
|
|
|
MemorySizeValue.parseBytesSizeValueOrHeapRatio("95%", totalCircuitBreakerLimitSetting).getBytes(),
|
|
MemorySizeValue.parseBytesSizeValueOrHeapRatio("95%", totalCircuitBreakerLimitSetting).getBytes(),
|
|
@@ -900,6 +907,15 @@ public class HierarchyCircuitBreakerServiceTests extends ESTestCase {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ public void testSizeBelowMinimumWarning() {
|
|
|
|
|
+ ByteSizeValue sizeValue = MemorySizeValue.parseHeapRatioOrDeprecatedByteSizeValue(
|
|
|
|
|
+ "19%",
|
|
|
|
|
+ HierarchyCircuitBreakerService.TOTAL_CIRCUIT_BREAKER_LIMIT_SETTING.getKey(),
|
|
|
|
|
+ 20
|
|
|
|
|
+ );
|
|
|
|
|
+ assertWarnings("[indices.breaker.total.limit] setting of [19%] is below the recommended minimum of 20.0% of the heap");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
public void testBuildParentTripMessage() {
|
|
public void testBuildParentTripMessage() {
|
|
|
class TestChildCircuitBreaker extends NoopCircuitBreaker {
|
|
class TestChildCircuitBreaker extends NoopCircuitBreaker {
|
|
|
private final long used;
|
|
private final long used;
|
|
@@ -972,4 +988,12 @@ public class HierarchyCircuitBreakerServiceTests extends ESTestCase {
|
|
|
HierarchyCircuitBreakerService.permitNegativeValues = false;
|
|
HierarchyCircuitBreakerService.permitNegativeValues = false;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ void assertCircuitBreakerLimitWarning() {
|
|
|
|
|
+ assertWarnings(
|
|
|
|
|
+ "[indices.breaker.total.limit] should be specified using a percentage of the heap. "
|
|
|
|
|
+ + "Absolute size settings will be forbidden in a future release"
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|