From 340533e1db3f9f1ed9c7c18fe82519b151c7da64 Mon Sep 17 00:00:00 2001 From: Sophia Tevosyan Date: Thu, 11 Dec 2025 12:13:47 -0800 Subject: [PATCH 1/3] first commit --- .../Tracking/AzureTableTrackingStore.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DurableTask.AzureStorage/Tracking/AzureTableTrackingStore.cs b/src/DurableTask.AzureStorage/Tracking/AzureTableTrackingStore.cs index c6f63838a..58fa3bc94 100644 --- a/src/DurableTask.AzureStorage/Tracking/AzureTableTrackingStore.cs +++ b/src/DurableTask.AzureStorage/Tracking/AzureTableTrackingStore.cs @@ -816,7 +816,7 @@ public override async Task UpdateStatusForTerminationAsync( await this.CompressLargeMessageAsync(instanceEntity, listOfBlobs: null, cancellationToken: cancellationToken, addBlobPropertyName: false); Stopwatch stopwatch = Stopwatch.StartNew(); - await this.InstancesTable.MergeEntityAsync(instanceEntity, ETag.All, cancellationToken); + await this.InstancesTable.InsertOrMergeEntityAsync(instanceEntity, cancellationToken); this.settings.Logger.InstanceStatusUpdate( this.storageAccountName, From a065ce5743e44648d3852ba4aea9d48d59659195 Mon Sep 17 00:00:00 2001 From: Sophia Tevosyan Date: Thu, 11 Dec 2025 12:38:34 -0800 Subject: [PATCH 2/3] updated the fix --- .../AzureStorageOrchestrationService.cs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) 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 From 6b7fff82b22e0e34a6a369e7cbad3f03502c2c75 Mon Sep 17 00:00:00 2001 From: Sophia Tevosyan Date: Thu, 11 Dec 2025 12:40:15 -0800 Subject: [PATCH 3/3] revert old fix --- .../Tracking/AzureTableTrackingStore.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DurableTask.AzureStorage/Tracking/AzureTableTrackingStore.cs b/src/DurableTask.AzureStorage/Tracking/AzureTableTrackingStore.cs index 58fa3bc94..c6f63838a 100644 --- a/src/DurableTask.AzureStorage/Tracking/AzureTableTrackingStore.cs +++ b/src/DurableTask.AzureStorage/Tracking/AzureTableTrackingStore.cs @@ -816,7 +816,7 @@ public override async Task UpdateStatusForTerminationAsync( await this.CompressLargeMessageAsync(instanceEntity, listOfBlobs: null, cancellationToken: cancellationToken, addBlobPropertyName: false); Stopwatch stopwatch = Stopwatch.StartNew(); - await this.InstancesTable.InsertOrMergeEntityAsync(instanceEntity, cancellationToken); + await this.InstancesTable.MergeEntityAsync(instanceEntity, ETag.All, cancellationToken); this.settings.Logger.InstanceStatusUpdate( this.storageAccountName,