Skip to content

Commit c16483a

Browse files
authored
Merge pull request #795 from Project-MONAI/release/0.1.16
Release 0.1.16
2 parents 066d3ea + 21709f6 commit c16483a

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

src/WorkflowManager/Common/Services/PayloadService.cs

+7
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,13 @@ public async Task<bool> DeletePayloadFromStorageAsync(string payloadId)
178178
throw new MonaiBadRequestException($"Deletion of files for payload ID: {payloadId} already in progress or already deleted");
179179
}
180180

181+
var workflowInstances = await _workflowInstanceRepository.GetByPayloadIdsAsync(new List<string> { payloadId });
182+
183+
if (workflowInstances.Any(wf => wf.Status == Status.Created))
184+
{
185+
throw new MonaiBadRequestException($"Workflows related to payload ID: {payloadId} are currently in progress, deletion cannot be complete.");
186+
}
187+
181188
// update the payload to in progress before we request deletion from storage
182189
payload.PayloadDeleted = PayloadDeleted.InProgress;
183190
await _payloadRepository.UpdateAsync(payload);

tests/UnitTests/Common.Tests/Services/PayloadServiceTests.cs

+20-1
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,7 @@ public async Task DeletePayloadFromStorageAsync_ReturnsTrue()
330330

331331
_payloadRepository.Setup(p => p.GetByIdAsync(It.IsAny<string>())).ReturnsAsync(() => new Payload());
332332
_payloadRepository.Setup(p => p.UpdateAsync(It.IsAny<Payload>())).ReturnsAsync(() => true);
333+
_workflowInstanceRepository.Setup(r => r.GetByPayloadIdsAsync(It.IsAny<List<string>>())).ReturnsAsync(() => new List<WorkflowInstance>());
333334

334335
_storageService.Setup(s => s.RemoveObjectsAsync(It.IsAny<string>(), It.IsAny<IEnumerable<string>>(), default));
335336

@@ -351,7 +352,7 @@ public async Task DeletePayloadFromStorageAsync_ThrowsMonaiNotFoundException()
351352
}
352353

353354
[Fact]
354-
public async Task DeletePayloadFromStorageAsync_ThrowsMonaiBadRequestException()
355+
public async Task DeletePayloadFromStorageAsync_ThrowsMonaiBadRequestExceptionWhenDeletionAlreadyInProgress()
355356
{
356357
var payloadId = Guid.NewGuid().ToString();
357358

@@ -362,5 +363,23 @@ public async Task DeletePayloadFromStorageAsync_ThrowsMonaiBadRequestException()
362363

363364
await Assert.ThrowsAsync<MonaiBadRequestException>(async () => await PayloadService.DeletePayloadFromStorageAsync(payloadId));
364365
}
366+
367+
[Fact]
368+
public async Task DeletePayloadFromStorageAsync_ThrowsMonaiBadRequestExceptionWhenWorkflowInstancesInProgress()
369+
{
370+
var payloadId = Guid.NewGuid().ToString();
371+
372+
_payloadRepository.Setup(p => p.GetByIdAsync(It.IsAny<string>())).ReturnsAsync(() => new Payload());
373+
_payloadRepository.Setup(p => p.UpdateAsync(It.IsAny<Payload>())).ReturnsAsync(() => true);
374+
_workflowInstanceRepository.Setup(r => r.GetByPayloadIdsAsync(It.IsAny<List<string>>())).ReturnsAsync(() => new List<WorkflowInstance>
375+
{
376+
new WorkflowInstance
377+
{
378+
Status = Status.Created,
379+
}
380+
});
381+
382+
await Assert.ThrowsAsync<MonaiBadRequestException>(async () => await PayloadService.DeletePayloadFromStorageAsync(payloadId));
383+
}
365384
}
366385
}

0 commit comments

Comments
 (0)