Support CHASM Nexus operations in workflow reset reapply (#10986)

## What changed?
Foundational half of CHASM Nexus operation support in workflow reset /
replication. Brings the shared event-reapply / cherry-pick path (used by
workflow reset **and** replication conflict resolution) to handle
CHASM-backed Nexus operations, and adds the plumbing both halves need.

- `ndc/workflow_resetter.go` — `reapplyEvents` probes HSM, then falls
back to the CHASM workflow registry, using an explicit
`cherryPickOutcome` (applied / skipped / fallback).
- rest of the changes are related to plumbing of CHASM workflow registry
and enableChasmWorkflowOperations dynamic config

## Why?
Reset (and replication conflict resolution) reapply post-reset-point /
divergent-branch events to the surviving run. Without this, a
CHASM-backed Nexus operation event that must be reapplied is dropped or
mis-routed.

## How did you test it?
- [x] built
- [ ] run locally and tested manually
- [x] covered by existing tests
- [x] added new unit test(s)
- [ ] added new functional test(s)

## Potential risks
- Changes `ndc.NewEventsReapplier`'s signature. External consumer
saas-temporal calls it, so companion PR temporalio/saas-temporal
(matching branch `gokhan/nexus-reset-reapply`) updates that call site;
the crossrepo check validates them together.
This commit is contained in:
tekkaya
2026-07-15 19:58:14 +03:00
committed by GitHub
parent be7ccc2768
commit b8e9865620
11 changed files with 431 additions and 29 deletions

View File

@@ -2,6 +2,7 @@ package configs
import (
"go.temporal.io/server/chasm/lib/callback"
"go.temporal.io/server/chasm/lib/nexusoperation"
"go.temporal.io/server/common"
"go.temporal.io/server/common/dynamicconfig"
"go.temporal.io/server/common/namespace"
@@ -72,6 +73,7 @@ type Config struct {
MaxCallbacksPerExecution dynamicconfig.IntPropertyFnWithNamespaceFilter
MaxCallbacksPerUpdateID dynamicconfig.IntPropertyFnWithNamespaceFilter
EnableChasm dynamicconfig.BoolPropertyFnWithNamespaceFilter
EnableChasmNexusWorkflowOperations dynamicconfig.BoolPropertyFnWithNamespaceFilter
EnableCHASMCallbacks dynamicconfig.BoolPropertyFnWithNamespaceFilter
EnableCHASMSignalBacklinks dynamicconfig.BoolPropertyFnWithNamespaceFilter
EnableWorkflowUpdateCallbacks dynamicconfig.BoolPropertyFnWithNamespaceFilter
@@ -499,6 +501,7 @@ func NewConfig(
MaxCallbacksPerExecution: callback.MaxPerExecution.Get(dc),
MaxCallbacksPerUpdateID: dynamicconfig.MaxCallbacksPerUpdateID.Get(dc),
EnableChasm: dynamicconfig.EnableChasm.Get(dc),
EnableChasmNexusWorkflowOperations: nexusoperation.EnableChasmWorkflowOperations.Get(dc),
ChasmMaxInMemoryPureTasks: dynamicconfig.ChasmMaxInMemoryPureTasks.Get(dc),
EnableCHASMSchedulerCreation: dynamicconfig.EnableCHASMSchedulerCreation.Get(dc),