diff --git a/src/DurableTask.AzureStorage/AzureStorageOrchestrationService.cs b/src/DurableTask.AzureStorage/AzureStorageOrchestrationService.cs index 22e0e80da..832a6a603 100644 --- a/src/DurableTask.AzureStorage/AzureStorageOrchestrationService.cs +++ b/src/DurableTask.AzureStorage/AzureStorageOrchestrationService.cs @@ -1073,11 +1073,16 @@ async Task IsExecutableInstanceAsync( TaskMessage executionTerminatedEventMessage = newMessages.LastOrDefault(msg => msg.Event is ExecutionTerminatedEvent); if (executionTerminatedEventMessage is not null) { - var executionTerminatedEvent = (ExecutionTerminatedEvent)executionTerminatedEventMessage.Event; - await this.trackingStore.UpdateStatusForTerminationAsync( - instanceId, - executionTerminatedEvent); - return $"Instance is {OrchestrationStatus.Terminated}"; + InstanceStatus instanceStatus = await this.trackingStore.FetchInstanceStatusAsync(executionTerminatedEventMessage.OrchestrationInstance.InstanceId); + if (instanceStatus != null + && instanceStatus.State.OrchestrationInstance.ExecutionId == executionTerminatedEventMessage.OrchestrationInstance.ExecutionId) + { + var executionTerminatedEvent = (ExecutionTerminatedEvent)executionTerminatedEventMessage.Event; + await this.trackingStore.UpdateStatusForTerminationAsync( + instanceId, + executionTerminatedEvent); + return $"Instance is {OrchestrationStatus.Terminated}"; + } } // A non-zero event count usually happens when an instance's history is overwritten by a