Check if the bucket exists before deleting VSP 18/128118/1
authorandre.schmid <andre.schmid@est.tech>
Mon, 28 Mar 2022 11:22:31 +0000 (12:22 +0100)
committerandre.schmid <andre.schmid@est.tech>
Mon, 28 Mar 2022 11:36:39 +0000 (12:36 +0100)
Checks if the bucket exists before deleting VSP, ignoring the deletion
if the bucket isn't present anymore.
This avoids problems in case the artifact was already deleted from the
artifact storage, but for some reason the VSP still present in the
system.

Change-Id: I7e88f227cc6786b451ca74519fa0dfe0659895c6
Issue-ID: SDC-3930
Signed-off-by: andre.schmid <andre.schmid@est.tech>
common-be/src/main/java/org/openecomp/sdc/be/csar/storage/MinIoStorageArtifactStorageManager.java
common-be/src/test/java/org/openecomp/sdc/be/csar/storage/MinIoStorageArtifactStorageManagerTest.java

index bc0792b..78ee4be 100644 (file)
@@ -92,7 +92,7 @@ public class MinIoStorageArtifactStorageManager implements ArtifactStorageManage
 
         try {
             // Make bucket if not exist.
-            final boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(vspId).build());
+            final boolean found = bucketExists(vspId);
 
             if (!found) {
                 // Make a new bucket ${vspId} .
@@ -174,6 +174,10 @@ public class MinIoStorageArtifactStorageManager implements ArtifactStorageManage
     @Override
     public void delete(final String vspId) {
         LOGGER.debug("DELETE VSP - bucket: '{}'", vspId);
+        if (!bucketExists(vspId)) {
+            LOGGER.debug("VSP '{}' bucket was not found while trying to delete it", vspId);
+            return;
+        }
         final var listObjects = minioClient.listObjects(ListObjectsArgs.builder().bucket(vspId).build());
         listObjects.forEach(itemResult -> {
             Item versionId;
@@ -193,6 +197,14 @@ public class MinIoStorageArtifactStorageManager implements ArtifactStorageManage
         }
     }
 
+    private boolean bucketExists(final String vspId) {
+        try {
+            return minioClient.bucketExists(BucketExistsArgs.builder().bucket(vspId).build());
+        } catch (final Exception e) {
+            throw new ArtifactStorageException(String.format("An unexpected error occurred while checking for vsp '%s'", vspId), e);
+        }
+    }
+
     private MinIoStorageArtifactStorageConfig readMinIoStorageArtifactStorageConfig() {
         final var commonConfigurationManager = CommonConfigurationManager.getInstance();
         final Map<String, Object> endpoint = commonConfigurationManager.getConfigValue(EXTERNAL_CSAR_STORE, ENDPOINT, null);
index 09e6284..4d12a0b 100644 (file)
@@ -27,6 +27,7 @@ import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import io.minio.BucketExistsArgs;
@@ -155,10 +156,19 @@ class MinIoStorageArtifactStorageManagerTest {
 
     @Test
     void testDeleteVspFail() throws Exception {
+        when(minioClient.bucketExists(BucketExistsArgs.builder().bucket(VSP_ID).build())).thenReturn(true);
         doThrow(new RuntimeException()).when(minioClient).removeBucket(any(RemoveBucketArgs.class));
-        assertThrows(ArtifactStorageException.class, () -> {
-            testSubject.delete(VSP_ID);
-        });
+        assertThrows(ArtifactStorageException.class, () -> testSubject.delete(VSP_ID));
+    }
+
+    @Test
+    void testDeleteVspBucketNotFound() throws Exception {
+        final BucketExistsArgs bucketExistsArgs = BucketExistsArgs.builder().bucket(VSP_ID).build();
+        //when
+        when(minioClient.bucketExists(bucketExistsArgs)).thenReturn(false);
+        testSubject.delete(VSP_ID);
+        //then
+        verify(minioClient).bucketExists(bucketExistsArgs);
     }
 
     @Test