Skip to content

1.19.0

Latest

Choose a tag to compare

@jmaeagle99 jmaeagle99 released this 14 Sep 23:19
7657640

Notable Changes

💥 Breaking Changes

  • Renamed and removed several experimental methods and properties in Standalone Activities APIs:
    • StartActivityOptions.StaticSummary renamed to Summary.
    • ActivityExecutionDescription.GetStaticSummaryAsync renamed to GetSummaryAsync.
    • ActivityExecution.ScheduledTime renamed to ScheduleTime.
    • Removed ActivityExecution.StateTransitionCount.
    • Removed ActivityExecutionDescription.LongPollToken.
    • Removed ActivityDescribeOptions.LongPollToken.
  • Removed the experimental SignalWithStartWorkflowOptions.RequestId. Request IDs for
    workflow-side signal-with-start are now assigned internally and are no longer user-settable.

Added

  • New options in ActivityDescribeOptions that can be used to retrieve data associated with
    activity execution, such as input and result.
  • New properties and methods in ActivityExecution and ActivityExecutionDescription:
    ExecutionTime, LastDeploymentVersion, Priority, RetryPolicy, StartDelay,
    TotalHeartbeatCount, GetLastFailureAsync, GetOutcomeFailureAsync, GetResultAsync,
    and access to raw Proto objects from the response.
  • Added operation-specific outbound workflow interceptors for Temporal System Nexus operations.
    SignalWithStartWorkflowAsync can now be intercepted before the existing
    ScheduleSystemNexusOperationAsync hook.
  • Experimental Temporal transfer type conversion now supports constructed generic models whose
    attributes reference generic converter type definitions. Model type arguments close the converter
    directly in declaration order, with matching generic arity and compatible constraints required.
  • Added PayloadValidationError.CreateException, which payload converters and codecs can use to
    report invalid Nexus operation input with structured details.
  • The temporal_activity_execution_failed and temporal_local_activity_execution_failed worker
    metrics now carry a failure_reason attribute. Each metric is now split into one time series per
    reason, which may affect existing dashboards.
  • Workflow task completions larger than the gRPC request size limit are now paginated
    automatically when the namespace supports it. Paginated workflow task completions require
    Temporal Server 1.32.0 or later.
  • A Nexus operation handler that queries a workflow now attaches a link to the queried
    workflow execution on the caller's Nexus operation event. Requires Temporal Server
    1.32.0 or later.
  • Added LocalActivityOptions.IncludeArgumentsInMarker to record a local activity's serialized
    arguments in its local activity marker, making them visible in workflow history. Defaults to
    false.

Changed

  • Standalone Activities are now generally available (GA). Standalone activities as Nexus operations
    remain experimental.
  • A non-retryable ApplicationFailureException with error type PayloadValidationError thrown by a
    payload codec or payload converter while decoding Nexus operation input is now reported as a
    non-retryable BadRequest handler exception (with the application failure as its cause) instead of
    an Internal one. This lets a data converter signal that the input itself is invalid. The handler
    exception is reported as Invalid operation input, which is distinct from the failed to decode Nexus operation input message used when decoding itself fails. Application failures of any other
    error type, and retryable PayloadValidationError failures, keep their existing behavior.

Fixed

  • Fixed workflow-side SignalWithStartWorkflowAsync to participate in outbound workflow
    interception, propagate tracing headers, and apply the target workflow serialization context.
  • Worker shutdown now drains activity completions that are still flushing their result to the
    server before finishing. Previously such a completion — typically one whose final heartbeat RPC
    was still in flight — could be permanently stranded by shutdown, so the activity's result was
    never reported and the server had to time the attempt out before retrying it.
  • Workers with a small workflow cache no longer briefly stop accepting new workflows. Sticky
    workflow-task pollers could consume every workflow-cache permit and starve the non-sticky poller,
    so the worker would stop picking up new workflows until a poll timed out (up to ~60s).
  • Nexus tasks are now timed out locally even when the server sends a request-timeout header that
    falls outside the Nexus duration grammar, such as a negative value for a task whose deadline has
    already elapsed, a sub-millisecond unit, or a multi-unit value like 1m30s. Previously such a
    header was ignored entirely, so the handler was never told the task had timed out, and a task
    left unanswered could block worker shutdown indefinitely.
  • Update-with-start calls now use the long-poll timeout instead of the normal RPC timeout, avoiding
    premature failures while waiting for an update to reach its requested stage.
  • An activity failure caused by oversized final heartbeat details is now counted in the
    temporal_activity_execution_failed metric as failure_reason="PayloadsTooLarge". Previously it
    was counted under the reason for the failure the activity itself reported, and was not counted at
    all when that failure was benign, even though a payload-limit failure was reported instead.
  • Setting PrometheusOptions.HasCounterTotalSuffix now actually appends _total to counter metric
    names in the Prometheus exporter output.
  • Workers now warn when autoscaling task polling encounters errors continuously for one minute.
    Repeated warnings use exponential backoff up to 15-minute intervals and stop after polling
    recovers.
  • Workers no longer send worker heartbeats or appear in centralized heartbeat reports before they
    begin polling.
  • Ephemeral server processes (such as those started by WorkflowEnvironment.StartLocalAsync) no
    longer leak when the server fails to start.
  • Nexus links that point at a workflow execution rather than a specific history event were serialized
    in a form the server could not parse, so they were silently dropped from the caller's Nexus
    operation event. They now use the form temporal:///namespaces/{ns}/workflows/{wid}/{rid} and
    carry the optional reason.
  • A Nexus operation backed by a workflow query now fails when the query fails or is
    rejected, rather than being retried until the operation times out.

What's Changed

SDK Core Update

Updated from temporalio/sdk-rust@78ac17e to temporalio/sdk-rust@399cb7a

New Contributors

Full Changelog: 1.18.0...1.19.0