Copilot commented on code in PR #17788:
URL: https://github.com/apache/pinot/pull/17788#discussion_r2868203736


##########
pinot-core/src/main/java/org/apache/pinot/core/accounting/PerQueryCPUMemAccountantFactory.java:
##########
@@ -479,17 +479,19 @@ protected void evalTriggers() {
         QueryMonitorConfig config = _queryMonitorConfig.get();
         _triggeringLevel =
             config.isCpuTimeBasedKillingEnabled() ? 
TriggeringLevel.CPUTimeBasedKilling : TriggeringLevel.Normal;
-        if (_usedBytes > config.getPanicLevel()) {
-          _triggeringLevel = TriggeringLevel.HeapMemoryPanic;
-          _metrics.addMeteredGlobalValue(_heapMemoryPanicExceededMeter, 1);
-        } else if (_usedBytes > config.getCriticalLevel()) {
-          _triggeringLevel = TriggeringLevel.HeapMemoryCritical;
-          _metrics.addMeteredGlobalValue(_heapMemoryCriticalExceededMeter, 1);
-        } else if (_usedBytes > config.getAlarmingLevel()) {
+        if (_usedBytes > config.getAlarmingLevel()) {
           _sleepTime = config.getAlarmingSleepTime();
-          // For debugging
-          if (LOGGER.isDebugEnabled() && _triggeringLevel == 
TriggeringLevel.Normal) {
-            _triggeringLevel = TriggeringLevel.HeapMemoryAlarmingVerbose;
+          if (_usedBytes > config.getPanicLevel()) {
+            _triggeringLevel = TriggeringLevel.HeapMemoryPanic;
+            _metrics.addMeteredGlobalValue(_heapMemoryPanicExceededMeter, 1);
+          } else if (_usedBytes > config.getCriticalLevel()) {
+            _triggeringLevel = TriggeringLevel.HeapMemoryCritical;
+            _metrics.addMeteredGlobalValue(_heapMemoryCriticalExceededMeter, 
1);
+          } else {

Review Comment:
   `evalTriggers()` now checks `alarmingLevel` first and only evaluates 
CRITICAL/PANIC inside that block. This makes the triggering behavior depend on 
`alarmingLevel` being lower than the other thresholds, and also contradicts the 
method comment about evaluating triggers high -> low. Consider reordering back 
to panic -> critical -> alarming, while still applying `alarmingSleepTime` in 
the critical/panic branches.



##########
pinot-core/src/main/java/org/apache/pinot/core/accounting/QueryResourceAggregator.java:
##########
@@ -204,17 +204,19 @@ private void evalTriggers() {
     QueryMonitorConfig config = _queryMonitorConfig.get();
     _triggeringLevel =
         config.isCpuTimeBasedKillingEnabled() ? 
TriggeringLevel.CPUTimeBasedKilling : TriggeringLevel.Normal;
-    if (_usedBytes > config.getPanicLevel()) {
-      _triggeringLevel = TriggeringLevel.HeapMemoryPanic;
-      _metrics.addMeteredGlobalValue(_heapMemoryPanicExceededMeter, 1);
-    } else if (_usedBytes > config.getCriticalLevel()) {
-      _triggeringLevel = TriggeringLevel.HeapMemoryCritical;
-      _metrics.addMeteredGlobalValue(_heapMemoryCriticalExceededMeter, 1);
-    } else if (_usedBytes > config.getAlarmingLevel()) {
+    if (_usedBytes > config.getAlarmingLevel()) {
       _sleepTime = config.getAlarmingSleepTime();
-      // For debugging
-      if (LOGGER.isDebugEnabled() && _triggeringLevel == 
TriggeringLevel.Normal) {
-        _triggeringLevel = TriggeringLevel.HeapMemoryAlarmingVerbose;
+      if (_usedBytes > config.getPanicLevel()) {
+        _triggeringLevel = TriggeringLevel.HeapMemoryPanic;
+        _metrics.addMeteredGlobalValue(_heapMemoryPanicExceededMeter, 1);
+      } else if (_usedBytes > config.getCriticalLevel()) {
+        _triggeringLevel = TriggeringLevel.HeapMemoryCritical;
+        _metrics.addMeteredGlobalValue(_heapMemoryCriticalExceededMeter, 1);
+      } else {

Review Comment:
   The panic/critical checks are now gated by `if (_usedBytes > 
config.getAlarmingLevel())`. If `alarmingLevel` is misconfigured above 
`criticalLevel`/`panicLevel`, this method will no longer enter the block and 
will fail to trigger CRITICAL/PANIC actions even when their thresholds are 
exceeded. Consider restoring high->low evaluation (panic -> critical -> 
alarming) and setting `_sleepTime = config.getAlarmingSleepTime()` in the 
critical/panic branches as well, so triggers don’t depend on `alarmingLevel` 
ordering.



##########
pinot-core/src/main/java/org/apache/pinot/core/accounting/PerQueryCPUMemAccountantFactory.java:
##########
@@ -479,17 +479,19 @@ protected void evalTriggers() {
         QueryMonitorConfig config = _queryMonitorConfig.get();
         _triggeringLevel =
             config.isCpuTimeBasedKillingEnabled() ? 
TriggeringLevel.CPUTimeBasedKilling : TriggeringLevel.Normal;
-        if (_usedBytes > config.getPanicLevel()) {
-          _triggeringLevel = TriggeringLevel.HeapMemoryPanic;
-          _metrics.addMeteredGlobalValue(_heapMemoryPanicExceededMeter, 1);
-        } else if (_usedBytes > config.getCriticalLevel()) {
-          _triggeringLevel = TriggeringLevel.HeapMemoryCritical;
-          _metrics.addMeteredGlobalValue(_heapMemoryCriticalExceededMeter, 1);
-        } else if (_usedBytes > config.getAlarmingLevel()) {
+        if (_usedBytes > config.getAlarmingLevel()) {
           _sleepTime = config.getAlarmingSleepTime();
-          // For debugging
-          if (LOGGER.isDebugEnabled() && _triggeringLevel == 
TriggeringLevel.Normal) {
-            _triggeringLevel = TriggeringLevel.HeapMemoryAlarmingVerbose;
+          if (_usedBytes > config.getPanicLevel()) {
+            _triggeringLevel = TriggeringLevel.HeapMemoryPanic;
+            _metrics.addMeteredGlobalValue(_heapMemoryPanicExceededMeter, 1);
+          } else if (_usedBytes > config.getCriticalLevel()) {
+            _triggeringLevel = TriggeringLevel.HeapMemoryCritical;
+            _metrics.addMeteredGlobalValue(_heapMemoryCriticalExceededMeter, 
1);

Review Comment:
   This change alters the scheduling behavior by applying `alarmingSleepTime` 
when heap usage is CRITICAL/PANIC. Please add/extend unit tests to cover the 
updated trigger evaluation, e.g., asserting `_sleepTime` switches to 
`getAlarmingSleepTime()` for CRITICAL and PANIC, and that triggering still 
works when thresholds are not strictly ordered.



##########
pinot-core/src/main/java/org/apache/pinot/core/accounting/QueryResourceAggregator.java:
##########
@@ -204,17 +204,19 @@ private void evalTriggers() {
     QueryMonitorConfig config = _queryMonitorConfig.get();
     _triggeringLevel =
         config.isCpuTimeBasedKillingEnabled() ? 
TriggeringLevel.CPUTimeBasedKilling : TriggeringLevel.Normal;
-    if (_usedBytes > config.getPanicLevel()) {
-      _triggeringLevel = TriggeringLevel.HeapMemoryPanic;
-      _metrics.addMeteredGlobalValue(_heapMemoryPanicExceededMeter, 1);
-    } else if (_usedBytes > config.getCriticalLevel()) {
-      _triggeringLevel = TriggeringLevel.HeapMemoryCritical;
-      _metrics.addMeteredGlobalValue(_heapMemoryCriticalExceededMeter, 1);
-    } else if (_usedBytes > config.getAlarmingLevel()) {
+    if (_usedBytes > config.getAlarmingLevel()) {
       _sleepTime = config.getAlarmingSleepTime();
-      // For debugging
-      if (LOGGER.isDebugEnabled() && _triggeringLevel == 
TriggeringLevel.Normal) {
-        _triggeringLevel = TriggeringLevel.HeapMemoryAlarmingVerbose;
+      if (_usedBytes > config.getPanicLevel()) {
+        _triggeringLevel = TriggeringLevel.HeapMemoryPanic;
+        _metrics.addMeteredGlobalValue(_heapMemoryPanicExceededMeter, 1);
+      } else if (_usedBytes > config.getCriticalLevel()) {
+        _triggeringLevel = TriggeringLevel.HeapMemoryCritical;
+        _metrics.addMeteredGlobalValue(_heapMemoryCriticalExceededMeter, 1);

Review Comment:
   This change modifies trigger evaluation and sleep-time behavior for 
CRITICAL/PANIC conditions. Consider adding a unit test (or extending existing 
accounting tests) that exercises `QueryResourceAggregator` with `_usedBytes` 
above critical/panic and asserts the returned `getAggregationSleepTimeMs()` 
uses `getAlarmingSleepTime()` while still triggering the expected level.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to