Skip to content

Commit 69a60cd

Browse files
committed
Fix IT
Signed-off-by: Lantao Jin <ltjin@amazon.com>
1 parent 257afc6 commit 69a60cd

2 files changed

Lines changed: 21 additions & 9 deletions

File tree

integ-test/src/test/java/org/opensearch/sql/ppl/ResourceMonitorIT.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.junit.Test;
1414
import org.opensearch.client.ResponseException;
1515
import org.opensearch.sql.common.setting.Settings;
16+
import org.opensearch.sql.opensearch.monitor.GCedMemoryUsage;
1617

1718
public class ResourceMonitorIT extends PPLIntegTestCase {
1819

@@ -27,11 +28,7 @@ public void queryExceedResourceLimitShouldFail() throws IOException {
2728
// update plugins.ppl.query.memory_limit to 1%
2829
updateClusterSettings(
2930
new ClusterSetting("persistent", Settings.Key.QUERY_MEMORY_LIMIT.getKeyValue(), "1%"));
30-
// ClickBench Q30 is high memory consumption query.
31-
String query = sanitize(loadFromFile("clickbench/queries/q30.ppl"));
32-
33-
ResponseException exception =
34-
expectThrows(ResponseException.class, () -> executeQueryMultipleTimes(query));
31+
ResponseException exception = expectThrows(ResponseException.class, this::executeQuery);
3532
assertEquals(500, exception.getResponse().getStatusLine().getStatusCode());
3633
assertThat(
3734
exception.getMessage(),
@@ -40,12 +37,21 @@ public void queryExceedResourceLimitShouldFail() throws IOException {
4037
// update plugins.ppl.query.memory_limit to default value 85%
4138
updateClusterSettings(
4239
new ClusterSetting("persistent", Settings.Key.QUERY_MEMORY_LIMIT.getKeyValue(), "85%"));
43-
executeQueryMultipleTimes(query);
40+
executeQuery();
4441
}
4542

46-
/** Run the same query multiple times in case GC can be triggered in integration test */
47-
private void executeQueryMultipleTimes(String query) throws IOException {
48-
for (int i = 0; i < 10; i++) {
43+
private void executeQuery() throws IOException {
44+
if (GCedMemoryUsage.initialized()) {
45+
// ClickBench Q30 is a high memory consumption query. Run 5 times to ensure GC triggered.
46+
String query = sanitize(loadFromFile("clickbench/queries/q30.ppl"));
47+
for (int i = 0; i < 5; i++) {
48+
JSONObject result = executeQuery(query);
49+
verifyNumOfRows(result, 1);
50+
}
51+
} else {
52+
// Q2 is not a high memory consumption query.
53+
// It cannot run in 1% resource but passed in 85%.
54+
String query = sanitize(loadFromFile("clickbench/queries/q2.ppl"));
4955
JSONObject result = executeQuery(query);
5056
verifyNumOfRows(result, 1);
5157
}

opensearch/src/main/java/org/opensearch/sql/opensearch/monitor/GCedMemoryUsage.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public class GCedMemoryUsage implements MemoryUsage {
2424
private static final Logger LOG = LogManager.getLogger();
2525
private static final List<String> OLD_GEN_GC_ACTION_KEYWORDS =
2626
List.of("major", "concurrent", "old", "full", "marksweep");
27+
private static boolean initialized = false;
2728

2829
private GCedMemoryUsage() {
2930
registerGCListener();
@@ -55,6 +56,10 @@ public void setUsage(long value) {
5556
usage.set(value);
5657
}
5758

59+
public static boolean initialized() {
60+
return initialized;
61+
}
62+
5863
private void registerGCListener() {
5964
List<GarbageCollectorMXBean> gcBeans = ManagementFactory.getGarbageCollectorMXBeans();
6065
if (gcBeans.stream()
@@ -68,6 +73,7 @@ private void registerGCListener() {
6873
for (GarbageCollectorMXBean gcBean : gcBeans) {
6974
if (gcBean instanceof NotificationEmitter && isOldGenGc(gcBean.getName())) {
7075
LOG.info("{} listener registered for memory usage monitor.", gcBean.getName());
76+
initialized = true;
7177
NotificationEmitter emitter = (NotificationEmitter) gcBean;
7278
emitter.addNotificationListener(
7379
new OldGenGCListener(),

0 commit comments

Comments
 (0)