diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/EndpointBase.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/EndpointBase.java index 78e32d5becd1..0f598648bea2 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/EndpointBase.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/EndpointBase.java @@ -297,8 +297,8 @@ protected Map getCustomMetadataFromHeaders( Set customMetadataKeys = requestHeaders.keySet().stream() .filter(k -> { - if (k.startsWith(CUSTOM_METADATA_HEADER_PREFIX) && - !excludeMetadataFields.contains( + if (k.toLowerCase().startsWith(CUSTOM_METADATA_HEADER_PREFIX) && + !excludeMetadataFields.contains( k.substring( CUSTOM_METADATA_HEADER_PREFIX.length()))) { return true; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestEndpointBase.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestEndpointBase.java index 15de5f3cfdcc..ae47655e4314 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestEndpointBase.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestEndpointBase.java @@ -23,6 +23,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import java.nio.charset.StandardCharsets; +import java.util.Locale; import java.util.Map; import javax.ws.rs.core.MultivaluedHashMap; import javax.ws.rs.core.MultivaluedMap; @@ -96,4 +97,21 @@ public void init() { } assertThat(e.getCode()).contains("MetadataTooLarge"); } + @Test + public void testCustomMetadataHeadersWithUpperCaseHeaders() throws OS3Exception { + MultivaluedMap s3requestHeaders = new MultivaluedHashMap<>(); + String key = "CUSTOM-KEY"; + String value = "custom-value1"; + s3requestHeaders.add(CUSTOM_METADATA_HEADER_PREFIX.toUpperCase(Locale.ROOT) + key, value); + + EndpointBase endpointBase = new EndpointBase() { + @Override + public void init() { } + }; + + Map customMetadata = endpointBase.getCustomMetadataFromHeaders(s3requestHeaders); + + assertEquals(value, customMetadata.get(key)); + } + }