Skip to content

Commit 1e69535

Browse files
committed
Add tests, update filter construction
Signed-off-by: Hal Spang <halspang@microsoft.com>
1 parent 86f5b72 commit 1e69535

File tree

5 files changed

+299
-62
lines changed

5 files changed

+299
-62
lines changed

src/Worker/Core/DependencyInjection/DurableTaskWorkerBuilderExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,12 +154,12 @@ public static IDurableTaskWorkerBuilder UseWorkItemFilters(this IDurableTaskWork
154154
}
155155
else
156156
{
157-
// Auto-generate the filters from registered orchestrations, activities, and entitites.
157+
// Auto-generate the filters from registered orchestrations, activities, and entities.
158158
builder.Services.AddSingleton(provider =>
159159
{
160160
DurableTaskRegistry registry = provider.GetRequiredService<IOptionsMonitor<DurableTaskRegistry>>().Get(builder.Name);
161161
DurableTaskWorkerOptions? options = provider.GetOptions<DurableTaskWorkerOptions>(builder.Name);
162-
return new DurableTaskWorkerWorkItemFilters(registry, options);
162+
return DurableTaskWorkerWorkItemFilters.FromDurableTaskRegistry(registry, options);
163163
});
164164
}
165165

src/Worker/Core/DurableTaskWorkerWorkItemFilters.cs

Lines changed: 26 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -11,76 +11,49 @@ namespace Microsoft.DurableTask.Worker;
1111
public class DurableTaskWorkerWorkItemFilters
1212
{
1313
/// <summary>
14-
/// Initializes a new instance of the <see cref="DurableTaskWorkerWorkItemFilters"/> class.
14+
/// Gets or initializes the orchestration filters.
1515
/// </summary>
16-
public DurableTaskWorkerWorkItemFilters()
17-
{
18-
this.Orchestrations = [];
19-
this.Activities = [];
20-
this.Entities = [];
21-
}
16+
public IReadOnlyList<OrchestrationFilter> Orchestrations { get; init; } = [];
17+
18+
/// <summary>
19+
/// Gets or initializes the activity filters.
20+
/// </summary>
21+
public IReadOnlyList<ActivityFilter> Activities { get; init; } = [];
2222

2323
/// <summary>
24-
/// Initializes a new instance of the <see cref="DurableTaskWorkerWorkItemFilters"/> class.
24+
/// Gets or initializes the entity filters.
25+
/// </summary>
26+
public IReadOnlyList<EntityFilter> Entities { get; init; } = [];
27+
28+
/// <summary>
29+
/// Creates a new instance of the <see cref="DurableTaskWorkerWorkItemFilters"/> class.
2530
/// </summary>
2631
/// <param name="registry"><see cref="DurableTaskRegistry"/> to construct the filter from.</param>
2732
/// <param name="workerOptions"><see cref="DurableTaskWorkerOptions"/> that optionally provides versioning information.</param>
28-
internal DurableTaskWorkerWorkItemFilters(DurableTaskRegistry registry, DurableTaskWorkerOptions? workerOptions)
33+
/// <returns>A new instance of <see cref="DurableTaskWorkerWorkItemFilters"/> constructed from the provided registry.</returns>
34+
internal static DurableTaskWorkerWorkItemFilters FromDurableTaskRegistry(DurableTaskRegistry registry, DurableTaskWorkerOptions? workerOptions)
2935
{
30-
List<OrchestrationFilter> orchestrationActions = new();
31-
foreach (var orchestration in registry.Orchestrators)
36+
// TODO: Support multiple versions per orchestration/activity. For now, grab the worker version from the options.
37+
return new DurableTaskWorkerWorkItemFilters
3238
{
33-
orchestrationActions.Add(new OrchestrationFilter
39+
Orchestrations = registry.Orchestrators.Select(orchestration => new OrchestrationFilter
3440
{
3541
Name = orchestration.Key,
36-
37-
// TODO: Support multiple orchestration versions, for now, utilize the Worker's version.
3842
Versions = workerOptions?.Versioning != null ? [workerOptions.Versioning.DefaultVersion] : [],
39-
});
40-
}
41-
42-
this.Orchestrations = orchestrationActions;
43-
List<ActivityFilter> activityActions = new();
44-
foreach (var activity in registry.Activities)
45-
{
46-
activityActions.Add(new ActivityFilter
43+
}).ToList(),
44+
Activities = registry.Activities.Select(activity => new ActivityFilter
4745
{
4846
Name = activity.Key,
49-
50-
// TODO: Support multiple activity versions, for now, utilize the Worker's version.
5147
Versions = workerOptions?.Versioning != null ? [workerOptions.Versioning.DefaultVersion] : [],
52-
});
53-
}
54-
55-
this.Activities = activityActions;
56-
List<EntityFilter> entityActions = new();
57-
foreach (var entity in registry.Entities)
58-
{
59-
entityActions.Add(new EntityFilter
48+
}).ToList(),
49+
Entities = registry.Entities.Select(entity => new EntityFilter
6050
{
6151
// Entity names are normalized to lowercase in the backend.
6252
Name = entity.Key.ToString().ToLowerInvariant(),
63-
});
64-
}
65-
66-
this.Entities = entityActions;
53+
}).ToList(),
54+
};
6755
}
6856

69-
/// <summary>
70-
/// Gets or initializes the orchestration filters.
71-
/// </summary>
72-
public IReadOnlyList<OrchestrationFilter> Orchestrations { get; init; }
73-
74-
/// <summary>
75-
/// Gets or initializes the activity filters.
76-
/// </summary>
77-
public IReadOnlyList<ActivityFilter> Activities { get; init; }
78-
79-
/// <summary>
80-
/// Gets or initializes the entity filters.
81-
/// </summary>
82-
public IReadOnlyList<EntityFilter> Entities { get; init; }
83-
8457
/// <summary>
8558
/// Struct specifying an orchestration filter.
8659
/// </summary>
@@ -94,7 +67,7 @@ public struct OrchestrationFilter
9467
/// <summary>
9568
/// Gets or initializes the versions of the orchestration to filter.
9669
/// </summary>
97-
public List<string> Versions { get; init; }
70+
public IReadOnlyList<string> Versions { get; init; }
9871
}
9972

10073
/// <summary>
@@ -110,7 +83,7 @@ public struct ActivityFilter
11083
/// <summary>
11184
/// Gets or initializes the versions of the activity to filter.
11285
/// </summary>
113-
public List<string> Versions { get; init; }
86+
public IReadOnlyList<string> Versions { get; init; }
11487
}
11588

11689
/// <summary>

src/Worker/Grpc/GrpcDurableTaskWorker.Processor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ async ValueTask<OrchestrationRuntimeState> BuildRuntimeStateAsync(
256256
MaxConcurrentEntityWorkItems =
257257
workerOptions.Concurrency.MaximumConcurrentEntityWorkItems,
258258
Capabilities = { this.worker.grpcOptions.Capabilities },
259-
WorkItemFilters = this.worker?.workItemFilters?.ToGrpcWorkItemFilters(),
259+
WorkItemFilters = this.worker.workItemFilters?.ToGrpcWorkItemFilters(),
260260
},
261261
cancellationToken: cancellation);
262262
}

src/Worker/Grpc/Internal/DurableTaskWorkerWorkItemFiltersExtension.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace Microsoft.DurableTask.Worker.Grpc.Internal;
88
/// <summary>
99
/// Extension for <see cref="DurableTaskWorkerWorkItemFilters"/> to convert to gRPC types.
1010
/// </summary>
11-
public static class DurableTaskWorkerWorkItemFiltersExtensions
11+
public static class DurableTaskWorkerWorkItemFiltersExtension
1212
{
1313
/// <summary>
1414
/// Converts a <see cref="DurableTaskWorkerWorkItemFilters"/> to a gRPC <see cref="P.WorkItemFilters"/>.
@@ -17,6 +17,7 @@ public static class DurableTaskWorkerWorkItemFiltersExtensions
1717
/// <returns>A gRPC <see cref="P.WorkItemFilters"/>.</returns>
1818
public static P.WorkItemFilters ToGrpcWorkItemFilters(this DurableTaskWorkerWorkItemFilters workItemFilter)
1919
{
20+
Check.NotNull(workItemFilter);
2021
var grpcWorkItemFilters = new P.WorkItemFilters();
2122
foreach (var orchestrationFilter in workItemFilter.Orchestrations)
2223
{
@@ -30,21 +31,21 @@ public static P.WorkItemFilters ToGrpcWorkItemFilters(this DurableTaskWorkerWork
3031

3132
foreach (var activityFilter in workItemFilter.Activities)
3233
{
33-
var grpcActivityAction = new P.ActivityFilter
34+
var grpcActivityFilter = new P.ActivityFilter
3435
{
3536
Name = activityFilter.Name,
3637
};
37-
grpcActivityAction.Versions.AddRange(activityFilter.Versions);
38-
grpcWorkItemFilters.Activities.Add(grpcActivityAction);
38+
grpcActivityFilter.Versions.AddRange(activityFilter.Versions);
39+
grpcWorkItemFilters.Activities.Add(grpcActivityFilter);
3940
}
4041

4142
foreach (var entityFilter in workItemFilter.Entities)
4243
{
43-
var grpcEntityAction = new P.EntityFilter
44+
var grpcEntityFilter = new P.EntityFilter
4445
{
4546
Name = entityFilter.Name,
4647
};
47-
grpcWorkItemFilters.Entities.Add(grpcEntityAction);
48+
grpcWorkItemFilters.Entities.Add(grpcEntityFilter);
4849
}
4950

5051
return grpcWorkItemFilters;

0 commit comments

Comments
 (0)