Skip to content

Releases: microsoft/durabletask-dotnet

v1.0.5

18 Oct 19:55
5522db3
Compare
Choose a tag to compare

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

27 Sep 20:44
6dcf519
Compare
Choose a tag to compare

Changes

Microsoft.DurableTask.Worker

  • Fix handling of concurrent external events with the same name (#194)

Full Changelog: v1.0.3...v1.0.4

v1.0.3

28 Aug 21:58
404ad3e
Compare
Choose a tag to compare

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 to GrpcDurableTaskWorkerOptions.Channel

Microsoft.DurableTask.Client.Grpc

  • Add GrpcDurableTaskClientOptions.CallInvoker as an alternative to GrpcDurableTaskClientOptions.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

07 Apr 21:07
215eeb8
Compare
Choose a tag to compare

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

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

New Contributors

Full Changelog: v1.0.1...v1.0.2

v1.0.1

15 Feb 20:04
c9de799
Compare
Choose a tag to compare

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

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

Full Changelog: v1.0.0...v1.0.1

v1.0.0

01 Feb 00:27
0be39c8
Compare
Choose a tag to compare

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 and ResumeInstanceAsync to DurableTaskClient.
  • Rename DurableTaskClient methods
    • TerminateAsync -> TerminateInstanceAsync
    • PurgeInstanceMetadataAsync -> PurgeInstanceAsync
    • PurgeInstances -> PurgeAllInstancesAsync
    • GetInstanceMetadataAsync -> GetInstanceAsync
    • GetInstances -> GetAllInstancesAsync
  • TaskOrchestrationContext.CreateReplaySafeLogger now creates ILogger directly (as opposed to wrapping an existing ILogger).
  • Durable Functions class-based syntax now resolves ITaskActivity instances from IServiceProvider, if available there.
  • DurableTaskClient methods have been touched up to ensure CancellationToken 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

30 Nov 21:44
33bbe4b
Compare
Choose a tag to compare
v1.0.0-rc.1 Pre-release
Pre-release

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:

  1. Writing a library for extensions -> depend on only Microsoft.DurableTask.Abstractions (unless you need types from other packages).
  2. Writing a new worker or client -> depend on Microsoft.DurableTask.Client and/or Microsoft.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).
  3. Querying or starting new orchestrations (from an AspNet project for example) -> depend on appropriate Microsoft.DurableTask.Client.* library.
  4. 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 to TaskOrchestrator
    • 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 to TaskActivity
    • OnRun removed. With both OnRun and OnRunAsync, there was no compiler error when you did not implement one. The remaining method is now marked abstract to force an implementation. Synchronous implementation can still be done via Task.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 supplying SubOrchestrationOptions for TaskOptions.
  • 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 a RetryPolicy or AsyncRetryHandler.
    • 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 and startAfter wrapped into StartOrchestrationOptions 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, only DurableTaskRegistry concrete type.
    • All lambda-methods renamed to AddActivityFunc and AddOrchestratorFunc. This was to avoid ambiguous or incorrect overload resolution with the factory methods.
  • 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 made internal (from public)
    • 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...
Read more

v0.4.1-beta

20 May 23:57
96eff12
Compare
Choose a tag to compare
v0.4.1-beta Pre-release
Pre-release

Initial public release