When I run the IContract* unit tests from s3a adapter to test our s3 gateway I found that some of the unit tests (such as ITestS3AContractGetFileStatus.testListStatusEmptyDirectory) fails with org.apache.hadoop.fs.s3a.AWSBadRequestException.
Checking the request/response I found that the multi delete request (POST to the bucket address with ending with ?delete) fails with HTTP 400 and without any error in the logs.
The multi delete endpoint was tested with the robot tests and it worked well with aws s3 cli:
After some more investigation I found that the XML namespace was missing from the request:
The request was something like this:
Instead of this:
I believe the right approach is to add the namespace to request as it's documented by the AWS documentation but it seems s3a adapter doesn't do it and s3 accepts it.
We need a custom jaxb unmarshaller logic for the multi delete requests to accept requests both with and without namespaces.