Skip to content

Add Temporal Nexus Operation Handler#2842

Open
Quinn-With-Two-Ns wants to merge 9 commits into
temporalio:masterfrom
Quinn-With-Two-Ns:temporal-nexus-operation-handler
Open

Add Temporal Nexus Operation Handler#2842
Quinn-With-Two-Ns wants to merge 9 commits into
temporalio:masterfrom
Quinn-With-Two-Ns:temporal-nexus-operation-handler

Conversation

@Quinn-With-Two-Ns
Copy link
Copy Markdown
Contributor

@Quinn-With-Two-Ns Quinn-With-Two-Ns commented Apr 14, 2026

Add TemporalOperationHandler for generic Nexus operations

Goal

Provide a new base to make it easy to expose more Temporal actions as Nexus Operations

Summary

  • Adds TemporalOperationHandler, a generic OperationHandler implementation that maps Nexus operations to Temporal workflows via a composable StartFunction
  • Adds TemporalNexusClient for starting workflows (typed and untyped) from within Nexus operation handlers
  • Supports subclassing TemporalOperationHandler to customize cancel behavior by overriding cancelWorkflowRun
  • Extracts shared workflow start logic into NexusStartWorkflowHelper, reused by both WorkflowRunOperation and the new handler

Test plan

  • GenericHandlerTypedStartWorkflowTest — typed workflow with return value
  • GenericHandlerTypedProcTest — typed void workflow
  • GenericHandlerUntypedStartWorkflowTest — untyped workflow start
  • GenericHandlerSyncResultTest — synchronous result path
  • GenericHandlerCancelTest — cancel with default and custom behavior

Note

Medium Risk
Adds new Nexus-to-Temporal dispatch APIs (start/cancel) and refactors workflow-start/link attachment logic, which could affect Nexus operation execution and cancellation paths. Behavior is guarded by new token validation and single-async-start enforcement but still touches core operation flow.

Overview
Adds an experimental TemporalOperationHandler that maps Nexus start to either a synchronous result or an async workflow-run token via a new TemporalNexusClient (typed/untyped startWorkflow overloads) and TemporalOperationResult.

Refactors workflow-start behavior into NexusStartWorkflowHelper so both the existing WorkflowRunOperationImpl and the new client share the same request construction and workflow-link attachment logic, and enforces only one async start per handler invocation.

Renames/expands operation-token handling (WorkflowRunOperationToken -> OperationToken) and updates OperationTokenUtil to support type-agnostic token loading for cancel dispatch, with updated/added tests covering sync results, typed/untyped starts, double-start errors, and cancel behavior.

Reviewed by Cursor Bugbot for commit d448f63. Bugbot is set up for automated code reviews on this repo. Configure here.

@Quinn-With-Two-Ns Quinn-With-Two-Ns marked this pull request as ready for review April 14, 2026 22:33
@Quinn-With-Two-Ns Quinn-With-Two-Ns requested a review from a team as a code owner April 14, 2026 22:33
@Quinn-With-Two-Ns Quinn-With-Two-Ns force-pushed the temporal-nexus-operation-handler branch from a33ff01 to 7e61dab Compare May 8, 2026 14:14
private final WorkflowClient client;
private final OperationContext operationContext;
private final OperationStartDetails operationStartDetails;
private boolean asyncOperationStarted;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Forgive my lack of Java concurrency know how, but could this flag cause a race if you call startWorkflow concurrently? Both attempt to start, race past the check and successfully start a workflow.

@Quinn-With-Two-Ns Quinn-With-Two-Ns force-pushed the temporal-nexus-operation-handler branch from 7e61dab to f2c65fc Compare May 15, 2026 23:04
Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default mode and found 1 potential issue.

There are 2 total unresolved issues (including 1 from previous review).

Fix All in Cursor

Reviewed by Cursor Bugbot for commit f2c65fc. Configure here.

Comment thread temporal-sdk/src/main/java/io/temporal/nexus/TemporalNexusClientImpl.java Outdated
@bergundy bergundy removed their request for review May 20, 2026 19:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants