-
Notifications
You must be signed in to change notification settings - Fork 9.1k
HDDS-1948. S3 MPU can't be created with octet-stream content-type #1266
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
💔 -1 overall
This message was automatically generated. |
hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/HeaderPreprocessor.java
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Overall LGTM.
One minor comment.
Some of the S3 tests are failing, can you verify if they are related, as failed tests are related to S3 MPU.
bq. Some of the S3 tests are failing, can you verify if they are related, as failed tests are related to S3 MPU. I tested locally and worked well. Let's wait for an other jenkins result... |
💔 -1 overall
This message was automatically generated. |
💔 -1 overall
This message was automatically generated. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
+1 LGTM.
Thank You @elek for the fix.
I will commit this to the trunk.
) (cherry picked from commit edd7085)
This problem is reported offline by [~shanekumpf@gmail.com].
When aws-sdk-go is used to access to s3 gateway of Ozone it sends the Multi Part Upload initialize message with "application/octet-stream" Content-Type.
This Content-Type is missing from the aws-cli which is used to reimplement s3 endpoint.
The problem is that we use the same rest endpoint for initialize and complete Multipart Upload request. For the completion we need the CompleteMultipartUploadRequest parameter which is parsed from the body.
For initialize we have an empty body which can't be serialized to CompleteMultipartUploadRequest.
The workaround is to set a specific content type from a filter which help up to create two different REST method for initialize and completion message.
Here is an example to test (using bogus AWS credentials).
{code}
curl -H 'Host:yourhost' -H 'User-Agent:aws-sdk-go/1.15.11 (go1.11.2; linux; amd64)' -H 'Content-Length:0' -H 'Authorization:AWS4-HMAC-SHA256 Credential=qwe/20190809/ozone/s3/aws4_request, SignedHeaders=content-type;host;x-amz-acl;x-amz-content-sha256;x-amz-date;x-amz-storage-class, Signature=7726ed63990ba3f4f1f796d4ab263f5d9c3374528840f5e49d106dbef491f22c' -H 'Content-Type:application/octet-stream' -H 'X-Amz-Acl:private' -H 'X-Amz-Content-Sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' -H 'X-Amz-Date:20190809T070142Z' -H 'X-Amz-Storage-Class:STANDARD' -H 'Accept-Encoding:gzip' -X POST 'http://localhost:9999/docker/docker/registry/v2/repositories/apache/ozone-runner/_uploads/2173f019-09c3-466b-bb7d-c31ce749d826/data?uploads
{code}
Without the patch it returns with HTTP 405 (Not supported Media Type).
See: https://issues.apache.org/jira/browse/HDDS-1948