From 54e24727073e4e6d7d647fe48e91817c511213fc Mon Sep 17 00:00:00 2001 From: Konstantin Lepeshenkov <5447190+scale-tone@users.noreply.github.com> Date: Thu, 24 Jul 2025 16:22:43 +0000 Subject: [PATCH] Added DfMonDisableNewParentIdResolutionAlgorithm --- .../Common/DetailedOrchestrationStatus.cs | 8 ++++++++ durablefunctionsmonitor.dotnetbackend/Common/Globals.cs | 4 ++++ .../Common/DetailedOrchestrationStatus.cs | 8 ++++++++ .../Common/Globals.cs | 3 +++ 4 files changed, 23 insertions(+) diff --git a/durablefunctionsmonitor.dotnetbackend/Common/DetailedOrchestrationStatus.cs b/durablefunctionsmonitor.dotnetbackend/Common/DetailedOrchestrationStatus.cs index 7306d71..e71f753 100644 --- a/durablefunctionsmonitor.dotnetbackend/Common/DetailedOrchestrationStatus.cs +++ b/durablefunctionsmonitor.dotnetbackend/Common/DetailedOrchestrationStatus.cs @@ -106,6 +106,14 @@ internal static async Task GetParentInstanceIdDirectlyFromTable(IDurable { // Trying history table instead (new format) // Need to narrow the scan operation by timestamp (because history tables grow large) + // Also need to put it under a feature switch, as it still might be a performance issue + + string featureFlags = Environment.GetEnvironmentVariable(EnvVariableNames.AzureWebJobsFeatureFlags); + bool isDisabled = featureFlags.Contains(Globals.DfMonDisableNewParentIdResolutionAlgorithm); + if (isDisabled) + { + return null; + } var instanceEntity = (await tableClient.ExecuteAsync($"{durableClient.TaskHubName}Instances", TableOperation.Retrieve(instanceId, string.Empty))) .Result as DynamicTableEntity; diff --git a/durablefunctionsmonitor.dotnetbackend/Common/Globals.cs b/durablefunctionsmonitor.dotnetbackend/Common/Globals.cs index f20b43b..c8902c8 100644 --- a/durablefunctionsmonitor.dotnetbackend/Common/Globals.cs +++ b/durablefunctionsmonitor.dotnetbackend/Common/Globals.cs @@ -25,6 +25,7 @@ namespace DurableFunctionsMonitor.DotNetBackend static class EnvVariableNames { public const string AzureWebJobsStorage = "AzureWebJobsStorage"; + public const string AzureWebJobsFeatureFlags = "AzureWebJobsFeatureFlags"; public const string WEBSITE_SITE_NAME = "WEBSITE_SITE_NAME"; public const string WEBSITE_AUTH_V2_CONFIG_JSON = "WEBSITE_AUTH_V2_CONFIG_JSON"; public const string WEBSITE_AUTH_CLIENT_ID = "WEBSITE_AUTH_CLIENT_ID"; @@ -67,6 +68,9 @@ static class Globals public const string IdentityBasedConnectionSettingClientIdSuffix = "__clientId"; public const string IdentityBasedConnectionSettingCredentialValue = "managedidentity"; + public const string DfMonDisableNewParentIdResolutionAlgorithm = "DfMonDisableNewParentIdResolutionAlgorithm"; + + public static void SplitConnNameAndHubName(string connAndHubName, out string connName, out string hubName) { int pos = connAndHubName.LastIndexOf("-"); diff --git a/durablefunctionsmonitor.dotnetisolated.core/Common/DetailedOrchestrationStatus.cs b/durablefunctionsmonitor.dotnetisolated.core/Common/DetailedOrchestrationStatus.cs index a058793..28d54fe 100644 --- a/durablefunctionsmonitor.dotnetisolated.core/Common/DetailedOrchestrationStatus.cs +++ b/durablefunctionsmonitor.dotnetisolated.core/Common/DetailedOrchestrationStatus.cs @@ -105,6 +105,14 @@ internal static async Task GetParentInstanceIdDirectlyFromTable(DurableT { // Trying history table instead (new format) // Need to narrow the scan operation by timestamp (because history tables grow large) + // Also need to put it under a feature switch, as it still might be a performance issue + + string featureFlags = Environment.GetEnvironmentVariable(EnvVariableNames.AzureWebJobsFeatureFlags); + bool isDisabled = featureFlags.Contains(Globals.DfMonDisableNewParentIdResolutionAlgorithm); + if (isDisabled) + { + return null; + } var instanceEntity = (await tableClient.ExecuteAsync($"{durableClient.Name}Instances", TableOperation.Retrieve(instanceId, string.Empty))) .Result as DynamicTableEntity; diff --git a/durablefunctionsmonitor.dotnetisolated.core/Common/Globals.cs b/durablefunctionsmonitor.dotnetisolated.core/Common/Globals.cs index 85c2517..bde5ce8 100644 --- a/durablefunctionsmonitor.dotnetisolated.core/Common/Globals.cs +++ b/durablefunctionsmonitor.dotnetisolated.core/Common/Globals.cs @@ -20,6 +20,7 @@ namespace DurableFunctionsMonitor.DotNetIsolated static class EnvVariableNames { public const string AzureWebJobsStorage = "AzureWebJobsStorage"; + public const string AzureWebJobsFeatureFlags = "AzureWebJobsFeatureFlags"; public const string WEBSITE_SITE_NAME = "WEBSITE_SITE_NAME"; public const string WEBSITE_AUTH_V2_CONFIG_JSON = "WEBSITE_AUTH_V2_CONFIG_JSON"; public const string WEBSITE_AUTH_CLIENT_ID = "WEBSITE_AUTH_CLIENT_ID"; @@ -66,6 +67,8 @@ static class Globals public const string DfmModeContextValue = "DfmModeContextValue"; + public const string DfMonDisableNewParentIdResolutionAlgorithm = "DfMonDisableNewParentIdResolutionAlgorithm"; + /// /// Provides support for dedicated Storage accounts (different from AzureWebJobsStorage) ///