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

ankitsultana 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 ee577afbdb Allow RequestContext to consider http-headers 
case-insensitivity (#13169)
ee577afbdb is described below

commit ee577afbdbc2b81bb1b4ab3800aad1f18e40fc28
Author: Pratik Tibrewal <[email protected]>
AuthorDate: Fri May 17 01:55:22 2024 +0530

    Allow RequestContext to consider http-headers case-insensitivity (#13169)
---
 .../pinot/broker/requesthandler/BaseBrokerRequestHandler.java    | 5 +++--
 .../query/PinotBrokerQueryEventListenerFactory.java              | 9 ++++++++-
 .../src/main/java/org/apache/pinot/spi/trace/RequestContext.java | 8 ++++++++
 3 files changed, 19 insertions(+), 3 deletions(-)

diff --git 
a/pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/BaseBrokerRequestHandler.java
 
b/pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/BaseBrokerRequestHandler.java
index 51316e943c..c929560e40 100644
--- 
a/pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/BaseBrokerRequestHandler.java
+++ 
b/pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/BaseBrokerRequestHandler.java
@@ -264,8 +264,9 @@ public abstract class BaseBrokerRequestHandler implements 
BrokerRequestHandler {
     requestContext.setRequestId(requestId);
     if (httpHeaders != null) {
       
requestContext.setRequestHttpHeaders(httpHeaders.getRequestHeaders().entrySet().stream().filter(
-              entry -> 
PinotBrokerQueryEventListenerFactory.getAllowlistQueryRequestHeaders().contains(entry.getKey()))
-          .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)));
+              entry -> 
PinotBrokerQueryEventListenerFactory.getAllowlistQueryRequestHeaders()
+                  .contains(entry.getKey().toLowerCase()))
+          .collect(Collectors.toMap(entry -> entry.getKey().toLowerCase(), 
Map.Entry::getValue)));
     }
 
     // First-stage access control to prevent unauthenticated requests from 
using up resources. Secondary table-level
diff --git 
a/pinot-spi/src/main/java/org/apache/pinot/spi/eventlistener/query/PinotBrokerQueryEventListenerFactory.java
 
b/pinot-spi/src/main/java/org/apache/pinot/spi/eventlistener/query/PinotBrokerQueryEventListenerFactory.java
index 4aa4add27c..14bf1f5a9a 100644
--- 
a/pinot-spi/src/main/java/org/apache/pinot/spi/eventlistener/query/PinotBrokerQueryEventListenerFactory.java
+++ 
b/pinot-spi/src/main/java/org/apache/pinot/spi/eventlistener/query/PinotBrokerQueryEventListenerFactory.java
@@ -26,6 +26,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
+import java.util.stream.Collectors;
 import org.apache.pinot.spi.env.PinotConfiguration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -91,9 +92,11 @@ public class PinotBrokerQueryEventListenerFactory {
    * @param eventListenerConfiguration The subset of the configuration 
containing the event-listener-related keys
    */
   private static void 
initializeAllowlistQueryRequestHeaders(PinotConfiguration 
eventListenerConfiguration) {
+    // As HttpHeaders are case-insensitive, we will convert the configured 
list to all lower case while registering
     List<String> allowlistQueryRequestHeaders =
         Splitter.on(",").omitEmptyStrings().trimResults()
-            
.splitToList(eventListenerConfiguration.getProperty(CONFIG_OF_REQUEST_CONTEXT_TRACKED_HEADER_KEYS,
 ""));
+            
.splitToList(eventListenerConfiguration.getProperty(CONFIG_OF_REQUEST_CONTEXT_TRACKED_HEADER_KEYS,
 ""))
+            .stream().map(String::toLowerCase).collect(Collectors.toList());
 
     LOGGER.info("{}: allowlist headers will be used for 
PinotBrokerQueryEventListener", allowlistQueryRequestHeaders);
     registerAllowlistQueryRequestHeaders(allowlistQueryRequestHeaders);
@@ -133,6 +136,10 @@ public class PinotBrokerQueryEventListenerFactory {
     return getBrokerQueryEventListener(new 
PinotConfiguration(Collections.emptyMap()));
   }
 
+  /**
+   * @return the list of allowlisted headers passed as comma-separated string 
for "request.context.tracked.header.keys"
+   * The values are all in lower-case.
+   */
   @VisibleForTesting
   public static List<String> getAllowlistQueryRequestHeaders() {
     return _allowlistQueryRequestHeaders;
diff --git 
a/pinot-spi/src/main/java/org/apache/pinot/spi/trace/RequestContext.java 
b/pinot-spi/src/main/java/org/apache/pinot/spi/trace/RequestContext.java
index d1ca85f997..ae0f35a22e 100644
--- a/pinot-spi/src/main/java/org/apache/pinot/spi/trace/RequestContext.java
+++ b/pinot-spi/src/main/java/org/apache/pinot/spi/trace/RequestContext.java
@@ -217,8 +217,16 @@ public interface RequestContext {
 
   void setProcessingExceptions(List<String> processingExceptions);
 
+  /**
+   * @return Map of allowlisted request header keys (in lowercase) to list of 
header values
+   */
   Map<String, List<String>> getRequestHttpHeaders();
 
+  /**
+   * While setting the http request headers here, we send the keys in 
lower-case to be in parity with the
+   * case-insensitive nature of Http.
+   * @param requestHttpHeaders Map of request header keys (in lowercase) to 
list of header values
+   */
   void setRequestHttpHeaders(Map<String, List<String>> requestHttpHeaders);
 
   enum FanoutType {


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

Reply via email to