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]