temporalio/temporal · error
Can't find reset point for %v
Error message
Can't find reset point for %v
What it means
getResetPoint iterated all auto-reset points of the workflow execution and none had a BuildId equal to the requested buildId, so no FirstWorkflowTaskCompletedId could be resolved. This means the workflow has no auto-reset point recorded for that worker deployment version.
Source
Thrown at service/worker/batcher/activities.go:1183
})
if err != nil {
return 0, err
}
resetPoints := res.GetWorkflowExecutionInfo().GetAutoResetPoints().GetPoints()
for _, point := range resetPoints {
if point.BuildId == buildId {
if !point.Resettable {
return 0, fmt.Errorf("Reset point for %v is not resettable", buildId)
} else if point.ExpireTime != nil && point.ExpireTime.AsTime().Before(time.Now()) {
return 0, fmt.Errorf("Reset point for %v is expired", buildId)
} else if execution.RunId != point.RunId && currentRunOnly {
return 0, fmt.Errorf("Reset point for %v points to previous run and CurrentRunOnly is set", buildId)
}
execution.RunId = point.RunId
return point.FirstWorkflowTaskCompletedId, nil
}
}
return 0, fmt.Errorf("Can't find reset point for %v", buildId)
}
View on GitHub (pinned to bde624efd1)
Solutions
- Verify the BuildId exists: describe the workflow execution and inspect GetAutoResetPoints().GetPoints() for an exact match.
- Use the correct/complete BuildId string (include the full version identifier as recorded by the worker).
- If no point exists for that version, use an alternative recovery: reset by event ID/time, or terminate and restart the workflow.
- Enable/verify worker-versioning auto-reset-point recording so future builds are captured.
Example fix
// before
id, err := getResetEventIDByOptions(ctx, exec, &ResetOptions{BuildId: "my-worker@1.2"}) // not recorded
// after
resp, _ := client.DescribeWorkflowExecution(ctx, &workflowservice.DescribeWorkflowExecutionRequest{WorkflowExecution: exec})
for _, p := range resp.GetWorkflowExecutionInfo().GetAutoResetPoints().GetPoints() {
if p.GetBuildId() == "my-worker@1.2" {
id, err = getResetEventIDByOptions(ctx, exec, &ResetOptions{BuildId: p.GetBuildId()})
break
}
} Defensive patterns
Strategy: validation
Validate before calling
resp, err := client.DescribeWorkflowExecution(ctx, &workflowservice.DescribeWorkflowExecutionRequest{WorkflowExecution: exec})
if err != nil { return err }
found := false
for _, p := range resp.GetWorkflowExecutionInfo().GetAutoResetPoints().GetPoints() {
if p.GetBuildId() == buildId { found = true; break }
}
if !found {
return fmt.Errorf("build %s has no reset point on this workflow", buildId)
} Type guard
func hasResetPoint(points []*deploymentpb.ResetPoint, buildId string) bool {
for _, p := range points {
if p.GetBuildId() == buildId { return true }
}
return false
} Try / catch
if err := doReset(ctx, exec, buildId); err != nil {
if strings.Contains(err.Error(), "Can't find reset point") {
logger.Warn("no reset point for build; falling back to terminate/restart")
return fallbackRecovery(ctx, exec)
}
return err
} Prevention
- Copy BuildIds directly from DescribeWorkflowExecution output instead of typing them.
- Remember auto-reset points are bounded and can be evicted; reset soon after incidents.
- Verify worker-versioning/auto-reset recording was enabled when the workflow ran.
- Only reset workflows that actually executed a task on the target build.
When it happens
Trigger: Calling getResetEventIDByOptions with a buildId that was never recorded as an auto-reset point for this workflow execution — wrong version string, version deployed but workflow never ran a task on it, or reset points cleared/expired/overwritten by newer deployments (max points limit).
Common situations: Typo in BuildId; resetting a workflow that started after the bad deployment (so no earlier point exists); servers keeping only a bounded number of auto-reset points so older ones were evicted; versioning config not enabled when the workflow ran.
Related errors
- Reset point for %v is not resettable
- Reset point for %v is expired
- Reset point for %v points to previous run and CurrentRunOnly
- WorkflowId or WorkflowType is required in query
- only one of WorkflowId or WorkflowType can be specified in a
AI-assisted analysis of temporalio/temporal@bde624efd1 (2026-09-01).
Data as JSON: /api/errors/c3dcc1d77fd4326d.
Report an issue: GitHub.