Skip to content

Merge transfer manager change into mainline #2649

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

Merged
merged 50 commits into from
Aug 10, 2021
Merged
Show file tree
Hide file tree
Changes from 49 commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
e0f7c0e
Add download implementation for API requests
dagnir Mar 22, 2019
9a8d918
Add S3CrtAsyncClient skeleton
zoewangg Feb 26, 2021
0102460
Add support for adapting the sdk configurations to crt configurations.
Quanzzzz Mar 4, 2021
c76d19b
Implement getObject in S3CrtAsyncClient
zoewangg Mar 13, 2021
2649249
Implement S3 CRT upload
dagnir Mar 12, 2021
c4a0653
Fix checkstyle errors, add stability tests
zoewangg Mar 18, 2021
02922fe
Upgrade crt to 0.11.5
zoewangg Mar 20, 2021
2e741a8
Update APIs
zoewangg Mar 24, 2021
3f4adb3
Fix CRT S3 Client builder
dagnir Mar 26, 2021
368f3fe
Implement S3TransferManager#upload
dagnir Mar 29, 2021
ef04352
Implement TransferManager download and add s3-benchmarks module
zoewangg Mar 29, 2021
c806f3a
Move s3 crt related classes to s3-transfermanager
zoewangg May 28, 2021
cca13c1
Add requestLogger and requestIdLogger
zoewangg Jun 1, 2021
608fb47
Various fixes and refactoring
zoewangg Jun 2, 2021
68e043f
Add user-agent header in transfer manager
zoewangg Jun 4, 2021
9d5fe6c
Refactor UserAgentUtils and make it a protected API
zoewangg Jun 7, 2021
5506f5d
Merge remote-tracking branch 'origin/master' into feature/master/tran…
zoewangg Jun 8, 2021
a7bb007
Fix sdk-benchmarks version
zoewangg Jun 8, 2021
de5a1a8
Rename module and package for transfermanager
zoewangg Jun 9, 2021
6502313
Fix stability tests to not create a new client per request
zoewangg Jun 10, 2021
961e069
Various renaming
zoewangg Jun 11, 2021
b5df57e
Remove the option to pass bucket and key to DownloadRequest and Uploa…
zoewangg Jun 11, 2021
3a3d998
Add README for S3TransferManager
zoewangg Jun 16, 2021
371b0ef
Add validation in S3ClientConfiguration
zoewangg Jun 16, 2021
b78f5b3
Fix CRT/SDK POJO conversion and add more tests
zoewangg Jun 18, 2021
c5ac019
Update to use CRT DelegateCredentialsProvider
zoewangg Jun 19, 2021
fd966ad
Provide HTTP request-level data to PutObjectResponse
zoewangg Jun 22, 2021
4a924a8
Update Javadocs
zoewangg Jun 23, 2021
b3923cb
Fix the race condition in the FileAsyncRequestBody which causes the r…
zoewangg Jun 16, 2021
85e532b
Add request cancellation logic and tests
zoewangg Jun 23, 2021
8b3f54e
Fixed an issue where the future gets stuck when upload fails
zoewangg Jun 24, 2021
03df45f
Offload completion of execution future to a separate thread
zoewangg Jun 24, 2021
3af86a0
Wrap CrtS3RuntimeException to SdkServiceException
Jun 25, 2021
893b493
Merge branch 'feature/master/transfermanager' into feature/master/tra…
joviegas Jun 28, 2021
b41e68d
Revert "Wrap CrtS3RuntimeException to SdkServiceException"
joviegas Jun 29, 2021
e770e19
Update s3 crt client tests to verify resources are closed properly
zoewangg Jun 26, 2021
081679c
Wrap CrtS3RuntimeException to S3ServiceException
Jun 29, 2021
410662f
Merge remote-tracking branch 'origin/master' into feature/master/tran…
zoewangg Jul 12, 2021
c61d14b
Update version
zoewangg Jul 12, 2021
9df97c6
Bump up CRT version, clean up resources in tests, fix credential adap…
zoewangg Jul 14, 2021
2a663fc
Remove buffer copy since it's no longer needed (#2611)
zoewangg Jul 21, 2021
911e9ef
Fix fd remaining open longer than necessary (#2616)
dagnir Jul 22, 2021
ee3b026
Cancel sub on finish and exception (#2619)
dagnir Jul 23, 2021
4e133c0
Bump up crt version (#2640)
zoewangg Aug 3, 2021
baa245a
Merge remote-tracking branch 'origin/master' into zoewang/mergeTM2
zoewangg Aug 9, 2021
d149ba4
Fix merge conflict
zoewangg Aug 9, 2021
150a4b1
Merge 'origin/master' into transfer manager branch (#2647)
zoewangg Aug 9, 2021
64e56bd
Revert "Merge 'origin/master' into transfer manager branch (#2647)"
zoewangg Aug 9, 2021
c2c9c5e
Merge branch into feature/master/transfermanager
zoewangg Aug 9, 2021
16f3699
Add changelog entry
zoewangg Aug 10, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changes/next-release/bugfix-AWSSDKforJavav2-0da2191.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"type": "bugfix",
"category": "AWS SDK for Java v2",
"contributor": "",
"description": "Fix issue in `FileAsyncRequestBody` where the underlying file channel would only be closed when enough requests are sent to read *past* the end of the file; if just enough requests are sent to read to the end of the file, the file is not closed, leaving an open file descriptor around longer than it needs to be."
}
2 changes: 1 addition & 1 deletion buildspecs/release-to-maven.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ phases:
if ! curl -f --head $SONATYPE_URL; then
mkdir -p $CREDENTIALS
aws s3 cp s3://aws-java-sdk-release-credentials/ $CREDENTIALS/ --recursive
mvn clean deploy -B -s $SETTINGS_XML -Dgpg.homedir=$GPG_HOME -Ppublishing -DperformRelease -Dspotbugs.skip -DskipTests -Dcheckstyle.skip -Djapicmp.skip -Ddoclint=none -pl !:protocol-tests,!:protocol-tests-core,!:codegen-generated-classes-test,!:sdk-benchmarks,!:module-path-tests,!:tests-coverage-reporting,!:stability-tests,!:sdk-native-image-test,!:auth-sts-testing -DautoReleaseAfterClose=true -DstagingProgressTimeoutMinutes=30
mvn clean deploy -B -s $SETTINGS_XML -Dgpg.homedir=$GPG_HOME -Ppublishing -DperformRelease -Dspotbugs.skip -DskipTests -Dcheckstyle.skip -Djapicmp.skip -Ddoclint=none -pl !:protocol-tests,!:protocol-tests-core,!:codegen-generated-classes-test,!:sdk-benchmarks,!:module-path-tests,!:tests-coverage-reporting,!:stability-tests,!:sdk-native-image-test,!:auth-sts-testing,!:s3-benchmarks -DautoReleaseAfterClose=true -DstagingProgressTimeoutMinutes=30
else
echo "This version was already released."
fi
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
import software.amazon.awssdk.core.SdkSystemSetting;
import software.amazon.awssdk.core.exception.SdkClientException;
import software.amazon.awssdk.core.exception.SdkServiceException;
import software.amazon.awssdk.core.internal.util.UserAgentUtils;
import software.amazon.awssdk.core.util.SdkUserAgent;
import software.amazon.awssdk.regions.util.HttpResourcesUtils;
import software.amazon.awssdk.regions.util.ResourcesEndpointProvider;
import software.amazon.awssdk.utils.ToString;
Expand Down Expand Up @@ -160,7 +160,7 @@ public URI endpoint() throws IOException {
@Override
public Map<String, String> headers() {
Map<String, String> requestHeaders = new HashMap<>();
requestHeaders.put("User-Agent", UserAgentUtils.getUserAgent());
requestHeaders.put("User-Agent", SdkUserAgent.create().userAgent());
requestHeaders.put("Accept", "*/*");
requestHeaders.put("Connection", "keep-alive");

Expand Down Expand Up @@ -195,7 +195,7 @@ public URI endpoint() {
@Override
public Map<String, String> headers() {
Map<String, String> requestHeaders = new HashMap<>();
requestHeaders.put("User-Agent", UserAgentUtils.getUserAgent());
requestHeaders.put("User-Agent", SdkUserAgent.create().userAgent());
requestHeaders.put("Accept", "*/*");
requestHeaders.put("Connection", "keep-alive");
requestHeaders.put(EC2_METADATA_TOKEN_TTL_HEADER, DEFAULT_TOKEN_TTL);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
import org.junit.ClassRule;
import org.junit.Test;
import software.amazon.awssdk.core.exception.SdkClientException;
import software.amazon.awssdk.core.internal.util.UserAgentUtils;
import software.amazon.awssdk.core.util.SdkUserAgent;
import software.amazon.awssdk.regions.util.ResourcesEndpointProvider;
import software.amazon.awssdk.testutils.EnvironmentVariableHelper;

Expand Down Expand Up @@ -122,7 +122,7 @@ private void stubForCorruptedSuccessResponse() {

private void stubFor200Response(String body) {
stubFor(get(urlPathEqualTo(CREDENTIALS_PATH))
.withHeader("User-Agent", equalTo(UserAgentUtils.getUserAgent()))
.withHeader("User-Agent", equalTo(SdkUserAgent.create().userAgent()))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/json")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
import org.junit.ClassRule;
import org.junit.Test;
import software.amazon.awssdk.core.exception.SdkClientException;
import software.amazon.awssdk.core.internal.util.UserAgentUtils;
import software.amazon.awssdk.core.util.SdkUserAgent;
import software.amazon.awssdk.regions.util.ResourcesEndpointProvider;
import software.amazon.awssdk.utils.DateUtils;
import software.amazon.awssdk.utils.IoUtils;
Expand Down Expand Up @@ -132,7 +132,7 @@ public void basicCachingFunctionalityWorks() {
private void stubForSuccessResponseWithCustomBody(String body) {
stubFor(
get(urlPathEqualTo(CREDENTIALS_PATH))
.withHeader("User-Agent", equalTo(UserAgentUtils.getUserAgent()))
.withHeader("User-Agent", equalTo(SdkUserAgent.create().userAgent()))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/json")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,11 @@
import static com.github.tomakehurst.wiremock.client.WireMock.putRequestedFor;
import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
import static org.assertj.core.api.Assertions.assertThat;
import static org.hamcrest.Matchers.instanceOf;
import com.github.tomakehurst.wiremock.WireMockServer;
import com.github.tomakehurst.wiremock.client.WireMock;
import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
import com.github.tomakehurst.wiremock.junit.WireMockRule;
import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder;
import java.net.SocketTimeoutException;
import java.time.Duration;
import java.time.Instant;
import org.junit.AfterClass;
Expand All @@ -40,8 +37,7 @@
import org.junit.rules.ExpectedException;
import software.amazon.awssdk.core.SdkSystemSetting;
import software.amazon.awssdk.core.exception.SdkClientException;
import software.amazon.awssdk.core.internal.util.UserAgentUtils;
import software.amazon.awssdk.profiles.ProfileFileSystemSetting;
import software.amazon.awssdk.core.util.SdkUserAgent;
import software.amazon.awssdk.utils.DateUtils;

public class InstanceProfileCredentialsProviderTest {
Expand Down Expand Up @@ -94,7 +90,7 @@ public void resolveCredentials_requestsIncludeUserAgent() {
provider.resolveCredentials();

String userAgentHeader = "User-Agent";
String userAgent = UserAgentUtils.getUserAgent();
String userAgent = SdkUserAgent.create().userAgent();
WireMock.verify(putRequestedFor(urlPathEqualTo(TOKEN_RESOURCE_PATH)).withHeader(userAgentHeader, equalTo(userAgent)));
WireMock.verify(getRequestedFor(urlPathEqualTo(CREDENTIALS_RESOURCE_PATH)).withHeader(userAgentHeader, equalTo(userAgent)));
WireMock.verify(getRequestedFor(urlPathEqualTo(CREDENTIALS_RESOURCE_PATH + "some-profile")).withHeader(userAgentHeader, equalTo(userAgent)));
Expand Down Expand Up @@ -235,7 +231,7 @@ public void resolveCredentials_customProfileFileAndName_usesCorrectEndpoint() {
provider.resolveCredentials();

String userAgentHeader = "User-Agent";
String userAgent = UserAgentUtils.getUserAgent();
String userAgent = SdkUserAgent.create().userAgent();
mockMetadataEndpoint_2.verify(putRequestedFor(urlPathEqualTo(TOKEN_RESOURCE_PATH)).withHeader(userAgentHeader, equalTo(userAgent)));
mockMetadataEndpoint_2.verify(getRequestedFor(urlPathEqualTo(CREDENTIALS_RESOURCE_PATH)).withHeader(userAgentHeader, equalTo(userAgent)));
mockMetadataEndpoint_2.verify(getRequestedFor(urlPathEqualTo(CREDENTIALS_RESOURCE_PATH + "some-profile")).withHeader(userAgentHeader, equalTo(userAgent)));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
import software.amazon.awssdk.core.SdkSystemSetting;
import software.amazon.awssdk.core.exception.SdkClientException;
import software.amazon.awssdk.core.exception.SdkServiceException;
import software.amazon.awssdk.core.internal.util.UserAgentUtils;
import software.amazon.awssdk.core.util.SdkUserAgent;
import software.amazon.awssdk.protocols.jsoncore.JsonNode;
import software.amazon.awssdk.protocols.jsoncore.JsonNodeParser;
import software.amazon.awssdk.regions.util.HttpResourcesUtils;
Expand Down Expand Up @@ -633,7 +633,7 @@ public URI endpoint() {
@Override
public Map<String, String> headers() {
Map<String, String> requestHeaders = new HashMap<>();
requestHeaders.put("User-Agent", UserAgentUtils.getUserAgent());
requestHeaders.put("User-Agent", SdkUserAgent.create().userAgent());
requestHeaders.put("Accept", "*/*");
requestHeaders.put("Connection", "keep-alive");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
import java.util.HashMap;
import java.util.Map;
import software.amazon.awssdk.annotations.SdkInternalApi;
import software.amazon.awssdk.core.internal.util.UserAgentUtils;
import software.amazon.awssdk.core.util.SdkUserAgent;
import software.amazon.awssdk.regions.util.ResourcesEndpointProvider;

@SdkInternalApi
Expand All @@ -43,7 +43,7 @@ public URI endpoint() {
@Override
public Map<String, String> headers() {
Map<String, String> requestHeaders = new HashMap<>();
requestHeaders.put("User-Agent", UserAgentUtils.getUserAgent());
requestHeaders.put("User-Agent", SdkUserAgent.create().userAgent());
requestHeaders.put("Accept", "*/*");
requestHeaders.put("Connection", "keep-alive");
requestHeaders.put(EC2_METADATA_TOKEN_TTL_HEADER, DEFAULT_TOKEN_TTL);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
import java.util.HashMap;
import java.util.Map;
import software.amazon.awssdk.annotations.SdkProtectedApi;
import software.amazon.awssdk.core.internal.util.UserAgentUtils;
import software.amazon.awssdk.core.util.SdkUserAgent;

/**
* <p>
Expand Down Expand Up @@ -57,7 +57,7 @@ default ResourcesEndpointRetryPolicy retryPolicy() {
*/
default Map<String, String> headers() {
Map<String, String> requestHeaders = new HashMap<>();
requestHeaders.put("User-Agent", UserAgentUtils.getUserAgent());
requestHeaders.put("User-Agent", SdkUserAgent.create().userAgent());
requestHeaders.put("Accept", "*/*");
requestHeaders.put("Connection", "keep-alive");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,7 @@
import org.mockito.runners.MockitoJUnitRunner;
import software.amazon.awssdk.core.exception.SdkClientException;
import software.amazon.awssdk.core.exception.SdkServiceException;
import software.amazon.awssdk.core.internal.util.UserAgentUtils;
import software.amazon.awssdk.core.util.VersionInfo;
import software.amazon.awssdk.core.util.SdkUserAgent;
import software.amazon.awssdk.regions.internal.util.ConnectionUtils;
import software.amazon.awssdk.regions.internal.util.SocketUtils;

Expand All @@ -53,7 +52,7 @@ public class HttpCredentialsUtilsTest {
private static Map<String, String> headers = new HashMap<String, String>()
{
{
put("User-Agent", UserAgentUtils.getUserAgent());
put("User-Agent", SdkUserAgent.create().userAgent());
put("Accept", "*/*");
put("Connection", "keep-alive");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,9 @@
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
import software.amazon.awssdk.core.internal.http.loader.DefaultSdkAsyncHttpClientBuilder;
import software.amazon.awssdk.core.internal.http.loader.DefaultSdkHttpClientBuilder;
import software.amazon.awssdk.core.internal.util.UserAgentUtils;
import software.amazon.awssdk.core.retry.RetryMode;
import software.amazon.awssdk.core.retry.RetryPolicy;
import software.amazon.awssdk.core.util.SdkUserAgent;
import software.amazon.awssdk.http.ExecutableHttpRequest;
import software.amazon.awssdk.http.HttpExecuteRequest;
import software.amazon.awssdk.http.SdkHttpClient;
Expand Down Expand Up @@ -205,7 +205,7 @@ private SdkClientConfiguration mergeGlobalDefaults(SdkClientConfiguration config
.option(ADDITIONAL_HTTP_HEADERS, new LinkedHashMap<>())
.option(PROFILE_FILE, profileFile)
.option(PROFILE_NAME, ProfileFileSystemSetting.AWS_PROFILE.getStringValueOrThrow())
.option(USER_AGENT_PREFIX, UserAgentUtils.getUserAgent())
.option(USER_AGENT_PREFIX, SdkUserAgent.create().userAgent())
.option(USER_AGENT_SUFFIX, "")
.option(CRC32_FROM_COMPRESSED_DATA_ENABLED, false));
}
Expand Down Expand Up @@ -298,6 +298,9 @@ protected AttributeMap childHttpConfig() {
* Finalize which async executor service will be used for the created client. The default async executor
* service has at least 8 core threads and can scale up to at least 64 threads when needed depending
* on the number of processors available.
*
* This uses the same default executor in S3NativeClientConfiguration#resolveAsyncFutureCompletionExecutor.
* Make sure you update that method if you update the defaults here.
*/
private Executor resolveAsyncFutureCompletionExecutor(SdkClientConfiguration config) {
Supplier<Executor> defaultExecutor = () -> {
Expand Down
Loading