Skip to content

Commit 355b7bd

Browse files
committed
Add memory usage fallback
Signed-off-by: Lantao Jin <ltjin@amazon.com>
1 parent 4838a57 commit 355b7bd

2 files changed

Lines changed: 23 additions & 6 deletions

File tree

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,12 @@ public void setUsage(long value) {
5656
}
5757

5858
private void registerGCListener() {
59+
boolean registered = false;
5960
List<GarbageCollectorMXBean> gcBeans = ManagementFactory.getGarbageCollectorMXBeans();
6061
for (GarbageCollectorMXBean gcBean : gcBeans) {
6162
if (gcBean instanceof NotificationEmitter && isOldGenGc(gcBean.getName())) {
6263
LOG.info("{} listener registered for memory usage monitor.", gcBean.getName());
64+
registered = true;
6365
NotificationEmitter emitter = (NotificationEmitter) gcBean;
6466
emitter.addNotificationListener(
6567
new OldGenGCListener(),
@@ -76,6 +78,11 @@ private void registerGCListener() {
7678
null);
7779
}
7880
}
81+
if (!registered) {
82+
// fallback to RuntimeMemoryUsage
83+
LOG.info("No old gen GC listener registered, fallback to RuntimeMemoryUsage");
84+
throw new OpenSearchMemoryHealthy.MemoryUsageException();
85+
}
7986
}
8087

8188
private boolean isOldGenGc(String gcKeyword) {

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

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,7 @@ public class OpenSearchMemoryHealthy {
1919

2020
public OpenSearchMemoryHealthy(Settings settings) {
2121
randomFail = new RandomFail();
22-
memoryUsage =
23-
isCalciteEnabled(settings)
24-
? GCedMemoryUsage.getInstance()
25-
: RuntimeMemoryUsage.getInstance();
22+
memoryUsage = buildMemoryUsage(settings);
2623
}
2724

2825
@VisibleForTesting
@@ -31,6 +28,16 @@ public OpenSearchMemoryHealthy(RandomFail randomFail, MemoryUsage memoryUsage) {
3128
this.memoryUsage = memoryUsage;
3229
}
3330

31+
private MemoryUsage buildMemoryUsage(Settings settings) {
32+
try {
33+
return isCalciteEnabled(settings)
34+
? GCedMemoryUsage.getInstance()
35+
: RuntimeMemoryUsage.getInstance();
36+
} catch (MemoryUsageException e) {
37+
return RuntimeMemoryUsage.getInstance();
38+
}
39+
}
40+
3441
private boolean isCalciteEnabled(Settings settings) {
3542
if (settings != null) {
3643
return settings.getSettingValue(Settings.Key.CALCITE_ENGINE_ENABLED);
@@ -63,8 +70,11 @@ public boolean shouldFail() {
6370
}
6471

6572
@NoArgsConstructor
66-
public static class MemoryUsageExceedFastFailureException extends RuntimeException {}
73+
public static class MemoryUsageExceedFastFailureException extends MemoryUsageException {}
74+
75+
@NoArgsConstructor
76+
public static class MemoryUsageExceedException extends MemoryUsageException {}
6777

6878
@NoArgsConstructor
69-
public static class MemoryUsageExceedException extends RuntimeException {}
79+
public static class MemoryUsageException extends RuntimeException {}
7080
}

0 commit comments

Comments
 (0)