From 75d639abf8b0a17147fc3932f87606837bdfbece Mon Sep 17 00:00:00 2001 From: "naiyuantian@microsoft.com" Date: Sun, 6 Apr 2025 14:42:34 -0700 Subject: [PATCH 1/2] initial commit --- src/DurableTask.AzureStorage/OrchestrationSessionManager.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/DurableTask.AzureStorage/OrchestrationSessionManager.cs b/src/DurableTask.AzureStorage/OrchestrationSessionManager.cs index 04b8b19dd..8d30e8d0f 100644 --- a/src/DurableTask.AzureStorage/OrchestrationSessionManager.cs +++ b/src/DurableTask.AzureStorage/OrchestrationSessionManager.cs @@ -116,7 +116,8 @@ public bool IsControlQueueReceivingMessages(string partitionId) public bool IsControlQueueProcessingMessages(string partitionId) { - return this.activeOrchestrationSessions.Values.Where(session => string.Equals(session.ControlQueue.Name, partitionId)).Any(); + var sessionsSnapshot = this.activeOrchestrationSessions.Values.ToList(); + return sessionsSnapshot.Any(session => string.Equals(session.ControlQueue.Name, partitionId)); } async Task DequeueLoop(string partitionId, ControlQueue controlQueue, CancellationToken cancellationToken) From f0a23745d2e2607464b73d3385da1589e844f813 Mon Sep 17 00:00:00 2001 From: "naiyuantian@microsoft.com" Date: Mon, 7 Apr 2025 14:12:06 -0700 Subject: [PATCH 2/2] update by comment --- src/DurableTask.AzureStorage/OrchestrationSessionManager.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/DurableTask.AzureStorage/OrchestrationSessionManager.cs b/src/DurableTask.AzureStorage/OrchestrationSessionManager.cs index 8d30e8d0f..51a6e07ba 100644 --- a/src/DurableTask.AzureStorage/OrchestrationSessionManager.cs +++ b/src/DurableTask.AzureStorage/OrchestrationSessionManager.cs @@ -116,8 +116,10 @@ public bool IsControlQueueReceivingMessages(string partitionId) public bool IsControlQueueProcessingMessages(string partitionId) { - var sessionsSnapshot = this.activeOrchestrationSessions.Values.ToList(); - return sessionsSnapshot.Any(session => string.Equals(session.ControlQueue.Name, partitionId)); + lock (this.messageAndSessionLock) + { + return this.activeOrchestrationSessions.Values.Where(session => string.Equals(session.ControlQueue.Name, partitionId)).Any(); + } } async Task DequeueLoop(string partitionId, ControlQueue controlQueue, CancellationToken cancellationToken)