Releases: microsoft/durabletask-dotnet
v1.0.5
Changes
Microsoft.DurableTask.Abstractions
- Microsoft.Azure.DurableTask.Core dependency increased to
2.15.0
(#212)
Microsoft.DurableTask.Worker
- Fix re-encoding of events when using
TaskOrchestrationContext.ContinueAsNew(preserveUnprocessedEvents: true)
(#212)
Full Changelog: v1.0.4...v1.0.5
v1.0.4
v1.0.3
Changes
Microsoft.DurableTask.Worker
- Fix instance ID not being passed in when using retry policy (#174)
Microsoft.DurableTask.Worker.Grpc
- Add
GrpcDurableTaskWorkerOptions.CallInvoker
as an alternative toGrpcDurableTaskWorkerOptions.Channel
Microsoft.DurableTask.Client.Grpc
- Add
GrpcDurableTaskClientOptions.CallInvoker
as an alternative toGrpcDurableTaskClientOptions.Channel
What's Changed
- Add instructions to obtain protobufs by @davidmrdavid in #151
- Add gRPC CallInvoker to options by @jviau in #157
- Bump Grpc.AspNetCore.Server from 2.45.0 to 2.52.0 in /test/Grpc.IntegrationTests by @dependabot in #161
- Bump Grpc.Net.Client from 2.50.0 to 2.52.0 in /src/Grpc by @dependabot in #162
- Onboarding to GitOps.ResourceManagement by @microsoft-github-policy-service in #156
- Remove myget feed by @jviau in #169
- Patch GH automation by @davidmrdavid in #176
- Fix instanceId not passed in when using retry by @jviau in #177
New Contributors
- @microsoft-github-policy-service made their first contribution in #156
Full Changelog: v1.0.2...v1.0.3
v1.0.2
This release contains minor fixes.
Changes
Microsoft.Azure.Functions.Worker.Extensions.DurableTask
- Fix a connection and memory leak with using
[DurableClient] DurableTaskClient client
input binding in functions.- The intention was for the input converter to cache and re-use the same client for the lifetime of an application. However, this logic had a flaw where the cache ended up being a miss on every binding, causing us to continually recreate and store clients. Each client would open a connection from worker back to host. Eventually all attempts to use these clients would fail as max outbound connections would be reached. The symptoms would manifest in different ways, but the most common would be: healthy function app -> connections exhausted over time -> all further attempts to use
DurableTaskClient
fail -> increase in function failures -> worker determined unhealthy and recycled -> new worker is healthy, rinse and repeat. - Azure/azure-functions-durable-extension#2440
- The intention was for the input converter to cache and re-use the same client for the lifetime of an application. However, this logic had a flaw where the cache ended up being a miss on every binding, causing us to continually recreate and store clients. Each client would open a connection from worker back to host. Eventually all attempts to use these clients would fail as max outbound connections would be reached. The symptoms would manifest in different ways, but the most common would be: healthy function app -> connections exhausted over time -> all further attempts to use
Microsoft.DurableTask.Worker
- Fix issue with
TaskOrchestrationContext.Parent
not being set.
NuGet Packages
Microsoft.Azure.Functions.Worker.Extensions.DurableTask v1.0.2
Microsoft.DurableTask.Abstractions v1.0.2
Microsoft.DurableTask.Client v1.0.2
Microsoft.DurableTask.Client.Grpc v1.0.2
Microsoft.DurableTask.Client.OrchestrationServiceShimClient v1.0.2
Microsoft.DurableTask.Worker v1.0.2
Microsoft.DurableTask.Worker.Grpc v1.0.2
Microsoft.DurableTask.Grpc v1.0.2
What's Changed
- Add FabricBot config for automated GitHub issue management by @davidmrdavid in #132
- Fix null parent instance details by @jviau in #137
- Update release notes by @jviau in #138
- Prepare v1.0.2 release by @jviau in #141
New Contributors
- @davidmrdavid made their first contribution in #132
Full Changelog: v1.0.1...v1.0.2
v1.0.1
This release contains a few minor fixes and the new Microsoft.DurableTask.Client.OrchestrationServiceShimClient
package.
Changes
Microsoft.DurableTask.Client
- Fix incorrect bounds check on
PurgeResult
- Address typo for
DurableTaskClient.GetInstancesAsync
(incorrectly pluralized)- Added
GetInstanceAsync
- Hide
GetInstancesAsync
from editor
- Added
Microsoft.DurableTask.Client.OrchestrationServiceShimClient
- Initial release of this package
- Allows for connecting directly to a task hub via
DurableTask.Core.IOrchestratrionServiceClient
NuGet Packages
Microsoft.DurableTask.Abstractions v1.0.1
Microsoft.DurableTask.Client v1.0.1
Microsoft.DurableTask.Client.Grpc v1.0.1
Microsoft.DurableTask.Client.OrchestrationServiceShimClient v1.0.1
Microsoft.DurableTask.Worker v1.0.1
Microsoft.DurableTask.Worker.Grpc v1.0.1
Microsoft.DurableTask.Grpc v1.0.1
Commits Summary
- Updated PurgeResult to prevent exceptions by @jhueppauff in #115
- Update readme.md and func samples with recent changes by @jviau in #114
- Add GetInstanceAsync overload to address plural typo by @jviau in #118
- Add Client.OrchestrationServiceClientShim by @jviau in #102
- Update samples packages to 1.0.0 by @jviau in #122
- Refactoring/organization of release steps by @jviau in #125
- Fix ADO yaml whitespace by @jviau in #126
- Fix SBOM inclusion in Client & Worker packages by @jviau in #128
New Contributors
- @jhueppauff made their first contribution in #115
Full Changelog: v1.0.0...v1.0.1
v1.0.0
General Availability of v1.0.0
This is v1.0.0
release of the new DurableTask .NET SDK. This release focused on refining of APIs as well as multi-target support for gRPC.
NuGet Packages
Microsoft.Azure.Functions.Worker.Extensions.DurableTask v1.0.0
Microsoft.DurableTask.Abstractions v1.0.0
Microsoft.DurableTask.Client v1.0.0
Microsoft.DurableTask.Client.Grpc v1.0.0
Microsoft.DurableTask.Worker v1.0.0
Microsoft.DurableTask.Worker.Grpc v1.0.0
Microsoft.DurableTask.Grpc v1.0.0
Change Summary
- Added
SuspendInstanceAsync
andResumeInstanceAsync
toDurableTaskClient
. - Rename
DurableTaskClient
methodsTerminateAsync
->TerminateInstanceAsync
PurgeInstanceMetadataAsync
->PurgeInstanceAsync
PurgeInstances
->PurgeAllInstancesAsync
GetInstanceMetadataAsync
->GetInstanceAsync
GetInstances
->GetAllInstancesAsync
TaskOrchestrationContext.CreateReplaySafeLogger
now createsILogger
directly (as opposed to wrapping an existingILogger
).- Durable Functions class-based syntax now resolves
ITaskActivity
instances fromIServiceProvider
, if available there. DurableTaskClient
methods have been touched up to ensureCancellationToken
is included, as well as is the last parameter.- Removed obsolete/unimplemented local lambda activity calls from
TaskOrchestrationContext
- Input is now an optional parameter on
TaskOrchestrationContext.ContinueAsNew
- Multi-target gRPC projects to now use
Grpc.Net.Client
when appropriate (.NET6.0 and up)
What's Changed
- Update Samples (Console, Netfx, Functions) by @jviau in #78
- Add new packages to README.md by @jviau in #89
- Use ActivatorUtilities.GetServiceOrCreateInstance for TaskActivity in Azure Functions by @jviau in #105
- Update DurableTaskClient API to have consistent cancellation tokens by @jviau in #103
- Expose ILogger creation on TaskOrchestrationContext by @jviau in #106
- Remove obsolete lambda-activity for now by @jviau in #94
- Add Benchmarks project by @jviau in #101
- Nullable newInput on ContinueAsNew by @jviau in #95
- Update protobuf, add suspend and resume event support by @jviau in #97
- Multi-target gRPC packages. Use protobuf directly by @jviau in #98
- Fix typos in XML docs by @cgillum in #109
- Add new TaskOption overload for skipping input param by @jviau in #110
- Make DurableTaskClient method names consistent by @jviau in #112
- Prepare for v1 release. by @jviau in #113
Full Changelog: v1.0.0-rc.1...v1.0.0
v1.0.0-rc.1
Release Candidate 1
This release is the 2nd preview and 1st rc for the new DurableTask .NET SDK. This release focused on refactoring of assemblies and the foundations of the SDK. The SDK is now split into multiple assemblies to allow for taking on only the dependencies you need. For example, if you are writing extensions or re-usable orchestrators/activities, then you now only need the abstractions package (and not bring in gRPC or other dependencies). This release also expands some feature parity work with Durable Functions and fixes bugs.
This release also contains v1.0.0-preview.1
for Microsoft.DurableTask.Generators
. This package is kept "preview" as we are still iterating on it and it is purely optional, so we are willing to move forward without it for now.
NuGet Packages
Microsoft.Azure.Functions.Worker.Extensions.DurableTask v1.0.0-rc.1
Microsoft.DurableTask.Abstractions v1.0.0-rc.1
Microsoft.DurableTask.Client v1.0.0-rc.1
Microsoft.DurableTask.Client.Grpc v1.0.0-rc.1
Microsoft.DurableTask.Worker v1.0.0-rc.1
Microsoft.DurableTask.Worker.Grpc v1.0.0-rc.1
Microsoft.DurableTask.Generators v1.0.0-preview.1
Breaking Changes
1. Assemblies Overhaul
Assemblies are now overhauled. Previously you only depended on Microsoft.DurableTask.Client
. That package is now for client-only abstractions and builder. The fix here depends on your use case:
- Writing a library for extensions -> depend on only
Microsoft.DurableTask.Abstractions
(unless you need types from other packages). - Writing a new worker or client -> depend on
Microsoft.DurableTask.Client
and/orMicrosoft.DurableTask.Worker
. It is up to you if you want to write a single library (like a completely in-memory emulator would) for both or separate libraries (like gRPC). - Querying or starting new orchestrations (from an AspNet project for example) -> depend on appropriate
Microsoft.DurableTask.Client.*
library. - A worker to process durable work items -> depend on appropriate
Microsoft.DurableTask.Worker.*
library.
2. Builder changes
The builder pattern was largely overhauled. Please refer to our samples to see the new pattern.
3. Other changes
- Added new abstract property
TaskOrchestrationContext.ParentInstance
. - Added new abstract method
DurableTaskClient.PurgeInstancesAsync
. - Renamed
TaskOrchestratorBase
toTaskOrchestrator
OnRunAsync
->RunAsync
, forced-nullability removed.- Nullability can be done in generic params, ie:
MyOrchestrator : TaskOrchestrator<string?, string?>
- Nullability is not verified at runtime by the base class, it is up to the individual orchestrator implementations to verify their own nullability.
- Renamed
TaskActivityBase
toTaskActivity
OnRun
removed. With bothOnRun
andOnRunAsync
, there was no compiler error when you did not implement one. The remaining method is now markedabstract
to force an implementation. Synchronous implementation can still be done viaTask.FromResult
.OnRunAsync
->RunAsync
, forced-nullability removed.- Nullability can be done in generic params, ie:
MyActivity : TaskActivity<string?, string?>
- Nullability is not verified at runtime by the base class, it is up to the individual activity implementations to verify their own nullability.
TaskOrchestrationContext.StartSubOrchestrationAsync
refactored:instanceId
parameter removed. Can now specify it via supplyingSubOrchestrationOptions
forTaskOptions
.
TaskOptions
refactored to be a record type.- Builder removed.
- Retry provided via a property
TaskRetryOptions
, which is a pseudo union-type which can be either aRetryPolicy
orAsyncRetryHandler
. SubOrchestrationOptions
is a derived type that can be used to specific a sub-orchestrations instanceId.- Helper method
.WithInstanceId(string? instanceId)
added.
DurableTaskClient.ScheduleNewOrchestrationInstanceAsync
refactored:instanceId
andstartAfter
wrapped intoStartOrchestrationOptions
object.
- Builder API completely overhauled. Now built entirely on top of the .NET generic host.
- See samples for how the new API works.
- Supports multiple workers and named-clients.
- Ability to set
TaskName.Version
removed for now. Will be added when we address versioning. IDurableTaskRegistry
removed, onlyDurableTaskRegistry
concrete type.- All lambda-methods renamed to
AddActivityFunc
andAddOrchestratorFunc
. This was to avoid ambiguous or incorrect overload resolution with the factory methods.
- All lambda-methods renamed to
Microsoft.DurableTask.Generators
is now an optional package.- no longer automatically brought in when referencing other packages.
- To get code generation, add
<PackageReference Include="Microsoft.DurableTask.Generators" Version="1.0.0-preview.1" PrivateAssets="All" />
to your csproj.
GeneratedDurableTaskExtensions.AddAllGeneratedTasks
madeinternal
(frompublic
)- This is also to avoid conflicts when multiple files have this method generated. When wanting to expose to external consumes, a new extension method can be manually authored in the desired namespace and with an appropriate name which calls this method.
What's Changed
- Expose ParentInstance in TaskOrchestrationContext by @jviau in #38
- Suppress build warnings by @jviau in #40
- Add vscode tasks.json with build task by @jviau in #39
- Bump Newtonsoft.Json from 7.0.1 to 13.0.1 in /samples/NetFxConsoleApp by @dependabot in #32
- Update to DTFx gRPC 0.3.1, add support for purge via filter by @jviau in #41
- Updated worker packages to latest stable version in Sample app and README by @kshyju in #44
- Fix DataConverter inconsistencies by @jviau in #45
- Add support for multi instance query by @jviau in #42
- Fix code generation for Durable Functions function-based syntax. by @jviau in #47
- Switch netfx sample to sdk style csproj by @jviau in #49
- Move all output to root out folder by @jviau in #50
- Add SendEvent API + more API doc improvements by @cgillum in #31
- Refactor and split assemblies / nuget packages by @jviau in #52
- Add SolutionItems.csproj to hold random files (For visiblity in VS) by @jviau in #53
- Add global json, dirs.proj, tweak CI definitions by @jviau in #54
- Extract DurableTask.Core shims to common Worker package by @jviau in #55
- Enable NET analyzers by @jviau in #56
- Add stylecop analyzers - enable for abstractions project only (for now) by @jviau in #57
- Onboard client projects to stylecop by @jviau in #59
- Disable implicit usings on misc.csproj by @jviau in #60
- Add core worker builder pattern along with gRPC implementation by @jviau in #58
- Onboard worker projects to stylecop by @jviau in #64
- Add and consume validation helpers, remove unused interface by @jviau in #65
- Extract IDurableTaskFactory, enclose task invocations with a service scope. by @jviau in #67
- Refactor TaskActivity and TaskOrchestrator base classes by @jviau in #69
- Remove setting of TaskName.Version for now by @jviau in #71
- Allow sectional file sharing by @jviau in #63
- Microsoft.Azure.Functions.Worker 1.8.0 version by @jorgelevy in #37
- Add client builder pattern and gRPC implementation by @jviau in #61
- Refactor DurableTaskRegistry, move bulk of methods to extensions by @jviau in #70
- Extract interface slice from client for code-gen by @jviau in #77
- Move DurableTaskRegistry to Abstractions by @jviau in #76
- Auto-register default DurableTaskClient. Fix multiple registrations by @jviau in #81
- Allow for inheriting DurableTask clie...
v0.4.1-beta
Initial public release