-
Notifications
You must be signed in to change notification settings - Fork 45
Reserve __temporal prefix #410
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 3 commits
30229d1
b127715
4ecc6c5
ac0697d
5573759
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,8 @@ | ||
| { | ||
| "FormattingOptions": { | ||
| "EnableEditorConfigSupport": true | ||
| }, | ||
| "RoslynExtensionsOptions": { | ||
| "enableAnalyzersSupport": true | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -13,6 +13,11 @@ namespace Temporalio.Runtime | |
| /// </remarks> | ||
| public sealed class TemporalRuntime | ||
| { | ||
| /// <summary> | ||
| /// Prefix for reserved handler and definition names. | ||
| /// </summary> | ||
| internal const string ReservedNamePrefix = "__temporal"; | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Shouldn't it be
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. See up here: #410 (comment) Yeah, that's what's written there, but, also that just seems wrong. Probably we should change that spec. |
||
|
|
||
| private static readonly Lazy<TemporalRuntime> LazyDefault = | ||
| new(() => new TemporalRuntime(new TemporalRuntimeOptions())); | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -722,4 +722,4 @@ public override void Heartbeat(HeartbeatInput input) | |
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -424,4 +424,4 @@ internal void OnTaskCompleted(WorkflowInstance instance, Exception? failureExcep | |
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -20,6 +20,7 @@ | |
| using Temporalio.Common; | ||
| using Temporalio.Converters; | ||
| using Temporalio.Exceptions; | ||
| using Temporalio.Runtime; | ||
| using Temporalio.Worker.Interceptors; | ||
| using Temporalio.Workflows; | ||
|
|
||
|
|
@@ -939,7 +940,11 @@ private Task ApplyDoUpdateAsync(DoUpdate update) | |
| var updates = mutableUpdates.IsValueCreated ? mutableUpdates.Value : Definition.Updates; | ||
| if (!updates.TryGetValue(update.Name, out var updateDefn)) | ||
| { | ||
| updateDefn = DynamicUpdate; | ||
| // Do not fall back onto dynamic update if using the reserved prefix | ||
| if (!update.Name.StartsWith(TemporalRuntime.ReservedNamePrefix)) | ||
| { | ||
| updateDefn = DynamicUpdate; | ||
| } | ||
| if (updateDefn == null) | ||
| { | ||
| var knownUpdates = updates.Keys.OrderBy(k => k); | ||
|
|
@@ -1140,13 +1145,13 @@ private void ApplyQueryWorkflow(QueryWorkflow query) | |
| if (query.QueryType == "__stack_trace") | ||
| { | ||
| Func<string> getter = GetStackTrace; | ||
| queryDefn = WorkflowQueryDefinition.CreateWithoutAttribute( | ||
| queryDefn = WorkflowQueryDefinition.CreateWithoutAttributeReservedName( | ||
| "__stack_trace", getter); | ||
| } | ||
| else if (query.QueryType == "__temporal_workflow_metadata") | ||
| { | ||
| Func<Api.Sdk.V1.WorkflowMetadata> getter = GetWorkflowMetadata; | ||
| queryDefn = WorkflowQueryDefinition.CreateWithoutAttribute( | ||
| queryDefn = WorkflowQueryDefinition.CreateWithoutAttributeReservedName( | ||
|
||
| "__temporal_workflow_metadata", getter); | ||
| } | ||
| else | ||
|
|
@@ -1155,7 +1160,11 @@ private void ApplyQueryWorkflow(QueryWorkflow query) | |
| var queries = mutableQueries.IsValueCreated ? mutableQueries.Value : Definition.Queries; | ||
| if (!queries.TryGetValue(query.QueryType, out queryDefn)) | ||
| { | ||
| queryDefn = DynamicQuery; | ||
| // Do not fall back onto dynamic query if using the reserved prefix | ||
| if (!query.QueryType.StartsWith(TemporalRuntime.ReservedNamePrefix)) | ||
| { | ||
| queryDefn = DynamicQuery; | ||
| } | ||
| if (queryDefn == null) | ||
| { | ||
| var knownQueries = queries.Keys.OrderBy(k => k); | ||
|
|
@@ -1267,7 +1276,11 @@ private void ApplySignalWorkflow(SignalWorkflow signal) | |
| var signals = mutableSignals.IsValueCreated ? mutableSignals.Value : Definition.Signals; | ||
| if (!signals.TryGetValue(signal.SignalName, out var signalDefn)) | ||
| { | ||
| signalDefn = DynamicSignal; | ||
| // Do not fall back onto dynamic signal if using the reserved prefix | ||
| if (!signal.SignalName.StartsWith(TemporalRuntime.ReservedNamePrefix)) | ||
| { | ||
| signalDefn = DynamicSignal; | ||
| } | ||
| if (signalDefn == null) | ||
| { | ||
| // No definition found, buffer | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -1339,4 +1339,4 @@ public static class Unsafe | |
| public static bool IsReplaying => Context.IsReplaying; | ||
| } | ||
| } | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -2,6 +2,7 @@ | |||||
| using System.Collections.Concurrent; | ||||||
| using System.Reflection; | ||||||
| using System.Threading.Tasks; | ||||||
| using Temporalio.Runtime; | ||||||
|
|
||||||
| namespace Temporalio.Workflows | ||||||
| { | ||||||
|
|
@@ -10,11 +11,31 @@ namespace Temporalio.Workflows | |||||
| /// </summary> | ||||||
| public class WorkflowQueryDefinition | ||||||
| { | ||||||
| /// <summary> | ||||||
| /// All known reserved query handler prefixes. | ||||||
| /// </summary> | ||||||
| internal static readonly string[] ReservedQueryHandlerPrefixes = | ||||||
Sushisource marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||
| { | ||||||
| TemporalRuntime.ReservedNamePrefix, | ||||||
| "__stack_trace", | ||||||
| "__enhanced_stack_trace", | ||||||
| }; | ||||||
|
|
||||||
| private static readonly ConcurrentDictionary<MethodInfo, WorkflowQueryDefinition> MethodDefinitions = new(); | ||||||
| private static readonly ConcurrentDictionary<PropertyInfo, WorkflowQueryDefinition> PropertyDefinitions = new(); | ||||||
|
|
||||||
| private WorkflowQueryDefinition(string? name, string? description, MethodInfo? method, Delegate? del) | ||||||
| private WorkflowQueryDefinition(string? name, string? description, MethodInfo? method, Delegate? del, bool bypassReserved = false) | ||||||
|
||||||
| { | ||||||
| if (!bypassReserved && name != null) | ||||||
|
||||||
| if (!bypassReserved && name != null) | |
| if (!bypassReserved && name != null && ReservedQueryHandlerPrefixes.Any(p => name.StartsWith(p)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Don't save all that much if you want to keep the prefix name in the error which I do, but, changed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you remember, am a bit curious where in code this was triggered
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All over. I think it's just a matter of how the default "low" severity shows up in different lang servers. All the low severity stuff shows up in omnisharp, which can be kinda nice to auto fix some stuff sometimes, but, this one is obviously a little silly.