From c34d128e29564f318e876ef3438775aec137cc7a Mon Sep 17 00:00:00 2001 From: sebastianburckhardt Date: Thu, 21 Sep 2023 13:11:04 -0700 Subject: [PATCH 1/2] revise how entity messages are serialized when sent by orchestrators. --- .../Entities/EntityMessageEvent.cs | 15 ++------------- src/DurableTask.Core/TaskOrchestrationContext.cs | 12 +++++++++++- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/DurableTask.Core/Entities/EntityMessageEvent.cs b/src/DurableTask.Core/Entities/EntityMessageEvent.cs index 924d5c7fd..cd728e5bc 100644 --- a/src/DurableTask.Core/Entities/EntityMessageEvent.cs +++ b/src/DurableTask.Core/Entities/EntityMessageEvent.cs @@ -14,7 +14,6 @@ using System; using DurableTask.Core.Entities.EventFormat; using Newtonsoft.Json; -using Newtonsoft.Json.Linq; namespace DurableTask.Core.Entities { @@ -50,21 +49,11 @@ public override string ToString() /// public OrchestrationInstance TargetInstance => this.target; - /// - /// Returns the content of this event, as an object that can be serialized later. - /// - /// - public object ContentAsObject() - { - // we pre-serialize this now to avoid interference from the application-defined serialization settings - return JObject.FromObject(message, Serializer.InternalSerializer); - } - /// /// Returns the content of this event, as a serialized string. /// /// - public string ContentAsString() + public string AsSerializedString() { return JsonConvert.SerializeObject(message, Serializer.InternalSerializerSettings); } @@ -78,7 +67,7 @@ public TaskMessage AsTaskMessage() return new TaskMessage { OrchestrationInstance = this.target, - Event = new History.EventRaisedEvent(-1, this.ContentAsString()) + Event = new History.EventRaisedEvent(-1, this.AsSerializedString()) { Name = this.eventName } diff --git a/src/DurableTask.Core/TaskOrchestrationContext.cs b/src/DurableTask.Core/TaskOrchestrationContext.cs index a616d3e4a..8e75ae56f 100644 --- a/src/DurableTask.Core/TaskOrchestrationContext.cs +++ b/src/DurableTask.Core/TaskOrchestrationContext.cs @@ -199,7 +199,17 @@ public override void SendEvent(OrchestrationInstance orchestrationInstance, stri } int id = this.idCounter++; - string serializedEventData = this.MessageDataConverter.Serialize(eventData); + + string serializedEventData; + if (eventData is EntityMessageEvent entityMessageEvent) + { + serializedEventData = entityMessageEvent.AsSerializedString(); // bypass application-defined serializer + } + else + { + serializedEventData = this.MessageDataConverter.Serialize(eventData); + } + var action = new SendEventOrchestratorAction { From 9eb590d56a5011ab7829b3228b0ec1c746c96aac Mon Sep 17 00:00:00 2001 From: sebastianburckhardt Date: Fri, 6 Oct 2023 10:22:56 -0700 Subject: [PATCH 2/2] address PR feedback (use RawInput) --- src/DurableTask.Core/Entities/EntityMessageEvent.cs | 12 ++++++++++++ src/DurableTask.Core/TaskOrchestrationContext.cs | 11 +---------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/DurableTask.Core/Entities/EntityMessageEvent.cs b/src/DurableTask.Core/Entities/EntityMessageEvent.cs index cd728e5bc..4faf66512 100644 --- a/src/DurableTask.Core/Entities/EntityMessageEvent.cs +++ b/src/DurableTask.Core/Entities/EntityMessageEvent.cs @@ -13,6 +13,7 @@ #nullable enable using System; using DurableTask.Core.Entities.EventFormat; +using DurableTask.Core.Serializing.Internal; using Newtonsoft.Json; namespace DurableTask.Core.Entities @@ -74,6 +75,17 @@ public TaskMessage AsTaskMessage() }; } +#pragma warning disable CS0618 // Type or member is obsolete. Intentional internal usage. + /// + /// Returns the content as an already-serialized string. Can be used to bypass the application-defined serializer. + /// + /// + public RawInput AsRawInput() + { + return new RawInput(this.AsSerializedString()); + } +#pragma warning restore CS0618 // Type or member is obsolete + /// /// Utility function to compute a capped scheduled time, given a scheduled time, a timestamp representing the current time, and the maximum delay. /// diff --git a/src/DurableTask.Core/TaskOrchestrationContext.cs b/src/DurableTask.Core/TaskOrchestrationContext.cs index e3c7b5683..77589ed27 100644 --- a/src/DurableTask.Core/TaskOrchestrationContext.cs +++ b/src/DurableTask.Core/TaskOrchestrationContext.cs @@ -200,16 +200,7 @@ public override void SendEvent(OrchestrationInstance orchestrationInstance, stri int id = this.idCounter++; - string serializedEventData; - if (eventData is EntityMessageEvent entityMessageEvent) - { - serializedEventData = entityMessageEvent.AsSerializedString(); // bypass application-defined serializer - } - else - { - serializedEventData = this.MessageDataConverter.SerializeInternal(eventData); - } - + string serializedEventData = this.MessageDataConverter.SerializeInternal(eventData); var action = new SendEventOrchestratorAction {