-
Notifications
You must be signed in to change notification settings - Fork 9k
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
HADOOP-19399. Adds in support for CRT client. #7443
base: trunk
Are you sure you want to change the base?
HADOOP-19399. Adds in support for CRT client. #7443
Conversation
💔 -1 overall
This message was automatically generated. |
@@ -0,0 +1,70 @@ | |||
package org.apache.hadoop.fs.s3a.impl; | |||
|
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.
@steveloughran starting to work on the CRT changes, wanted to get your opinion on this. What do you think about doing some refactoring around this region logic, so we have our own builder and container class for AWSRegionEndpointInformation
which all clients can get information out of.
Without this you have to duplicate the endpoint region logic for CRT and the other clients since they use different builder classes. CRT uses S3CrtAsyncClientBuilder
which does not extend S3BaseClientBuilder
and so you can't use the existing method..
💔 -1 overall
This message was automatically generated. |
badf0db
to
032c9a8
Compare
@@ -324,6 +326,19 @@ | |||
</properties> | |||
</profile> | |||
|
|||
<!-- Use the S3 CRT client --> |
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.
this doesn't seem to be working btw, ran mvn clean verify -Dit.test=ITestAwsSdkWorkarounds -Dtest=none -Pcrt
as I expect ITestAwsSdkWorkarounds to fail when using CRT, but it still passes. Need to look
@@ -356,7 +362,7 @@ public PutObjectRequest.Builder newPutObjectRequestBuilder(String key, | |||
} | |||
|
|||
// Set the timeout for object uploads but not directory markers. | |||
if (!isDirectoryMarker) { | |||
if (!isDirectoryMarker && !isCRTEnabled) { |
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.
currently cannot set request level timeouts with CRT
@steveloughran @mukund-thakur @shameersss1 Could you please review? Internal TPC-DS benchmarks for AAL seem to be consistently showing better numbers with CRT, possibly due to the CRT's enhanced connection management, so want to get this in for 3.4.2. |
durationTrackerFactory, | ||
STORE_CLIENT_CREATION.getSymbol(), | ||
() -> clientFactory.createS3AsyncClient(getUri(), clientCreationParameters)); | ||
return trackDurationOfOperation(durationTrackerFactory, STORE_CLIENT_CREATION.getSymbol(), |
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.
this should actually go into the client factory, not here. moving this over
if (regionEndpointInformation.getEndpoint() == null) { | ||
s3CrtAsyncClientBuilder.endpointOverride(regionEndpointInformation.getEndpoint()); | ||
} | ||
|
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.
This doesn't look right. We are doing a null check for both the region and the endpoint and then setting to that if null?
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.
thanks, it was not right :) fixed!
@@ -0,0 +1,232 @@ | |||
/* |
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.
Can we not modify the configureEndpointAndRegion method in DefaultS3ClientFactory class to support AWSRegionEndpointInformation and not create a new class for this?
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.
prefer to move it out to a separate class, this logic doesn't really belong in the client factory imo
💔 -1 overall
This message was automatically generated. |
💔 -1 overall
This message was automatically generated. |
💔 -1 overall
This message was automatically generated. |
💔 -1 overall
This message was automatically generated. |
Description of PR
Adds support S3 CRT client.
Configuration mapping b/w clients is getting tricky, I moved endpoint/region resolution logic out so it can be re-used.
Still TODO:
How was this patch tested?
Tested in us-east-2, all good, except
since we're using the CRT client, the
The provided S3AsyncClient is an instance of MultipartS3AsyncClient
no longer gets logged. This is also not logged in the latest SDKs! so maybe we cut this test now?For code changes:
LICENSE
,LICENSE-binary
,NOTICE-binary
files?