From ce3e149a95914457f37d7eadd3f407f99a6569b5 Mon Sep 17 00:00:00 2001 From: LSmyrnaios Date: Mon, 11 Mar 2024 13:34:38 +0200 Subject: [PATCH] Improve the "emptying/deleting" process of the S3-bucket. --- .../urls_controller/util/S3ObjectStore.java | 41 ++++++++++++++----- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/src/main/java/eu/openaire/urls_controller/util/S3ObjectStore.java b/src/main/java/eu/openaire/urls_controller/util/S3ObjectStore.java index 5ba80aa..1326074 100644 --- a/src/main/java/eu/openaire/urls_controller/util/S3ObjectStore.java +++ b/src/main/java/eu/openaire/urls_controller/util/S3ObjectStore.java @@ -117,30 +117,51 @@ public class S3ObjectStore { } - public void emptyBucket(String bucketName, boolean shouldDeleteBucket) throws Exception { + public void emptyBucket(String bucketName, boolean shouldDeleteBucket) + { logger.warn("Going to " + (shouldDeleteBucket ? "delete" : "empty") + " bucket \"" + bucketName + "\"!"); // First list the objects of the bucket. Iterable> results = minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).build()); + int countDeletedFiles = 0; + int countFilesNotDeleted = 0; + long totalSize = 0; + Item item; + // Then, delete the objects. for ( Result resultItem : results ) { try { - if ( !deleteFile(resultItem.get().objectName(), bucketName) ) { - logger.error("Cannot proceed with bucket deletion, since only an empty bucket can be removed!"); - return; - } + item = resultItem.get(); } catch (Exception e) { - logger.warn("Could not remove " + resultItem.get().objectName()); + logger.error("Could not get the item-object of one of the S3-Objects returned from the bucket!", e); + countFilesNotDeleted ++; + continue; } + totalSize += item.size(); + + if ( !deleteFile(item.objectName(), bucketName) ) { // The reason and for what object, is already logged. + logger.error("Cannot proceed with bucket deletion, since only an empty bucket can be removed!"); + countFilesNotDeleted ++; + } else + countDeletedFiles ++; } if ( shouldDeleteBucket ) { - // Lastly, delete the empty bucket. - minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build()); - } + if ( countFilesNotDeleted == 0 ) { + // Lastly, delete the empty bucket. We need to do this last, as in case it's not empty, we get an error! + try { + minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build()); + logger.info("Bucket \"" + bucketName + "\" was deleted!"); + } catch (Exception e) { + logger.error("Bucket \"" + bucketName + "\" could not be deleted!", e); + } + } else + logger.error("Cannot execute the \"removeBucket\" command for bucket \"" + bucketName + "\", as " + countFilesNotDeleted + " files failed to be deleted!"); + } else + logger.info("Bucket \"" + bucketName + "\" was emptied!"); - logger.info("Bucket " + bucketName + " was " + (shouldDeleteBucket ? "deleted!" : "emptied!")); + logger.info(countDeletedFiles + " files were deleted, amounting to " + ((totalSize/1024)/1024) + " MB."); }