Skip to content

Commit e4421e8

Browse files
committed
improved detection and monitoring
1 parent 52a42ec commit e4421e8

3 files changed

Lines changed: 28 additions & 0 deletions

File tree

core/http/client/src/main/java/org/eclipse/rdf4j/http/client/QueryCircuitBreaker.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,7 @@ private QueryPressureState refreshState(String reason, Configuration configurati
260260
System.gc();
261261
}
262262
}
263+
QueryExecutionContext.setIgnoreCheckpointStride(currentState != QueryPressureState.NORMAL);
263264
QueryExecutionContext.setHeavyOperatorExecutionEnabled(currentState != QueryPressureState.CRITICAL);
264265
return currentState;
265266
}

core/http/client/src/main/java/org/eclipse/rdf4j/http/client/QueryExecutionContext.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ static void setHeavyOperatorExecutionEnabled(boolean heavyOperatorExecutionEnabl
8989
QueryExecutionContext.heavyOperatorExecutionEnabled = heavyOperatorExecutionEnabled;
9090
}
9191

92+
static void setIgnoreCheckpointStride(boolean ignoreCheckpointStride) {
93+
QueryExecutionContext.ignoreCheckpointStride = ignoreCheckpointStride;
94+
}
95+
9296
public interface Activation extends AutoCloseable {
9397
@Override
9498
void close();

core/http/client/src/test/java/org/eclipse/rdf4j/http/client/QueryCircuitBreakerTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,23 @@ void shouldDisableHeavyOperatorExecutionOnlyWhileCritical() throws Exception {
107107
assertTrue(readHeavyOperatorExecutionEnabled());
108108
}
109109

110+
@Test
111+
void shouldIgnoreCheckpointStrideOutsideNormalState() throws Exception {
112+
Fixture fixture = new Fixture();
113+
QueryCircuitBreaker breaker = fixture.breaker(configuration(true, 100, 200, 300, 400, 300, 200, 25, 10, 0,
114+
7), 0);
115+
116+
assertFalse(readIgnoreCheckpointStride());
117+
118+
fixture.freeMemoryMb.set(350);
119+
assertEquals("WARN", breaker.snapshotStatus().getState());
120+
assertTrue(readIgnoreCheckpointStride());
121+
122+
fixture.freeMemoryMb.set(1024);
123+
assertEquals("NORMAL", breaker.snapshotStatus().getState());
124+
assertFalse(readIgnoreCheckpointStride());
125+
}
126+
110127
@Test
111128
void shouldTransitionAcrossPressureLevelsUsingFreeMemoryThresholds() {
112129
Fixture fixture = new Fixture();
@@ -328,6 +345,12 @@ private static boolean readHeavyOperatorExecutionEnabled() throws Exception {
328345
return field.getBoolean(null);
329346
}
330347

348+
private static boolean readIgnoreCheckpointStride() throws Exception {
349+
Field field = QueryExecutionContext.class.getDeclaredField("ignoreCheckpointStride");
350+
field.setAccessible(true);
351+
return field.getBoolean(null);
352+
}
353+
331354
private static Set<Long> threadIds(String threadName) {
332355
Set<Long> ids = new HashSet<>();
333356
for (Thread thread : Thread.getAllStackTraces().keySet()) {

0 commit comments

Comments
 (0)