[ 
https://issues.apache.org/jira/browse/JCLOUDS-1042?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15032579#comment-15032579
 ] 

Igor Alekseev commented on JCLOUDS-1042:
----------------------------------------

Here's the full stack...
! at 
org.jclouds.aws.handlers.ParseAWSErrorFromXmlContent.handleError(ParseAWSErrorFromXmlContent.java:75)
 ~[sts-1.9.1.jar:1.9.1]
! ... 33 common frames omitted
! Causing: org.jclouds.rest.AuthorizationException: Access Denied
! at 
org.jclouds.aws.handlers.ParseAWSErrorFromXmlContent.refineException(ParseAWSErrorFromXmlContent.java:122)
 ~[sts-1.9.1.jar:1.9.1]
! at 
org.jclouds.s3.handlers.ParseS3ErrorFromXmlContent.refineException(ParseS3ErrorFromXmlContent.java:97)
 ~[s3-1.9.1.jar:1.9.1]
! at 
org.jclouds.aws.handlers.ParseAWSErrorFromXmlContent.handleError(ParseAWSErrorFromXmlContent.java:89)
 ~[sts-1.9.1.jar:1.9.1]
! at 
org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:65)
 ~[jclouds-core-1.9.1.jar:1.9.1]
! at 
org.jclouds.http.internal.BaseHttpCommandExecutorService.shouldContinue(BaseHttpCommandExecutorService.java:136)
 ~[jclouds-core-1.9.1.jar:1.9.1]
! at 
org.jclouds.http.internal.BaseHttpCommandExecutorService.invoke(BaseHttpCommandExecutorService.java:105)
 ~[jclouds-core-1.9.1.jar:1.9.1]
! at 
org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:90) 
~[jclouds-core-1.9.1.jar:1.9.1]
! at org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:73) 
~[jclouds-core-1.9.1.jar:1.9.1]
! at org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:44) 
~[jclouds-core-1.9.1.jar:1.9.1]
! at 
org.jclouds.rest.internal.DelegatesToInvocationFunction.handle(DelegatesToInvocationFunction.java:156)
 ~[jclouds-core-1.9.1.jar:1.9.1]
! at 
org.jclouds.rest.internal.DelegatesToInvocationFunction.invoke(DelegatesToInvocationFunction.java:123)
 ~[jclouds-core-1.9.1.jar:1.9.1]
! at com.sun.proxy.$Proxy75.getBucketACL(Unknown Source) ~[na:na]
! at 
org.jclouds.s3.blobstore.internal.BackoffOnNotFoundWhenGetBucketACL.load(BackoffOnNotFoundWhenGetBucketACL.java:46)
 ~[s3-1.9.1.jar:1.9.1]
! at 
org.jclouds.s3.blobstore.internal.BackoffOnNotFoundWhenGetBucketACL.load(BackoffOnNotFoundWhenGetBucketACL.java:31)
 ~[s3-1.9.1.jar:1.9.1]
! at 
com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527)
 ~[guava-18.0.jar:na]
! at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2319) 
~[guava-18.0.jar:na]
! at 
com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2282)
 ~[guava-18.0.jar:na]
! at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197) 
~[guava-18.0.jar:na]

! ... 18 common frames omitted
! Causing: com.google.common.util.concurrent.UncheckedExecutionException: 
org.jclouds.rest.AuthorizationException: Access Denied
! at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2203) 
~[guava-18.0.jar:na]
! at com.google.common.cache.LocalCache.get(LocalCache.java:3937) 
~[guava-18.0.jar:na]
! at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941) 
~[guava-18.0.jar:na]
! at 
com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824) 
~[guava-18.0.jar:na]
! at 
com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4830)
 ~[guava-18.0.jar:na]
! at org.jclouds.s3.blobstore.S3BlobStore.putBlob(S3BlobStore.java:272) 
~[s3-1.9.1.jar:1.9.1]
! at 
org.jclouds.aws.s3.blobstore.AWSS3BlobStore.putBlob(AWSS3BlobStore.java:94) 
~[aws-s3-1.9.1.jar:1.9.1]
! at org.jclouds.s3.blobstore.S3BlobStore.putBlob(S3BlobStore.java:251) 
~[s3-1.9.1.jar:1.9.1]

> S3BlobStore.putBlob() makes a call to get ACL which maybe blocked by S3 
> policy, resulting in failure of the operation.
> ----------------------------------------------------------------------------------------------------------------------
>
>                 Key: JCLOUDS-1042
>                 URL: https://issues.apache.org/jira/browse/JCLOUDS-1042
>             Project: jclouds
>          Issue Type: Bug
>    Affects Versions: 1.9.1
>            Reporter: Igor Alekseev
>             Fix For: 1.9.1
>
>
> A user may be prevented by S3 bucket policy from getting ACL, but can still 
> have rights to do put/get/delete.  Currently the code below fails to do put 
> when there's an exception getting ACL.
> public String putBlob(String container, Blob blob, PutOptions overrides) {
>       if (overrides.isMultipart()) {
>          // need to use a provider if the strategy object is stateful
>          return multipartUploadStrategy.get().execute(container, blob);
>       }
>       // TODO: Make use of options overrides
>       PutObjectOptions options = new PutObjectOptions();
>       try {
>          AccessControlList acl = bucketAcls.getUnchecked(container);
>          if (acl != null && acl.hasPermission(GroupGranteeURI.ALL_USERS, 
> Permission.READ))
>             options.withAcl(CannedAccessPolicy.PUBLIC_READ);
>       } catch (CacheLoader.InvalidCacheLoadException e) {
>          // nulls not permitted from cache loader
>       }
>       return sync.putObject(container, blob2Object.apply(blob), options);
>    }



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to