Skip to content

1.18.0

Latest

Choose a tag to compare

@jmaeagle99 jmaeagle99 released this 13 Aug 16:58
· 17 commits to main since this release
3b6b5be

Notable Changes

💥 Breaking Changes

  • Removed the unused NexusHandlerFailureException; Nexus handler failures are represented by
    NexusRpc.Handlers.HandlerException. The SDK-created TemporalNexusClient implementation is now
    internal; Nexus operation handlers continue to receive its public ITemporalNexusClient
    interface.
  • By default, workers now proactively validate outbound payload/memo sizes before sending: a field
    over the warn threshold is logged ([TMPRL1103] at
    WARN) but still sent, while a task completion over the error limit is failed retryably
    ([TMPRL1103] at ERROR) instead of sent. Previously these reached the server, which terminated
    the workflow or failed the activity non-retryably; failing retryably instead lets a corrected
    workflow or activity be redeployed and recover. Tune warn thresholds via
    TemporalConnectionOptions.PayloadLimits. If you use a proxy between the worker and server that
    alters the size of payloads (e.g. compression, encryption, external storage), it is advised that
    you disable size enforcement by setting DisablePayloadErrorLimit to true on the worker.
  • Activity failures now include the latest heartbeat details atomically instead of force-flushing a throttled heartbeat first. Temporal Server 1.16.0 or newer is required to guarantee those details are preserved on failure; workers warn when the server does not advertise support.

Added

  • Added experimental SDK payload converter support for values and target types that expose
    Temporal transfer type conversion hooks. This lets hook-aware types delegate
    their wire representation to the configured payload converter, preserving SDK
    behavior such as serialization contexts.
  • Added TemporalWorkerOptions.MaxEagerActivityReservationsPerWorkflowTask to configure the
    maximum number of activity slots reserved for eager execution per workflow task. Configured
    values must be positive; use DisableEagerActivityExecution to disable eager execution.
  • Added WorkflowEnvironment.CreateFromEnvConfigAsync for creating test workflow environments from
    client environment configuration.
  • Added the experimental TemporalWorkerOptions.PatchActivationCallback, allowing workers to
    decide whether a first non-replay Workflow.Patched call should activate a patch during rolling
    deployments.
  • Support standalone activities as Nexus operations. ITemporalNexusClient.StartActivityAsync
    backs a Nexus operation with a standalone activity (async only). Cancellation of
    activity-execution operations can be customized by overriding
    TemporalOperationHandler<TInput, TResult>.CancelActivityExecutionAsync.
  • Worker heartbeats now report the hosting .NET runtime and its version. Set the new
    TemporalRuntimeOptions.DisableEnvironmentInfo to omit all runtime, hosting, and platform
    information from heartbeats.
  • Workers are now automatically enrolled into poller autoscaling when the namespace advertises the
    poller_autoscaling_auto_enroll capability. This only applies to poller types left at their
    default (the worker set neither a fixed poller count nor a poller behavior); explicitly
    configured pollers are left unchanged.
  • Workers now log a [TMPRL1104] warning when a workflow task takes longer than 5 seconds. Set TEMPORAL_WORKFLOW_TASK_DURATION_WARN_SECONDS to change the threshold.

Changed

  • Nexus support for calling operations from workflows and handling workflow-backed operations with
    WorkflowRunOperationHandler is now generally available (GA). Standalone Nexus Operation and TemporalOperationHandler,
    including workflow updates and standalone activities as Nexus operations, remains experimental.
  • User metadata fields (StaticSummary, StaticDetails, CurrentDetails, Activity Summary, Timer
    Summary) are no longer marked as experimental.
  • Hardened read-only workflow context enforcement so queries, update validators, and patch activation
    callbacks cannot mutate handlers or workflow details, invoke patches, or schedule workflow work.
    Patch activation callbacks also cannot use workflow randomness or issue workflow commands.
  • A NexusRpc.Handlers.HandlerException thrown by a payload codec or payload converter while
    decoding Nexus operation input is now propagated as-is instead of being wrapped in an Internal
    (codec) or BadRequest (converter) handler exception. This matches the existing pass-through
    behavior for ApplicationFailureException and lets codecs and converters control the resulting
    Nexus error type and retry behavior.

Fixed

  • Workers no longer advertise a worker control task queue unless the namespace supports worker
    heartbeats and commands and the built-in Nexus command worker is running.
  • Local activity resolutions are now delivered to workflows as each activity completes instead of waiting for every local activity in the workflow task. This allows sequences of short local activities to make progress while a long-running local activity executes in parallel, while preserving the resolution ordering recorded in existing histories during replay.
  • Try-cancel child workflows no longer cause nondeterminism when they complete or fail after their cancellation was requested.

What's Changed

SDK Core Update

Updated from temporalio/sdk-rust@95e9768 to temporalio/sdk-rust@78ac17e

New Contributors

Full Changelog: 1.17.0...1.18.0