This is an automated email from the ASF dual-hosted git repository.

gortiz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new a91d6af17c6 Conditionally Log MSE stats when query finish. (#16007)
a91d6af17c6 is described below

commit a91d6af17c651f139a4fdcc0e090de3c91eb8b8a
Author: Gonzalo Ortiz Jaureguizar <gor...@users.noreply.github.com>
AuthorDate: Wed Jun 18 08:52:51 2025 +0200

    Conditionally Log MSE stats when query finish. (#16007)
---
 .../MultiStageBrokerRequestHandler.java            | 41 +++++++++++++++++++++-
 .../apache/pinot/spi/utils/CommonConstants.java    |  8 +++++
 2 files changed, 48 insertions(+), 1 deletion(-)

diff --git 
a/pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/MultiStageBrokerRequestHandler.java
 
b/pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/MultiStageBrokerRequestHandler.java
index e1b5f040271..374c9c1e8b9 100644
--- 
a/pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/MultiStageBrokerRequestHandler.java
+++ 
b/pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/MultiStageBrokerRequestHandler.java
@@ -20,12 +20,14 @@ package org.apache.pinot.broker.requesthandler;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import java.time.Duration;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.Callable;
@@ -93,6 +95,8 @@ import org.apache.pinot.spi.utils.CommonConstants;
 import org.apache.pinot.sql.parsers.SqlNodeAndOptions;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.slf4j.Marker;
+import org.slf4j.MarkerFactory;
 
 
 /**
@@ -101,6 +105,19 @@ import org.slf4j.LoggerFactory;
  */
 public class MultiStageBrokerRequestHandler extends BaseBrokerRequestHandler {
   private static final Logger LOGGER = 
LoggerFactory.getLogger(MultiStageBrokerRequestHandler.class);
+  /// Disabled by default, but can be enabled with
+  ///```xml
+  ///  <MarkerFilter marker="MSE_STATS_MARKER" onMatch="ACCEPT" 
onMismatch="NEUTRAL"/>
+  ///  ...
+  ///  <Loggers>
+  ///    <Logger name="org.apache.pinot" level="debug" additivity="false">
+  ///      <AppenderRef ref="console">
+  ///        <MarkerFilter marker="MSE_STATS_MARKER"/>
+  ///      </AppenderRef>
+  ///    </Logger>
+  ///  </Loggers>
+  /// ```
+  private static final Marker MSE_STATS_MARKER = 
MarkerFactory.getMarker("MSE_STATS_MARKER");
 
   private static final int NUM_UNAVAILABLE_SEGMENTS_TO_LOG = 10;
 
@@ -170,9 +187,9 @@ public class MultiStageBrokerRequestHandler extends 
BaseBrokerRequestHandler {
           requestContext, httpHeaders);
       if (!brokerResponse.getExceptions().isEmpty()) {
         // a _green_ error (see handleRequestThrowing javadoc)
-        LOGGER.info("Request {} failed in a controlled manner: {}", requestId, 
brokerResponse.getExceptions());
         onFailedRequest(brokerResponse.getExceptions());
       }
+      summarizeQuery(brokerResponse, 
explicitSummarizeLogRequested(sqlNodeAndOptions));
       return brokerResponse;
     } catch (WebApplicationException e) {
       // a _yellow_ error (see handleRequestThrowing javadoc)
@@ -200,6 +217,28 @@ public class MultiStageBrokerRequestHandler extends 
BaseBrokerRequestHandler {
     }
   }
 
+  private static boolean explicitSummarizeLogRequested(SqlNodeAndOptions 
sqlNodeAndOptions) {
+    return Boolean.parseBoolean(
+        sqlNodeAndOptions.getOptions()
+            
.getOrDefault(CommonConstants.MultiStageQueryRunner.KEY_OF_LOG_STATS, "false")
+            .toLowerCase(Locale.US));
+  }
+
+  private void summarizeQuery(BrokerResponse brokerResponse, boolean 
explicitSummarizeLogRequested) {
+    ObjectNode stats = brokerResponse instanceof BrokerResponseNativeV2
+        ? ((BrokerResponseNativeV2) brokerResponse).getStageStats()
+        : JsonNodeFactory.instance.objectNode();
+    String completionStatus = brokerResponse.getExceptions().isEmpty()
+        ? "successfully"
+        : "with errors " + brokerResponse.getExceptions();
+    String logTemplate = "Request finished {} in {}ms. Stats: {}";
+    if (brokerResponse.getExceptions().isEmpty() && 
!explicitSummarizeLogRequested) {
+      LOGGER.debug(MSE_STATS_MARKER, logTemplate, completionStatus, 
brokerResponse.getTimeUsedMs(), stats);
+    } else {
+      LOGGER.info(MSE_STATS_MARKER, logTemplate, completionStatus, 
brokerResponse.getTimeUsedMs(), stats);
+    }
+  }
+
   private void onFailedRequest(List<QueryProcessingException> exs) {
     
_brokerMetrics.addMeteredGlobalValue(BrokerMeter.BROKER_RESPONSES_WITH_PROCESSING_EXCEPTIONS,
 1);
 
diff --git 
a/pinot-spi/src/main/java/org/apache/pinot/spi/utils/CommonConstants.java 
b/pinot-spi/src/main/java/org/apache/pinot/spi/utils/CommonConstants.java
index 962179f999b..4c3c4876df6 100644
--- a/pinot-spi/src/main/java/org/apache/pinot/spi/utils/CommonConstants.java
+++ b/pinot-spi/src/main/java/org/apache/pinot/spi/utils/CommonConstants.java
@@ -1661,6 +1661,14 @@ public class CommonConstants {
     public static final String KEY_OF_SEND_STATS_MODE = 
"pinot.query.mse.stats.mode";
     public static final String DEFAULT_SEND_STATS_MODE = "SAFE";
 
+    /// Used to indicate that MSE stats should be logged at INFO level for 
successful queries.
+    ///
+    /// When an MSE query is executed, the stats are collected and logged.
+    /// By default, successful queries are logged in the DEBUG level, while 
errors are logged in the INFO level.
+    /// But if this property is set to true (upper or lower case), stats will 
be logged in the INFO level for both
+    /// successful queries and errors.
+    public static final String KEY_OF_LOG_STATS = "logStats";
+
     public enum JoinOverFlowMode {
       THROW, BREAK
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to