Skip to content

Commit 185a6ef

Browse files
authored
Merge pull request #789 from Project-MONAI/samrooke/fix-file-deletion-from-storage
fix file deletion from storage
2 parents ec289c4 + 82d6bd2 commit 185a6ef

File tree

3 files changed

+18
-8
lines changed

3 files changed

+18
-8
lines changed

src/WorkflowManager/Common/Services/PayloadService.cs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public PayloadService(
8686
CallingAeTitle = eventPayload.CallingAeTitle,
8787
Timestamp = eventPayload.Timestamp,
8888
PatientDetails = patientDetails,
89-
PayloadDeleted = PayloadDeleted.No,
89+
PayloadDeleted = PayloadDeleted.No
9090
};
9191

9292
if (await _payloadRepository.CreateAsync(payload))
@@ -173,12 +173,12 @@ public async Task<bool> DeletePayloadFromStorageAsync(string payloadId)
173173
throw new MonaiNotFoundException($"Payload with ID: {payloadId} not found");
174174
}
175175

176-
if (payload.PayloadDeleted == PayloadDeleted.InProgress)
176+
if (payload.PayloadDeleted == PayloadDeleted.InProgress || payload.PayloadDeleted == PayloadDeleted.Yes)
177177
{
178-
throw new MonaiBadRequestException($"Deletion of files for payload ID: {payloadId} already in progress");
178+
throw new MonaiBadRequestException($"Deletion of files for payload ID: {payloadId} already in progress or already deleted");
179179
}
180180

181-
// update the payload to in progress before we request deletion form MinIO
181+
// update the payload to in progress before we request deletion from storage
182182
payload.PayloadDeleted = PayloadDeleted.InProgress;
183183
await _payloadRepository.UpdateAsync(payload);
184184

@@ -188,12 +188,19 @@ public async Task<bool> DeletePayloadFromStorageAsync(string payloadId)
188188
{
189189
try
190190
{
191-
await _storageService.RemoveObjectsAsync(payload.Bucket, payload.Files.Select(f => f.Path));
191+
// get all objects for the payload in storage to be deleted
192+
var allPayloadObjects = await _storageService.ListObjectsAsync(payload.Bucket, payloadId, true);
193+
194+
if (allPayloadObjects.Any())
195+
{
196+
await _storageService.RemoveObjectsAsync(payload.Bucket, allPayloadObjects.Select(o => o.FilePath));
197+
}
198+
192199
payload.PayloadDeleted = PayloadDeleted.Yes;
193200
}
194-
catch
201+
catch (Exception ex)
195202
{
196-
_logger.PayloadUpdateFailed(payloadId);
203+
_logger.PayloadDeleteFailed(payloadId, ex);
197204
payload.PayloadDeleted = PayloadDeleted.Failed;
198205
}
199206
finally

src/WorkflowManager/Logging/Log.300000.Payload.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,8 @@ public static partial class Log
3737

3838
[LoggerMessage(EventId = 300005, Level = LogLevel.Error, Message = "Failed to update payload {payloadId} due to database error.")]
3939
public static partial void PayloadUpdateFailed(this ILogger logger, string payloadId);
40+
41+
[LoggerMessage(EventId = 300006, Level = LogLevel.Error, Message = "Failed to delete payload {payloadId} from storage.")]
42+
public static partial void PayloadDeleteFailed(this ILogger logger, string payloadId, Exception ex);
4043
}
4144
}

tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Features/PayloadApi.feature

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ Scenario Outline: Delete payload by ID returns 400 when PayloadDeleted is alread
145145
And I have a payload saved in mongo Payload_PayloadDeleted_InProgress
146146
When I send a DELETE request
147147
Then I will get a 400 response
148-
And I will receive the error message Deletion of files for payload ID: c5c3635b-81dd-44a9-8c3b-71adec7d47c6 already in progress
148+
And I will receive the error message Deletion of files for payload ID: c5c3635b-81dd-44a9-8c3b-71adec7d47c6 already in progress or already deleted
149149

150150
@DeletePayloadById
151151
Scenario Outline: Delete payload by ID returns 202

0 commit comments

Comments
 (0)