@@ -517,7 +517,6 @@ public void testDeleteBucketWithBackgroundTasks() throws Exception {
517
517
Assert .assertEquals ("EmptyBucketStatus should not be found" , "NOT_FOUND" , statusNotBeingDeleted .getStatus ());
518
518
client .deleteBucket (new DeleteBucketRequest (bucketNameNotBeingDeleted , true ));
519
519
520
- // delete a bucket which is empty or not, the first status should always be PENDING.
521
520
client .deleteBucket (new DeleteBucketRequest (bucketName , true ));
522
521
BucketDeletionStatus status = client .getBucketDeletionStatus (bucketName );
523
522
// check the status and dates of the bucket delete task, other entries are not given.
@@ -539,7 +538,7 @@ public void testDeleteBucketWithBackgroundTasks() throws Exception {
539
538
Assert .assertEquals ("EmptyBucketInProgress" , e .getErrorCode ());
540
539
}
541
540
542
- // Empty bucket execution frequency is 1 min, so 3 min wait would be enough.
541
+ // Empty bucket execution frequency is 1 min, so 3 min wait would be enough for this test to finish .
543
542
Thread .sleep (3 * 60 * 1000 );
544
543
545
544
try {
@@ -549,7 +548,58 @@ public void testDeleteBucketWithBackgroundTasks() throws Exception {
549
548
Assert .assertEquals (404 , e .getHttpCode ());
550
549
Assert .assertEquals ("The specified bucket does not exist" , e .getMessage ());
551
550
}
551
+ Assert .assertFalse ("Failed to delete bucket" + bucketName , client .bucketExists (bucketName ));
552
+ }
553
+
554
+ @ Test
555
+ public void testDeleteBucketWithMPUWithBackgroundTasks () throws Exception {
556
+ Assume .assumeTrue ("ECS version must be at least 3.8" , ecsVersion != null && ecsVersion .compareTo ("3.8" ) >= 0 );
552
557
558
+ String bucketName = getTestBucket () + "-mpu" ;
559
+ client .createBucket (bucketName );
560
+
561
+ String key = "mpu-abort-test" ;
562
+ int partSize = 2 * 1024 * 1024 ;
563
+ byte [] data = new byte [9 * 1024 * 1024 ];
564
+ new Random ().nextBytes (data );
565
+ // init MPU
566
+ String uploadId = client .initiateMultipartUpload (bucketName , key );
567
+ // upload parts in background threads
568
+ ExecutorService service = Executors .newFixedThreadPool (5 );
569
+ List <Future > futures = new ArrayList <Future >();
570
+ int partNum = 1 ;
571
+ for (int offset = 0 ; offset < data .length ; offset += partSize ) {
572
+ int length = data .length - offset ;
573
+ if (length > partSize ) length = partSize ;
574
+ final UploadPartRequest request = new UploadPartRequest (bucketName , key , uploadId , partNum ++,
575
+ Arrays .copyOfRange (data , offset , offset + length ));
576
+ futures .add (service .submit (() -> {
577
+ client .uploadPart (request );
578
+ }));
579
+ }
580
+ // abort while threads are uploading
581
+ client .abortMultipartUpload (new AbortMultipartUploadRequest (bucketName , key , uploadId ));
582
+
583
+ // start bucket deletion tasks
584
+ client .deleteBucket (new DeleteBucketRequest (bucketName , true ));
585
+
586
+ // let MPU threads finish
587
+ futures .forEach (future -> {
588
+ try {
589
+ future .get ();
590
+ } catch (Exception ignored ) {
591
+ }
592
+ });
593
+
594
+ // Empty bucket execution frequency is 1 min, so 3 min wait would be enough for this test to finish.
595
+ Thread .sleep (3 * 60 * 1000 );
596
+ try {
597
+ client .getBucketDeletionStatus (bucketName );
598
+ Assert .fail ("GET EmptyBucketStatus when the bucket is deleted should give 404." );
599
+ } catch (S3Exception e ) {
600
+ Assert .assertEquals (404 , e .getHttpCode ());
601
+ Assert .assertEquals ("The specified bucket does not exist" , e .getMessage ());
602
+ }
553
603
Assert .assertFalse ("Failed to delete bucket" + bucketName , client .bucketExists (bucketName ));
554
604
}
555
605
@@ -577,8 +627,8 @@ public void testDeleteBucketInRetentionWithBackgroundTasks() throws Exception {
577
627
client .putObject (bucketName , "foo" , "bar" , null );
578
628
579
629
client .deleteBucket (new DeleteBucketRequest (bucketName , true ));
580
- // Empty bucket execution frequency is 1 min, so 3 min wait would be enough.
581
- Thread .sleep (3 * 60 * 1000 );
630
+ // Empty bucket execution frequency is 1 min, so 2 min wait would be enough for this test to go "FAILED" .
631
+ Thread .sleep (2 * 60 * 1000 );
582
632
583
633
BucketDeletionStatus status = client .getBucketDeletionStatus (bucketName );
584
634
// check the fields of the bucket deletion status
0 commit comments