You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-issues@hadoop.apache.org by "Steve Loughran (JIRA)" <ji...@apache.org> on 2018/07/24 18:15:00 UTC

[jira] [Comment Edited] (HADOOP-15628) S3A Filesystem does not check return from AmazonS3Client deleteObjects

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

Steve Loughran edited comment on HADOOP-15628 at 7/24/18 6:14 PM:
------------------------------------------------------------------

ps: that's not the current delete code. [This is|https://github.com/apache/hadoop/blob/trunk/hadoop-tools/hadoop-aws/src/main/java/org/apache/hadoop/fs/s3a/S3AFileSystem.java#L1401]. It's critical to have a look at the latest stuff to see if the problem still exists there, as if it doesn't, it just gets closed as WORKSFORME. As noted, I don't think it is perfect, but since we're only going to be tuning the 3.1+ line, you aren't ever going to see the fix in 2.8. and as noted, 2.9 should have the core fix; I'm just worrying about s3guard

That said: if you can replicate the situation where deleteObjects does a partial delete without raising an exception, that is a sign that the AWS SDK doesn't do what the javadocs say, so it's something we may need to worry about (although as we are on a much newer version of that SDK, again, it may be fixed). So: please try to replicate on the latest version, attempting it on the command line should be enough to try and trigger it. thanks


was (Author: stevel@apache.org):
ps: that's not the current delete code. [This is}https://github.com/apache/hadoop/blob/trunk/hadoop-tools/hadoop-aws/src/main/java/org/apache/hadoop/fs/s3a/S3AFileSystem.java#L1401]. It's critical to have a look at the latest stuff to see if the problem still exists there, as if it doesn't, it just gets closed as WORKSFORME. As noted, I don't think it is perfect, but since we're only going to be tuning the 3.1+ line, you aren't ever going to see the fix in 2.8. and as noted, 2.9 should have the core fix; I'm just worrying about s3guard

That said: if you can replicate the situation where deleteObjects does a partial delete without raising an exception, that is a sign that the AWS SDK doesn't do what the javadocs say, so it's something we may need to worry about (although as we are on a much newer version of that SDK, again, it may be fixed). So: please try to replicate on the latest version, attempting it on the command line should be enough to try and trigger it. thanks

> S3A Filesystem does not check return from AmazonS3Client deleteObjects
> ----------------------------------------------------------------------
>
>                 Key: HADOOP-15628
>                 URL: https://issues.apache.org/jira/browse/HADOOP-15628
>             Project: Hadoop Common
>          Issue Type: Bug
>          Components: fs/s3
>    Affects Versions: 2.9.1, 2.8.4, 3.1.1, 3.0.3
>         Environment: Hadoop 3.0.2 / Hadoop 2.8.3
> Hive 2.3.2 / Hive 2.3.3 / Hive 3.0.0
>            Reporter: Steve Jacobs
>            Priority: Minor
>
> Deletes in S3A that use the Multi-Delete functionality in the Amazon S3 api do not check to see if all objects have been succesfully delete. In the event of a failure, the api will still return a 200 OK (which isn't checked currently):
> [Delete Code from Hadoop 2.8|https://github.com/apache/hadoop/blob/a0da1ec01051108b77f86799dd5e97563b2a3962/hadoop-tools/hadoop-aws/src/main/java/org/apache/hadoop/fs/s3a/S3AFileSystem.java#L574] 
> {code:java}
> if (keysToDelete.size() == MAX_ENTRIES_TO_DELETE) {
> DeleteObjectsRequest deleteRequest =
> new DeleteObjectsRequest(bucket).withKeys(keysToDelete);
> s3.deleteObjects(deleteRequest);
> statistics.incrementWriteOps(1);
> keysToDelete.clear();
> }
> {code}
> This should be converted to use the DeleteObjectsResult class from the S3Client: 
> [Amazon Code Example|https://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingMultipleObjectsUsingJava.htm]
> {code:java}
> // Verify that the objects were deleted successfully.
> DeleteObjectsResult delObjRes = s3Client.deleteObjects(multiObjectDeleteRequest); int successfulDeletes = delObjRes.getDeletedObjects().size();
> System.out.println(successfulDeletes + " objects successfully deleted.");
> {code}
> Bucket policies can be misconfigured, and deletes will fail without warning by S3A clients.
>  
>  
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: common-issues-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-issues-help@hadoop.apache.org