From 4c649323b29ff6206f5b22e7fcc9648f054d9b11 Mon Sep 17 00:00:00 2001 From: Chris Gillum Date: Fri, 15 Dec 2023 16:14:54 -0800 Subject: [PATCH] Fix InvalidCastException for history event type mismatch --- src/DurableTask.Core/TaskOrchestrationDispatcher.cs | 8 ++++---- src/DurableTask.Core/Tracing/TraceHelper.cs | 1 - 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/DurableTask.Core/TaskOrchestrationDispatcher.cs b/src/DurableTask.Core/TaskOrchestrationDispatcher.cs index 1b01e7c78..fc051994f 100644 --- a/src/DurableTask.Core/TaskOrchestrationDispatcher.cs +++ b/src/DurableTask.Core/TaskOrchestrationDispatcher.cs @@ -842,14 +842,14 @@ internal static bool ReconcileMessagesWithState(TaskOrchestrationWorkItem workIt } else if (historyEvent is SubOrchestrationInstanceCompletedEvent subOrchestrationInstanceCompletedEvent) { - SubOrchestrationInstanceCreatedEvent subOrchestrationCreatedEvent = (SubOrchestrationInstanceCreatedEvent)workItem.OrchestrationRuntimeState.Events.FirstOrDefault(x => x.EventId == subOrchestrationInstanceCompletedEvent.TaskScheduledId); + SubOrchestrationInstanceCreatedEvent subOrchestrationCreatedEvent = workItem.OrchestrationRuntimeState.Events.OfType().FirstOrDefault(x => x.EventId == subOrchestrationInstanceCompletedEvent.TaskScheduledId); // We immediately publish the activity span for this sub-orchestration by creating the activity and immediately calling Dispose() on it. TraceHelper.EmitTraceActivityForSubOrchestrationCompleted(workItem.OrchestrationRuntimeState.OrchestrationInstance, subOrchestrationCreatedEvent); } else if (historyEvent is SubOrchestrationInstanceFailedEvent subOrchestrationInstanceFailedEvent) { - SubOrchestrationInstanceCreatedEvent subOrchestrationCreatedEvent = (SubOrchestrationInstanceCreatedEvent)workItem.OrchestrationRuntimeState.Events.FirstOrDefault(x => x.EventId == subOrchestrationInstanceFailedEvent.TaskScheduledId); + SubOrchestrationInstanceCreatedEvent subOrchestrationCreatedEvent = workItem.OrchestrationRuntimeState.Events.OfType().FirstOrDefault(x => x.EventId == subOrchestrationInstanceFailedEvent.TaskScheduledId); // We immediately publish the activity span for this sub-orchestration by creating the activity and immediately calling Dispose() on it. TraceHelper.EmitTraceActivityForSubOrchestrationFailed(workItem.OrchestrationRuntimeState.OrchestrationInstance, subOrchestrationCreatedEvent, subOrchestrationInstanceFailedEvent, errorPropagationMode); @@ -858,12 +858,12 @@ internal static bool ReconcileMessagesWithState(TaskOrchestrationWorkItem workIt if (message.Event is TaskCompletedEvent taskCompletedEvent) { - TaskScheduledEvent taskScheduledEvent = (TaskScheduledEvent)workItem.OrchestrationRuntimeState.Events.LastOrDefault(x => x.EventId == taskCompletedEvent.TaskScheduledId); + TaskScheduledEvent taskScheduledEvent = workItem.OrchestrationRuntimeState.Events.OfType().LastOrDefault(x => x.EventId == taskCompletedEvent.TaskScheduledId); TraceHelper.EmitTraceActivityForTaskCompleted(workItem.OrchestrationRuntimeState.OrchestrationInstance, taskScheduledEvent); } else if (message.Event is TaskFailedEvent taskFailedEvent) { - TaskScheduledEvent taskScheduledEvent = (TaskScheduledEvent)workItem.OrchestrationRuntimeState.Events.LastOrDefault(x => x.EventId == taskFailedEvent.TaskScheduledId); + TaskScheduledEvent taskScheduledEvent = workItem.OrchestrationRuntimeState.Events.OfType().LastOrDefault(x => x.EventId == taskFailedEvent.TaskScheduledId); TraceHelper.EmitTraceActivityForTaskFailed(workItem.OrchestrationRuntimeState.OrchestrationInstance, taskScheduledEvent, taskFailedEvent, errorPropagationMode); } diff --git a/src/DurableTask.Core/Tracing/TraceHelper.cs b/src/DurableTask.Core/Tracing/TraceHelper.cs index 768d6bda6..143ba8af6 100644 --- a/src/DurableTask.Core/Tracing/TraceHelper.cs +++ b/src/DurableTask.Core/Tracing/TraceHelper.cs @@ -20,7 +20,6 @@ namespace DurableTask.Core.Tracing using System.Runtime.ExceptionServices; using DurableTask.Core.Common; using DurableTask.Core.History; - using DurableTask.Core.Serializing; /// /// Helper class for logging/tracing