fix: skip CountWorkflow in batch operations when --yes is set#1012
Conversation
The visibility CountWorkflowExecutions request was issued unconditionally before every batch terminate / signal / cancel / reset. The count is only used to populate the "Start batch against approximately N workflow(s)?" confirmation prompt. When --yes bypasses the prompt entirely, the count result is never read. In clusters whose visibility API is overloaded (e.g. Postgres-backed clusters with many workflows), this CountWorkflow call can time out and prevent batch jobs from being started at all, even though the batch operation itself uses the same query and would succeed. Skipping the count when --yes is set lets these batch jobs proceed unconditionally. Both batch entry points are updated: - commands.workflow.go (terminate / signal / cancel) - commands.workflow_reset.go (reset) When the count is skipped, the prompt text shown by --yes changes from "Start batch against approximately N workflow(s)? y/N" to "Start batch against workflows matching query "<query>"? y/N" so the output remains informative. Adds TestWorkflow_Terminate_BatchWorkflow_SkipsCountWhenYes which uses a gRPC unary interceptor to assert that CountWorkflowExecutionsRequest is *not* sent when --yes is passed, while StartBatchOperationRequest still is. The existing without-yes tests are unaffected. Closes temporalio#838
|
Overall: LGTM The Test The test is thorough — interceptor pattern, gRPC call counting, Missing coverage for The test only covers |
Remove gRPC interceptor from terminate test -- asserting on prompt text is sufficient to verify the count is skipped. Add reset batch test for the same --yes skip-count behavior. Assert terminated error specifically in drain check.
TestWorkflow_Delete_BatchWorkflowSuccess uses -y, which now skips the count call. Update assertion from "approximately 2 workflow(s)" to "matching query" to match the new prompt text.
…#1104) ## Summary Backports server-independent changes from `main` into `release/1.8.x`. Every commit here was verified to build and pass codegen against the release line's current dependency pins (`server v1.31.0`, `sdk v1.41.1`, `api v1.62.8`) — nothing pulls in the newer server/SDK/API that landed on `main` via #1017. Scope agreed as: bug fixes + CLI changes + CI/tooling. Dependency bumps (#1040, #1052, #1063) and server-version-dependent features are intentionally excluded. ## Included (22 commits, cherry-picked with `-x`) **CLI / bug fixes** - #1006 Fix help with value flags (addresses #1003 — `--help` with value flags like `--address 123` surfaced `pflag: help requested` as an error) - #1012 skip CountWorkflow in batch operations when `--yes` is set - #1016 Sort output of listing search attributes - #1029 Workflow delete now prompts for confirmation - #1033 Add persistence info to start-dev banner - #1047 Add `temporal schedule list-matching-times` command - #1056 Fix task-queue config set help: use real fairness weight flag names - #1059 Prefix dev server cluster ID with `dev-server-` - #1089 fix: tls is not added for profiles without tls - #1099 Clarify activity pause timeout behavior - #941 auto-generate deprecation warnings from YAML config **Tests** - #1005 Fix flakey test by disabling EC2 metadata lookup - #1020 Remove `time.Sleep()` in commands.taskqueue_test.go **CI / tooling** - #1015 pin alpine docker image to 3.23.4 - #1024 remediate missing-dependency-cooldown - #1034 Bump actions/upload-artifact from 4 to 7 - #1044 improve dependabot config - #1045 add PR template - #1054 pin and bump GitHub Actions to latest versions - #1057 use allow instead of ignore for dependency-type in dependabot config - #1080 Bump the github-actions group with 2 updates ## Excluded (rely on the new server/SDK version) #1017 (server bump v1.31.0 -> v1.32.0-157.0), #1046, #1087, #1001, #1091, #1084 ## Verification - `go build ./...` passes - all test packages compile - `make gen` reports no codegen drift - server/sdk/api pins unchanged from `release/1.8.x` ## CI endpoint fix (added) Also backports the API-key CI test endpoint change from #1087 (`us-east-1` -> `ca-central-1`) as a standalone CI-only commit. This resolves the `Request unauthorized` failure in the "Test cloud API key" steps on `release/1.8.x`. The rest of #1087 (Nexus Operation command code) is excluded as it depends on the new server version. --------- Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: Sai Asish Y <say.apm35@gmail.com> Co-authored-by: Kevin Woo <3469532+kevinawoo@users.noreply.github.com> Co-authored-by: Rodrigo Zhou <rodrigo.zhou@temporal.io> Co-authored-by: Stephan Behnke <stephanos@users.noreply.github.com> Co-authored-by: Jiechen Zhong <jiechen.zhong@temporal.io> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Co-authored-by: Kent Gruber <kent.gruber@temporal.io> Co-authored-by: picatz <14850816+picatz@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: John Votta <jpvotta@gmail.com> Co-authored-by: Nasit Sarwar Sony <nasitsony96@gmail.com> Co-authored-by: hussam-salah <156124396+hussam-salah@users.noreply.github.com> Co-authored-by: Sai Asish Y <say.apm35@gmail.com> Co-authored-by: Bitalizer <23104115+bitalizer@users.noreply.github.com> Co-authored-by: Sean Kane <spkane31@gmail.com> Co-authored-by: Jessica Laughlin <JLDLaughlin@users.noreply.github.com>
Closes #838.
Implements the design @cretz proposed in the issue thread: when
--yesbypasses the confirmation prompt, skip theCountWorkflowExecutionsrequest entirely.What was changed
SingleWorkflowOrBatchOptions.workflowExecOrBatch:CountWorkflowonly runs in the!s.Yesbranch.TemporalWorkflowResetCommand's batch path.When
--yesskips the count, the prompt text changes fromStart batch against approximately N workflow(s)? y/NtoStart batch against workflows matching query "<query>"? y/N, so the output (whichpromptYesstill prints in the auto-confirm path) stays informative.The non-
--yesinteractive flow is untouched: it still counts, still prompts, still prints the sameapproximately N workflow(s)message.Why
workflowExecOrBatch(terminate / signal / cancel) and the reset command both unconditionally callCountWorkflowExecutionsbefore starting a batch. The result is only used to fill in theapproximately N workflow(s)confirmation. When--yesis set, the prompt is skipped — but the count call still runs, and on clusters where the visibility API is timing out it fails the entire batch start. The original report is from a Postgres-backed cluster where the batch query itself works but the count times out; users can't start batch jobs they otherwise have permission to run.How was this tested
Added
TestWorkflow_Terminate_BatchWorkflow_SkipsCountWhenYesthat:CountWorkflowExecutionsRequestandStartBatchOperationRequestcalls.workflow terminate --query ... --yes.CountWorkflowcalls, 1StartBatchOperationcall, prompt text containsmatching queryand notapproximately.The interceptor pattern matches the existing
testTerminateBatchWorkflowhelper.Ran the new test plus a sample of the existing batch tests locally; they pass. (
TestWorkflow_Terminate_BatchWorkflowSuccessflakes locally on the unrelatedCompletedassertion both with and without my changes — pre-existing timing issue, not caused by this PR.)