Retrying an interrupted CreateTag never completes the Tag
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 57/100
Research direction
Start with TagActorSnapshot in cmd/ateapi/internal/controlapi/workflow_tag.go:52-55 and trace the CreateTag retry path for a Tag left in SNAPSHOT_STORAGE_STATE_PENDING. Check the existing CreateTag, GetTag, and DeleteTag behavior, then add or run coverage for retrying after the deadline expires during snapshot copy. Done means the retry converges to a usable completed Tag, with the behavior for an already completed Tag matching the expected response.
Written by the indexing model from the issue text.
Description
What happened?
A CreateTag call whose deadline expires during the snapshot copy leaves the Tag in SNAPSHOT_STORAGE_STATE_PENDING. Retrying the same request returns AlreadyExists. The Tag stays PENDING until someone deletes it.
TagActorSnapshot documents this (cmd/ateapi/internal/controlapi/workflow_tag.go:52-55): the create is not idempotent, and the retry path is DeleteTag then CreateTag. DeleteTag followed by CreateTag does produce a COMPLETED Tag.
This causes three problems:
- Clients that retry
DeadlineExceededorUnavailablewith the same request never converge. They getAlreadyExistsfor a Tag they can't use. - A Tag left by a failed create looks the same as one still being created. Both are
PENDING, so a client can't tell whether to wait or delete. Nothing cleans up the failed one.
Expected Behavior
Retrying the same CreateTag returns the finished Tag, or AlreadyExists for a COMPLETED Tag. No PENDING Tag is left behind.
Steps to Reproduce
- Deploy the counter demo:
go run ./cmd/ate-setup deploy demo counter. - Create an actor from the
countertemplate. It startsSUSPENDED. - Call
CreateTagwithsource_actorset to that actor and a 20ms gRPC deadline. It returnsDeadlineExceeded. GetTagshows the Tag at version 2 inSNAPSHOT_STORAGE_STATE_PENDING.- Send the same
CreateTagwith no deadline. It returnsAlreadyExists: Tag ate-demo-counter/bb-s1-short-tag already exists; delete it and create it again to retry. GetTagstill showsPENDING.CreateActorwith this Tag assource_tagreturnsFailedPrecondition: source Tag is still being created or failed creation.
kubectl ate can't send a short enough deadline to hit this. A Go client with context.WithTimeout can.
- Dominant language
- Go
- Stars
- 5.9k
- Forks
- 637
- Avg merge
- 2d 1h
- Merged PRs (30d)
- 523
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from agent-substrate/substrate
-
Clean up the ko retry testsPossibly taken A pull request linked to this issue is open or already merged. Openarea/dev-infra area/reliability area/tests kind/cleanup
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
agent-substrate/substrate#3461 ·
Maintainers usually reply within 1 day
-
egress: drop the empty-provider check in providerCredentialPossibly taken @cloudonly claimed this 3 days ago. Openarea/network kind/cleanup
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
agent-substrate/substrate#3428 ·
Maintainers usually reply within 1 day
-
kubectl-ate create actor-template -f <file> fails with useless errorPossibly taken @cloudonly claimed this 5 days ago. Openarea/cli kind/bug
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
agent-substrate/substrate#3406 ·
Maintainers usually reply within 1 day
-
k8s-credential-provider manifest is missing ate-otel-config envFrom, failing OTLP metric exports to [::1]:4317 / 127.0.0.1:4317 every 60sPossibly taken @ericcurtin claimed this 5 days ago. Openarea/dev-infra area/observability area/security kind/bug
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
agent-substrate/substrate#3282 ·
Maintainers usually reply within 1 day
-
filecachegc.runPass suppresses eviction logs when FreedBytes < target and consecutiveShortfalls > 3Possibly taken @ericcurtin claimed this 4 days ago. Openarea/node area/observability area/storage kind/bug
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
agent-substrate/substrate#3281 ·
Maintainers usually reply within 1 day
All issues in agent-substrate/substrate
Similar issues
-
Fix mode unpins a reusable workflow call when the same repository is also used as a step actionOpen
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
github/gh-actions-lock#261 ·
Maintainers usually reply within 1 day
-
bug documentation
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
labmonkeys-space/nl6#974 ·
Maintainers usually reply within 1 day
-
model:sonnet phase-2-optimize runtime:claude security size:S
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
FootprintAI/Containarium#3471 ·
Maintainers usually reply within 1 day
-
[BUG] serviceenvupdater filter does not update KUBERNETES_SERVICE_HOST/PORT in init containersPossibly taken @RaphaelFakhri claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
openyurtio/openyurt#2845 ·
Maintainers usually reply within 7 days
-
fuzz.yml skips three fuzz targets, and the Action's user input describes only ~/.claudePossibly taken @predictor2718 claimed this today. Opengithub_actions P3 tests
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day