Skip to content

Update aws sdk to 1.11.20#19594

Closed
dadoonet wants to merge 4 commits intoelastic:masterfrom
dadoonet:pr/18910-update-aws-sdk
Closed

Update aws sdk to 1.11.20#19594
dadoonet wants to merge 4 commits intoelastic:masterfrom
dadoonet:pr/18910-update-aws-sdk

Conversation

@dadoonet
Copy link
Copy Markdown
Contributor

WIP: DO NOT MERGE IT (tests are failing see description)

AWS Release Notes

From 1.10.69 (see #17784), here are the most important updates:

Minor 1.10 releases:

  • Amazon S3 Added support for a new configuration named BucketAccelerateConfiguration which supports faster uploads/downloads to S3 buckets.
  • Adding several missing throttling error codes for API Gateway and S3.
  • Amazon S3 Introducing a new version of the ListObjects (ListObjectsV2) API that allows listing objects with a large number of delete markers.

1.11:

AWS SDK for Java:

  • Improved URL encoding for REST clients.
  • Dropped usage of Json.org library in favor of Jackson.
  • Updated retry policies to include jitter during backoffs.
  • Generate output POJOs for all operations.
  • Renamed the aws-java-sdk-flow-build-tools-{sdkversion}.jar to aws-swf-build-tools-1.0.jar. The jar is also available in Maven.

AWS SDK for Java - Amazon S3:

  • Added support to return the part count of an object in object metadata. You can also download a part by setting part number in GetObjectRequest.
  • TransferManager supports parallel downloads for multipart objects.
  • Default to Signature Version 4 signing process in all regions.

Apache HttpClient upgraded to 4.5.2

Jackson update

Note that Jackson has been updated at some point but as we don't use dependency management anymore it has never been updated and we did not notice.

So I updated:

  • jackson-databind to 2.6.6.
  • jackson-annotations to 2.6.0.

That being said, I'm unsure if we should better use ${versions.jackson} instead.

Functional changes

For repository-s3 plugin, this new version of the AWS SDK now sets Throttle Retries (overridable by use_throttle_retries) to true by default instead of false previously.

Security manager issues

Tests are failing on repository-s3 plugin with:

[2016-07-26 09:36:40,350][WARN ][repositories             ] [AUqzQAb] failed to create repository [s3][test_repo_s3_1]
java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "accessDeclaredMembers")
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
    at java.security.AccessController.checkPermission(AccessController.java:884)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
    at java.lang.Class.checkMemberAccess(Class.java:2348)
    at java.lang.Class.getDeclaredConstructors(Class.java:2019)
    at com.fasterxml.jackson.databind.introspect.AnnotatedClass.resolveCreators(AnnotatedClass.java:338)
    at com.fasterxml.jackson.databind.introspect.AnnotatedClass.getStaticMethods(AnnotatedClass.java:245)
    at com.fasterxml.jackson.databind.introspect.BasicBeanDescription.getFactoryMethods(BasicBeanDescription.java:461)
    at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._addDeserializerFactoryMethods(BasicDeserializerFactory.java:670)
    at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._constructDefaultValueInstantiator(BasicDeserializerFactory.java:321)
    at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.findValueInstantiator(BasicDeserializerFactory.java:254)
    at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.createCollectionDeserializer(BasicDeserializerFactory.java:1027)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:394)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:352)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
    at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
    at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:428)
    at com.fasterxml.jackson.databind.deser.std.StdDeserializer.findDeserializer(StdDeserializer.java:947)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:439)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:296)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
    at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
    at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:461)
    at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:3838)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3732)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2796)
    at com.amazonaws.partitions.PartitionsLoader.loadPartitionFromStream(PartitionsLoader.java:92)
    at com.amazonaws.partitions.PartitionsLoader.build(PartitionsLoader.java:84)
    at com.amazonaws.regions.RegionMetadataFactory.create(RegionMetadataFactory.java:30)
    at com.amazonaws.regions.RegionUtils.initialize(RegionUtils.java:66)
    at com.amazonaws.regions.RegionUtils.getRegionMetadata(RegionUtils.java:54)
    at com.amazonaws.regions.RegionUtils.getRegion(RegionUtils.java:107)
    at com.amazonaws.services.s3.AmazonS3Client.createSigner(AmazonS3Client.java:3288)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3984)
    at com.amazonaws.services.s3.AmazonS3Client.headBucket(AmazonS3Client.java:1218)
    at com.amazonaws.services.s3.AmazonS3Client.doesBucketExist(AmazonS3Client.java:1175)
    at org.elasticsearch.cloud.aws.blobstore.S3BlobStore.<init>(S3BlobStore.java:88)
    at org.elasticsearch.repositories.s3.S3Repository.<init>(S3Repository.java:309)
    at org.elasticsearch.plugin.repository.s3.S3RepositoryPlugin.lambda$getRepositories$6(S3RepositoryPlugin.java:73)
    at org.elasticsearch.repositories.RepositoriesService.createRepository(RepositoriesService.java:381)
    at org.elasticsearch.repositories.RepositoriesService.registerRepository(RepositoriesService.java:354)
    at org.elasticsearch.repositories.RepositoriesService.access$100(RepositoriesService.java:54)
    at org.elasticsearch.repositories.RepositoriesService$1.execute(RepositoriesService.java:107)
    at org.elasticsearch.cluster.ClusterStateUpdateTask.execute(ClusterStateUpdateTask.java:45)
    at org.elasticsearch.cluster.service.ClusterService.runTasksForExecutor(ClusterService.java:553)
    at org.elasticsearch.cluster.service.ClusterService$UpdateTask.run(ClusterService.java:857)
    at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:450)
    at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:237)
    at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:200)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

Related to #18910.

# AWS Release Notes

From 1.10.69 (see elastic#17784), here are the most important updates:

## Minor 1.10 releases:

* Amazon S3	Added support for a new configuration named BucketAccelerateConfiguration which supports faster uploads/downloads to S3 buckets.
* Adding several missing throttling error codes for API Gateway and S3.
* Amazon S3	Introducing a new version of the ListObjects (ListObjectsV2) API that allows listing objects with a large number of delete markers.

## 1.11:

AWS SDK for Java:

* Improved URL encoding for REST clients.
* Dropped usage of Json.org library in favor of Jackson.
* Updated retry policies to include jitter during backoffs.
* Generate output POJOs for all operations.
* Renamed the aws-java-sdk-flow-build-tools-{sdkversion}.jar to aws-swf-build-tools-1.0.jar. The jar is also available in Maven.

AWS SDK for Java - Amazon S3:
* Added support to return the part count of an object in object metadata. You can also download a part by setting part number in GetObjectRequest.
* TransferManager supports parallel downloads for multipart objects.
* Default to Signature Version 4 signing process in all regions.

Apache HttpClient upgraded to 4.5.2

# Jackson update

Note that [Jackson has been updated at some point](https://github.com/aws/aws-sdk-java/blob/master/pom.xml#L115) but as we don't use dependency management anymore it has never been updated and we did not notice.

So I updated:

* jackson-databind to 2.6.6.
* jackson-annotations to 2.6.0.

That being said, I'm unsure if we should better use `${versions.jackson}` instead.

# Functional changes

For `repository-s3` plugin, this new version of the AWS SDK now sets Throttle Retries (overridable by `use_throttle_retries`) to `true` by default instead of `false` previously.

# Security manager issues

Tests are failing on `repository-s3` plugin with:

```
[2016-07-26 09:36:40,350][WARN ][repositories             ] [AUqzQAb] failed to create repository [s3][test_repo_s3_1]
java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "accessDeclaredMembers")
	at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
	at java.security.AccessController.checkPermission(AccessController.java:884)
	at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
	at java.lang.Class.checkMemberAccess(Class.java:2348)
	at java.lang.Class.getDeclaredConstructors(Class.java:2019)
	at com.fasterxml.jackson.databind.introspect.AnnotatedClass.resolveCreators(AnnotatedClass.java:338)
	at com.fasterxml.jackson.databind.introspect.AnnotatedClass.getStaticMethods(AnnotatedClass.java:245)
	at com.fasterxml.jackson.databind.introspect.BasicBeanDescription.getFactoryMethods(BasicBeanDescription.java:461)
	at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._addDeserializerFactoryMethods(BasicDeserializerFactory.java:670)
	at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._constructDefaultValueInstantiator(BasicDeserializerFactory.java:321)
	at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.findValueInstantiator(BasicDeserializerFactory.java:254)
	at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.createCollectionDeserializer(BasicDeserializerFactory.java:1027)
	at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:394)
	at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:352)
	at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264)
	at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
	at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
	at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:428)
	at com.fasterxml.jackson.databind.deser.std.StdDeserializer.findDeserializer(StdDeserializer.java:947)
	at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:439)
	at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:296)
	at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
	at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
	at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:461)
	at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:3838)
	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3732)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2796)
	at com.amazonaws.partitions.PartitionsLoader.loadPartitionFromStream(PartitionsLoader.java:92)
	at com.amazonaws.partitions.PartitionsLoader.build(PartitionsLoader.java:84)
	at com.amazonaws.regions.RegionMetadataFactory.create(RegionMetadataFactory.java:30)
	at com.amazonaws.regions.RegionUtils.initialize(RegionUtils.java:66)
	at com.amazonaws.regions.RegionUtils.getRegionMetadata(RegionUtils.java:54)
	at com.amazonaws.regions.RegionUtils.getRegion(RegionUtils.java:107)
	at com.amazonaws.services.s3.AmazonS3Client.createSigner(AmazonS3Client.java:3288)
	at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3984)
	at com.amazonaws.services.s3.AmazonS3Client.headBucket(AmazonS3Client.java:1218)
	at com.amazonaws.services.s3.AmazonS3Client.doesBucketExist(AmazonS3Client.java:1175)
	at org.elasticsearch.cloud.aws.blobstore.S3BlobStore.<init>(S3BlobStore.java:88)
	at org.elasticsearch.repositories.s3.S3Repository.<init>(S3Repository.java:309)
	at org.elasticsearch.plugin.repository.s3.S3RepositoryPlugin.lambda$getRepositories$6(S3RepositoryPlugin.java:73)
	at org.elasticsearch.repositories.RepositoriesService.createRepository(RepositoriesService.java:381)
	at org.elasticsearch.repositories.RepositoriesService.registerRepository(RepositoriesService.java:354)
	at org.elasticsearch.repositories.RepositoriesService.access$100(RepositoriesService.java:54)
	at org.elasticsearch.repositories.RepositoriesService$1.execute(RepositoriesService.java:107)
	at org.elasticsearch.cluster.ClusterStateUpdateTask.execute(ClusterStateUpdateTask.java:45)
	at org.elasticsearch.cluster.service.ClusterService.runTasksForExecutor(ClusterService.java:553)
	at org.elasticsearch.cluster.service.ClusterService$UpdateTask.run(ClusterService.java:857)
	at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:450)
	at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:237)
	at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:200)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
```

Related to elastic#18910.
md5 hash was being generated twice, once in aws sdk code, once in
DefaultS3OutputStream.

(cherry picked from commit elastic@9fd0d62)
@dadoonet
Copy link
Copy Markdown
Contributor Author

After talking with @tlrx, we think that we should not update the AWS SDK unless we have a major issue (which is not the case here) until we have real integration tests running.

Let's mark this one as stalled for now.

dadoonet added 2 commits July 26, 2016 10:57
Note that this issue might appear anywhere else.
We need to run real integration tests to make sure it does not appear on other AWS SDK method calls.
@dakrone
Copy link
Copy Markdown
Member

dakrone commented Sep 14, 2016

@dadoonet is this still worth keeping open with the other changes we've made in the meantime? (we've already upgrading Jackson separately) If we are not going to upgrade until we have a major issue, maybe we can close this?

@dadoonet
Copy link
Copy Markdown
Contributor Author

Works for me. I'll just keep my branch somewhere as there have been some efforts already.
I know that my branch is not working correctly though because of the Security manager issues.

@dadoonet dadoonet closed this Sep 16, 2016
@dadoonet dadoonet removed the v5.0.0 label Sep 16, 2016
@clintongormley clintongormley added :Distributed/Discovery-Plugins Anything related to our integration plugins with EC2, GCP and Azure :Distributed/Snapshot/Restore Anything directly related to the `_snapshot/*` APIs and removed :Plugin Discovery EC2 labels Feb 13, 2018
@dadoonet dadoonet deleted the pr/18910-update-aws-sdk branch April 27, 2018 05:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

:Distributed/Discovery-Plugins Anything related to our integration plugins with EC2, GCP and Azure :Distributed/Snapshot/Restore Anything directly related to the `_snapshot/*` APIs stalled >upgrade

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants