Skip to content

Commit 93c5448

Browse files
committed
Update default version handling
Signed-off-by: Hal Spang <halspang@microsoft.com>
1 parent 1c504fc commit 93c5448

2 files changed

Lines changed: 79 additions & 5 deletions

File tree

src/Worker/Core/DurableTaskWorkerWorkItemFilters.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,25 @@ public class DurableTaskWorkerWorkItemFilters
3535
/// <returns>A new instance of <see cref="DurableTaskWorkerWorkItemFilters"/> constructed from the provided registry.</returns>
3636
internal static DurableTaskWorkerWorkItemFilters FromDurableTaskRegistry(DurableTaskRegistry registry, DurableTaskWorkerOptions? workerOptions)
3737
{
38-
// TODO: Support multiple versions per orchestration/activity. For now, grab the worker version from the options.
38+
// TODO: Support multiple versions per orchestration/activity.
39+
// For now, fetch the version based on the versioning match strategy if defined. If undefined, default to null (all versions match).
40+
IReadOnlyList<string> versions = [];
41+
if (workerOptions?.Versioning?.MatchStrategy == DurableTaskWorkerOptions.VersionMatchStrategy.Strict)
42+
{
43+
versions = [workerOptions.Versioning.Version];
44+
}
45+
3946
return new DurableTaskWorkerWorkItemFilters
4047
{
4148
Orchestrations = registry.Orchestrators.Select(orchestration => new OrchestrationFilter
4249
{
4350
Name = orchestration.Key,
44-
Versions = workerOptions?.Versioning != null ? [workerOptions.Versioning.Version] : [],
51+
Versions = versions,
4552
}).ToList(),
4653
Activities = registry.Activities.Select(activity => new ActivityFilter
4754
{
4855
Name = activity.Key,
49-
Versions = workerOptions?.Versioning != null ? [workerOptions.Versioning.Version] : [],
56+
Versions = versions,
5057
}).ToList(),
5158
Entities = registry.Entities.Select(entity => new EntityFilter
5259
{

test/Worker/Core.Tests/DependencyInjection/UseWorkItemFiltersTests.cs

Lines changed: 69 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ public void WorkItemFilters_DefaultWithEntity_WhenNoExplicitFiltersConfigured()
111111
}
112112

113113
[Fact]
114-
public void WorkItemFilters_DefaultWithVersioning_WhenNoExplicitFiltersConfigured()
114+
public void WorkItemFilters_DefaultNullWithVersioningCurrentOrOlder_WhenNoExplicitFiltersConfigured()
115115
{
116116
// Arrange
117117
ServiceCollection services = new();
@@ -126,7 +126,74 @@ public void WorkItemFilters_DefaultWithVersioning_WhenNoExplicitFiltersConfigure
126126
{
127127
options.Versioning = new DurableTaskWorkerOptions.VersioningOptions
128128
{
129-
Version = "1.0"
129+
Version = "1.0",
130+
MatchStrategy = DurableTaskWorkerOptions.VersionMatchStrategy.CurrentOrOlder,
131+
};
132+
});
133+
});
134+
135+
// Act
136+
ServiceProvider provider = services.BuildServiceProvider();
137+
IOptionsMonitor<DurableTaskWorkerWorkItemFilters> filtersMonitor =
138+
provider.GetRequiredService<IOptionsMonitor<DurableTaskWorkerWorkItemFilters>>();
139+
DurableTaskWorkerWorkItemFilters actual = filtersMonitor.Get("test");
140+
141+
// Assert
142+
actual.Orchestrations.Should().ContainSingle(o => o.Name == nameof(TestOrchestrator) && o.Versions.Count == 0);
143+
actual.Activities.Should().ContainSingle(a => a.Name == nameof(TestActivity) && a.Versions.Count == 0);
144+
}
145+
146+
[Fact]
147+
public void WorkItemFilters_DefaultNullWithVersioningNone_WhenNoExplicitFiltersConfigured()
148+
{
149+
// Arrange
150+
ServiceCollection services = new();
151+
services.AddDurableTaskWorker("test", builder =>
152+
{
153+
builder.AddTasks(registry =>
154+
{
155+
registry.AddOrchestrator<TestOrchestrator>();
156+
registry.AddActivity<TestActivity>();
157+
});
158+
builder.Configure(options =>
159+
{
160+
options.Versioning = new DurableTaskWorkerOptions.VersioningOptions
161+
{
162+
Version = "1.0",
163+
MatchStrategy = DurableTaskWorkerOptions.VersionMatchStrategy.None,
164+
};
165+
});
166+
});
167+
168+
// Act
169+
ServiceProvider provider = services.BuildServiceProvider();
170+
IOptionsMonitor<DurableTaskWorkerWorkItemFilters> filtersMonitor =
171+
provider.GetRequiredService<IOptionsMonitor<DurableTaskWorkerWorkItemFilters>>();
172+
DurableTaskWorkerWorkItemFilters actual = filtersMonitor.Get("test");
173+
174+
// Assert
175+
actual.Orchestrations.Should().ContainSingle(o => o.Name == nameof(TestOrchestrator) && o.Versions.Count == 0);
176+
actual.Activities.Should().ContainSingle(a => a.Name == nameof(TestActivity) && a.Versions.Count == 0);
177+
}
178+
179+
[Fact]
180+
public void WorkItemFilters_DefaultVersionWithVersioningStrict_WhenNoExplicitFiltersConfigured()
181+
{
182+
// Arrange
183+
ServiceCollection services = new();
184+
services.AddDurableTaskWorker("test", builder =>
185+
{
186+
builder.AddTasks(registry =>
187+
{
188+
registry.AddOrchestrator<TestOrchestrator>();
189+
registry.AddActivity<TestActivity>();
190+
});
191+
builder.Configure(options =>
192+
{
193+
options.Versioning = new DurableTaskWorkerOptions.VersioningOptions
194+
{
195+
Version = "1.0",
196+
MatchStrategy = DurableTaskWorkerOptions.VersionMatchStrategy.Strict,
130197
};
131198
});
132199
});

0 commit comments

Comments
 (0)