Highlights
Added
- Added
workflow.ChildWorkflowOptions.VersioningOverridefor explicitly pinning,
auto-upgrading, or one-time routing a child workflow independently of its parent.
This requires Temporal Server 1.32.0 or later. - Added experimental
converter.NewTransferTypeConverterAPI that implements transfer type conversion.
converter.GetDefaultDataConverter()now supports transfer type conversion. - Added autoscaling support for server poller groups, with per-group coverage and
sticky-backlog prioritization.SimpleMaximumis unchanged, and autoscaling
behaves as before when no poller groups are configured. TestWorkflowEnvironmentandTestActivityEnvironmentnow run worker plugins set through
SetWorkerOptions(worker.Options{Plugins: ...}), which were previously ignored. Once plugins are
set,SetWorkerOptionsmay not be called again on that environment, and what a plugin registers
inStartWorkeris undone atStopWorker.TestActivityEnvironmentnow hasRegisterDynamicActivityand implementsworker.ActivityRegistry
again.temporalnexus.ConvertNexusLinkToLinkWorkflow, the decoding counterpart of
ConvertWorkflowLinkToNexusLink.- Added
workflow.NewLocalVar[T](ctx)for type-safe values bound to a workflow run that can be
accessed from workflow code and workflow interceptors. Copies of aworkflow.LocalVar[T]share
identity. - Experimental: New external storage concurrency controls.
ExternalStorage.Concurrencysets
MaxDriverOperations(for one client or worker) andMaxOperationsPerMessage(for one
message). Drivers must usectx.GetLimiter()for store and retrieve operations.
Changed
- Removed experimental labels from the core plugin APIs.
- Task queue priority is no longer marked as experimental.
- Nexus link conversion now handles all four link types. Workflow links on an inbound Nexus
request are converted rather than dropped, andtemporalnexus.ConvertCommonLinkToNexusLink
converts NexusOperation and Activity links rather than returning an emptynexus.Link. - The
[TMPRL1104]workflow task duration log now uses a single warning threshold, configurable
with theTEMPORAL_WORKFLOW_TASK_DURATION_WARN_SECONDSenvironment variable and defaulting to 5
seconds. It previously warned above a fixed 10 seconds, logged at info above a fixed 5 seconds,
and logged at debug below that when trace logging was enabled.
💥 Breaking Changes
- Moved the Google ADK integration from
contrib/googleadkto
temporalio/ai-integrations.
Its module path is nowgo.temporal.io/googleadkinstead of
go.temporal.io/sdk/contrib/googleadk; see the integration README for installation and usage. - Plugin cleanup must not synchronously call the same worker's
Stop: it now waits
for that cleanup to finish and deadlocks. This includesSimplePlugin.RunContextAfter,
whose callback receives nonextfunction. - Bulk sticky workflow cache cleanup, including
PurgeStickyWorkflowCacheand final-worker
shutdown, no longer incrementstemporal_sticky_cache_total_forced_eviction. This aligns bulk
cleanup with Java and Core-based SDKs. Qualifying capacity and other per-workflow removals remain
counted, but dashboards may report fewer forced evictions. - Experimental: Removed
WorkerOptions.MaxConcurrentWorkflowTaskExternalStorageVisits. Use
ExternalStorage.Concurrency.
Fixed
- Local activity mock lookup in
TestWorkflowEnvironmentno longer tries re-resolving the activity name.
This fixes a bug where two closures with different registered names would alias each other. - mTLS client setup and schedule creation no longer modify caller-owned TLS
configs or workflow actions, allowing safe reuse. - Fatal worker errors now signal polling to stop before notification and run
notification and automatic stopping outside polling goroutines to avoid waiting
for the reporting poller itself. ConcurrentWorker.Stopcalls andWorker.Run
wait for worker cleanup, andRunreturns the first fatal error even when
interruption races with it. - Child context cancellation now follows creation order by default.
- Legacy query failure responses (
RespondQueryTaskCompletedRequest) now set
WorkflowTaskFailedCausefor workflow task failures:PAYLOADS_TOO_LARGEfor oversized payloads,
NON_DETERMINISTIC_ERRORfor illegal state machine panics, and
WORKFLOW_WORKER_UNHANDLED_FAILUREwhen the workflow panicked. - Autoscaling pollers now honor configured bounds at startup, preventing excess polls and workflow
polling delays. workflow.WithLocalActivityOptionsno longer modifies theRetryPolicypassed in
LocalActivityOptions. It applies the default retry values to a copy, so sharing one policy between
workflows no longer writes to it from several goroutines.- Worker plugin registry callbacks:
RegisterDynamicWorkflownow passes the real options to
OnRegisterDynamicWorkflow, andRegisterDynamicActivityno longer panics when a plugin set
OnRegisterActivitybut notOnRegisterDynamicActivity. - Stopped workers now release sticky workflow cache ownership immediately. When the final worker
stops, cached workflow state is cleared without waiting for garbage collection.
What's Changed
- [AI-501] testsuite: run worker plugins in the test environments by @DABH in #2675
- [SDK Sentinel] Stabilize unhandled command metric assertion by @sdk-sentinel-bot in #2685
- Refactor and extend release script to contrib modules by @dplyukhin in #2584
- [AI-501] testsuite: restore the registry after each plugin worker run by @DABH in #2693
- contrib/googleadk: export the active workflow.Context accessor by @perek in #2684
- Add Google Cloud Run CloudRunIDPlugin by @seanbollin in #2599
- Mark Priority as stable by @yuandrew in #2699
- fix(opentelemetry): keep continue-as-new spans from failing by @jstar0 in #2686
- Prepare contrib/gcp/cloudrun/id release 0.1.0 by @yuandrew in #2712
- Prepare contrib/opentelemetry/otlpworker release 0.1.0 by @yuandrew in #2713
- Prepare contrib/gcp/cloudrun/otel release 0.1.0 by @yuandrew in #2715
- Start autoscaling pollers within bounds by @yuandrew in #2701
- Fix sticky workflow cache retention after worker shutdown by @yuandrew in #2694
- Set WorkflowTaskFailedCause on legacy query failure responses by @Tyagiquamar in #2663
- Prepare contrib/googleadk release 0.3.0 by @DABH in #2719
- Poller Group support by @yuandrew in #2711
- contrib/googleadk: give the first dev-server start time to download the CLI by @DABH in #2720
- Enable SDKFlagOrderedChildCancel by default by @yuandrew in #2725
- Fix TestTaskQueueStats flakiness with EventuallyWithT retry by @AyushKashyapII in #2678
- [SDK Sentinel] Stabilize Nexus cancellation ordering assertions by @sdk-sentinel-bot in #2726
- Unified link converters by @Evanthx in #2714
- Remove experimental language from core plugin APIs by @tconley1428 in #2737
- feat: workflow task duration configurable warning threshold by @jmaeagle99 in #2697
- Add experimental transfer type conversion API by @dplyukhin in #2703
- [SDK Sentinel] Stabilize OpenTelemetry query span assertion by @sdk-sentinel-bot in #2741
- Fix DisableUpdateTracing in the Datadog tracer by @fallintoplace in #2733
- Add RegisterDynamicActivity to TestActivityEnvironment by @0xDevNinja in #2724
- workflowcheck: fix missed non-determinism in call cycles by @shivam-ajmera in #2743
- 💥 chore(extstore): require Go SDK v1.49.0 in the S3 and GCS drivers by @jmaeagle99 in #2748
- Prepare contrib/aws/s3driver release 0.3.0 by @jmaeagle99 in #2750
- Prepare contrib/aws/s3driver/awssdkv2 release 0.3.0 by @jmaeagle99 in #2753
- Prepare contrib/gcp/gcsdriver release 0.2.0 by @jmaeagle99 in #2751
- Prepare contrib/gcp/gcsdriver/gcssdk release 0.2.0 by @jmaeagle99 in #2752
- Fix fatal worker shutdown scheduling and completion by @raphael in #2731
- [SDK Sentinel] Stabilize workflow activity cancellation test by @sdk-sentinel-bot in #2754
- Do not modify the caller's retry policy in WithLocalActivityOptions by @RaphaelFakhri in #2710
- Bump go.opentelemetry.io/otel/sdk from 1.44.0 to 1.45.0 in /contrib/googleadk by @dependabot[bot] in #2749
- Add child workflow versioning override by @Shivs11 in #2707
- Avoid mutating caller-owned setup options by @yuandrew in #2747
- Bump some versions for dependabot by @yuandrew in #2742
- Prepare contrib/tools/workflowcheck release 0.6.0 by @yuandrew in #2757
- Preserve resolved names for local activity mocks by @dplyukhin in #2758
- Add workflow local by @Quinn-With-Two-Ns in #2668
- Make heartbeat retry metrics test deterministic by @yuandrew in #2767
- Remove migrated Google ADK integration by @brianstrauch in #2770
- feat!(extstore): add new concurrency controls for external storage. by @cconstable in #2727
New Contributors
- @perek made their first contribution in #2684
- @jstar0 made their first contribution in #2686
- @Tyagiquamar made their first contribution in #2663
- @fallintoplace made their first contribution in #2733
- @0xDevNinja made their first contribution in #2724
- @shivam-ajmera made their first contribution in #2743
- @raphael made their first contribution in #2731
- @RaphaelFakhri made their first contribution in #2710
Full Changelog: v1.49.0...v1.50.0