Skip to content

feat(seasonpass): bump mainnet image to git-52e16aa (deploy #309 tx-tracker + #306+#308)#3497

Merged
ipdae merged 1 commit into
mainfrom
yang/seasonpass-deploy-309-tracker-txn
Jun 29, 2026
Merged

feat(seasonpass): bump mainnet image to git-52e16aa (deploy #309 tx-tracker + #306+#308)#3497
ipdae merged 1 commit into
mainfrom
yang/seasonpass-deploy-309-tracker-txn

Conversation

@ipdae

@ipdae ipdae commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

What

Bumps the mainnet seasonpass.image.tag from git-887fe57 to git-52e16aa.

SeasonPass #309 (tx-tracker GQL-out-of-txn) is stacked on #308#306, so this single tag bump ships all three on top of the currently-live 887fe57:

commit change PR
485b172 raise DB pool 30 → 60 #306
887fe57 API: call cleared-stage RPC outside the DB transaction #308
52e16aa tracker: run tx-tracker GQL outside the DB transaction #309

The currently-live 887fe57 already includes #306+#308; this adds #309 on top, so the API behaviour is unchanged and only the tracker gains the fix.

Why (#309)

Found while investigating the mainnet seasonpass DB after the #308 deploy. tx_tracker.track_tx() opened a session, SELECTed up to 200 unsettled claims, then held that transaction open while it ran a per-claim headless GQL batch — sitting idle-in-transaction for 448s (observed live via pg_stat_activity) when a node was slow. It's a plain SELECT (no FOR UPDATE) so it blocked nothing and raised no alarms, but the long-lived transaction pinned the xmin horizon and blocked autovacuum on claim / user_season_pass (dead tuples in the hundreds of thousands; user_season_pass had never been autovacuumed).

#309 splits it into read → GQL (no txn) → write, with the write guarded (id + tx_id + still-STAGED/INVALID) so a settled SUCCESS/FAILURE is never clobbered by a stale GQL result.

Review

code-reviewer verdict on #309: merge — logic correct, read/write sessions independent & pool-safe, no money-path regression. The one recommended hardening (the still-unsettled status guard on the write) is included in 52e16aa.

Migrations

None coupled. The #307 partial index is already applied live; the code works with or without it. Migrations are applied manually (no init-container/Job).

Deploy

⚠️ The git-52e16aa image build was triggered by the #309 force-push and may still be in progress — confirm the image is present on Docker Hub before syncing (else ImagePullBackOff). ArgoCD 9c-external-services has no auto-sync; after merge:

kubectl -n argocd patch applications.argoproj.io 9c-external-services --type merge \
  -p '{"operation":{"initiatedBy":{"username":"admin"},"sync":{"revision":"HEAD"}}}'

Note: season-pass #309 is a stacked PR (base fix/gql-outside-db-txn); for repo hygiene merge the stack in order #306#308#309 to main afterwards.

🤖 Generated with Claude Code

…racker GQL-out-of-txn, stacked on #306+#308)

#309 is stacked on #308 -> #306, so this single tag bump ships all three on
top of the currently-live 887fe57:
  485b172  raise DB pool 30 -> 60                                  [#306]
  887fe57  API: call cleared-stage RPC outside the DB transaction  [#308]
  52e16aa  tracker: run tx-tracker GQL outside the DB transaction  [#309]

#309 fixes the same anti-pattern as #308, in the tx-tracker: track_tx() held a
transaction open across its per-claim headless GQL batch, sitting
idle-in-transaction for minutes (observed 448s live). That pinned the xmin
horizon and blocked autovacuum on claim/user_season_pass (dead tuples piling
into the hundreds of thousands). It split into read -> GQL (no txn) -> write,
with the write guarded (id + tx_id + still-unsettled status) so a settled
SUCCESS/FAILURE is never clobbered by a stale GQL result.

code-reviewer verdict on #309: merge — logic correct, session/pool safe, no
money-path regression. The status guard was the one recommended hardening and
is included here.

No migration coupling: the #307 partial index is already applied live and the
code works with or without it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ipdae ipdae merged commit 3c98369 into main Jun 29, 2026
3 checks passed
@ipdae ipdae deleted the yang/seasonpass-deploy-309-tracker-txn branch June 29, 2026 10:43
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.

1 participant