Jackie-Jiang commented on a change in pull request #6811:
URL: https://github.com/apache/incubator-pinot/pull/6811#discussion_r616345882



##########
File path: 
pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/BaseBrokerRequestHandler.java
##########
@@ -428,6 +437,38 @@ public BrokerResponse handleRequest(JsonNode request, 
@Nullable RequesterIdentit
       _brokerMetrics.addMeteredTableValue(rawTableName, 
BrokerMeter.BROKER_RESPONSES_WITH_NUM_GROUPS_LIMIT_REACHED, 1);
     }
 
+    logBrokerResponse(requestStatistics, requestId, query, 
compilationStartTimeNs, brokerRequest,
+        numUnavailableSegments, serverStats, brokerResponse, 
executionEndTimeNs);
+    return brokerResponse;
+  }
+
+  /**
+   * Given a {@link BrokerRequest}, this function will determine if we can 
return a response without server-side query
+   * evaluation. This usually happens when the optimizer determines that the 
entire WHERE clause evaluates to false.
+   */
+  private boolean isResponsePossible(BrokerRequest brokerRequest) {
+    if (brokerRequest == null) { return true;}

Review comment:
       We should handle `null` before calling this method

##########
File path: 
pinot-core/src/main/java/org/apache/pinot/core/query/optimizer/QueryOptimizer.java
##########
@@ -31,12 +31,14 @@
 import 
org.apache.pinot.core.query.optimizer.filter.FlattenAndOrFilterOptimizer;
 import org.apache.pinot.core.query.optimizer.filter.MergeEqInFilterOptimizer;
 import org.apache.pinot.core.query.optimizer.filter.MergeRangeFilterOptimizer;
+import org.apache.pinot.core.query.optimizer.filter.NumericalFilterOptimizer;
 import org.apache.pinot.spi.data.Schema;
 
 
 public class QueryOptimizer {
   private static final List<FilterOptimizer> FILTER_OPTIMIZERS = Arrays
-      .asList(new FlattenAndOrFilterOptimizer(), new 
MergeEqInFilterOptimizer(), new MergeRangeFilterOptimizer());
+      .asList(new FlattenAndOrFilterOptimizer(), new 
MergeEqInFilterOptimizer(), new MergeRangeFilterOptimizer(),
+          new NumericalFilterOptimizer());

Review comment:
       `NumericalFilterOptimizer` should be inserted before the 
`MergeEqInFilterOptimizer` so that `MergeEqInFilterOptimizer` and 
`MergeRangeFilterOptimizer` can read the optimized values

##########
File path: 
pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/BaseBrokerRequestHandler.java
##########
@@ -428,6 +437,38 @@ public BrokerResponse handleRequest(JsonNode request, 
@Nullable RequesterIdentit
       _brokerMetrics.addMeteredTableValue(rawTableName, 
BrokerMeter.BROKER_RESPONSES_WITH_NUM_GROUPS_LIMIT_REACHED, 1);
     }
 
+    logBrokerResponse(requestStatistics, requestId, query, 
compilationStartTimeNs, brokerRequest,
+        numUnavailableSegments, serverStats, brokerResponse, 
executionEndTimeNs);
+    return brokerResponse;
+  }
+
+  /**
+   * Given a {@link BrokerRequest}, this function will determine if we can 
return a response without server-side query
+   * evaluation. This usually happens when the optimizer determines that the 
entire WHERE clause evaluates to false.
+   */
+  private boolean isResponsePossible(BrokerRequest brokerRequest) {
+    if (brokerRequest == null) { return true;}
+
+    Expression filterExpression = 
brokerRequest.getPinotQuery().getFilterExpression();
+    if (filterExpression != null && 
filterExpression.getType().equals(ExpressionType.LITERAL) && filterExpression

Review comment:
       We can add constants for literal `true` and `false` expression, and 
check if the filter expression equals to them for better readability

##########
File path: 
pinot-common/src/main/java/org/apache/pinot/common/utils/request/RequestUtils.java
##########
@@ -151,7 +157,10 @@ public static Expression getLiteralExpression(byte[] 
value) {
   }
 
   public static Expression getLiteralExpression(Object object) {
-    if (object instanceof Integer || object instanceof Long) {
+    if (object instanceof Integer) {

Review comment:
       I feel it is not needed to introduce int literal here. `long`, `double`, 
`string` should be enough to represent all literals

##########
File path: 
pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/BaseBrokerRequestHandler.java
##########
@@ -428,6 +437,38 @@ public BrokerResponse handleRequest(JsonNode request, 
@Nullable RequesterIdentit
       _brokerMetrics.addMeteredTableValue(rawTableName, 
BrokerMeter.BROKER_RESPONSES_WITH_NUM_GROUPS_LIMIT_REACHED, 1);
     }
 
+    logBrokerResponse(requestStatistics, requestId, query, 
compilationStartTimeNs, brokerRequest,
+        numUnavailableSegments, serverStats, brokerResponse, 
executionEndTimeNs);
+    return brokerResponse;
+  }
+
+  /**
+   * Given a {@link BrokerRequest}, this function will determine if we can 
return a response without server-side query
+   * evaluation. This usually happens when the optimizer determines that the 
entire WHERE clause evaluates to false.
+   */
+  private boolean isResponsePossible(BrokerRequest brokerRequest) {
+    if (brokerRequest == null) { return true;}
+
+    Expression filterExpression = 
brokerRequest.getPinotQuery().getFilterExpression();

Review comment:
       This will throw NPE for PQL query (`PinotQuery` will be `null`)




-- 
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.

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