Details
-
Sub-task
-
Status: Open
-
Minor
-
Resolution: Unresolved
-
2.9.1, 2.8.4, 3.1.1, 3.0.3
-
None
-
None
-
Hadoop 3.0.2 / Hadoop 2.8.3
Hive 2.3.2 / Hive 2.3.3 / Hive 3.0.0
Non-AWS S3 implementation
Description
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):
if (keysToDelete.size() == MAX_ENTRIES_TO_DELETE) { DeleteObjectsRequest deleteRequest = new DeleteObjectsRequest(bucket).withKeys(keysToDelete); s3.deleteObjects(deleteRequest); statistics.incrementWriteOps(1); keysToDelete.clear(); }
This should be converted to use the DeleteObjectsResult class from the S3Client:
// Verify that the objects were deleted successfully. DeleteObjectsResult delObjRes = s3Client.deleteObjects(multiObjectDeleteRequest); int successfulDeletes = delObjRes.getDeletedObjects().size(); System.out.println(successfulDeletes + " objects successfully deleted.");
Bucket policies can be misconfigured, and deletes will fail without warning by S3A clients.