Repository navigation
Promotion 2026-10-20 prod (#8420) - #8428
Merged
Merged
Conversation
The `stitched` attribute of a canned HCA bundle is a set of the UUIDs of the entities that were stitched into that bundle. The canned TDR HCA bundle 4426adc5 also listed, for each stitched file, the UUID of that file's manifest entry. The plugin only ever adds an entity's own UUID, so the canner cannot have produced those six surplus entries. They were inert, because `Bundle.not_stitched` matches the set against each entity's `document_id`, which a manifest entry UUID never equals. The surplus went unnoticed because `_test_fetch_bundle` compared every other attribute of a canned bundle against that of the emulated one, but not `stitched`. It now does. The canned DSS bundles carry the same surplus, tracked in #8423. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The comment stated that the manifest and the metadata of a bundle are both sorted by entity UUID. The assertions below it compare dictionaries, which are equal regardless of the order of their entries, so nothing verified that claim. The claim was inaccurate, too. The entries are grouped by entity type and only sorted by UUID within such a group. The order of the groups is that of a set's iteration. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
A plugin groups those entries by entity type, in the iteration order of a set, which varies with Python's hash seed. Canning one bundle twice could therefore yield two files that differ only in the order of their entries. The canner now sorts both by entity reference. The entries of the canned TDR HCA bundles are reordered accordingly. They are otherwise unchanged, and so are the other attributes of those bundles. Only the canned file is normalized. The order of the entries of a bundle in memory still varies between processes. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The canned bundles of `test_subgraph_stitching` formed a chain, so the plugin retrieved them one at a time, in the order the chain dictated. The order of the merged links only varies when one batch holds more than one bundle, a shape that fixture could not produce. The root bundle now consumes a second file, produced by a new bundle whose own input is a cell suspension rather than a file. That bundle is therefore self-contained, and the traversal retrieves it together with the first upstream bundle, in one batch. A batch is a set, whose iteration order varies between processes, so this test now fails in roughly half of all runs, until the commit that merges the links in a deterministic order. The new bundle, its process and the file it produces are synthetic. All other entities they reference already exist in the canned tables. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The stitched bundles of one batch are the elements of a set, so the order in which the plugin emits them, and with it the order of the merged links, varies between processes. The preceding commit made the fixture produce such a batch, but a single run of the test still covers only whichever order that process happens to produce. The new test merges the links of the stitched bundles in every permutation and expects the result of the canned bundle each time. It fails until the next commit, which merges them in a deterministic order. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The TDR HCA plugin merged the links in the order in which it retrieved the stitched bundles. That is the iteration order of a set and differs between indexer invocations, so every partition of a stitched bundle could produce a links replica with a different content hash. In prod, one bundle has 101 replicas that differ only in the order of their links. The links of the root bundle now come first, followed by those of the other bundles in the order of their UUID. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A test used to drop the tables it had created, so that the next test of the class could create them again in the same emulator. Dropping them grew more expensive the longer that emulator had been in use, from 4.7s in the first test of a class to 11.6s in the fifth, and dominated the run time of both affected test classes. A test now gets an emulator of its own and discards it afterwards. Launching one costs 0.3s and makes dropping the tables unnecessary. Running test_tdr and test_anvil together takes 59s instead of 142s, for the same 29 tests. Replacing the nineteen table deletions with a single deletion of the dataset was tried first. That deletion degrades just like the ones it replaces, so it saved only 12%. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
8 tasks done
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## prod #8428 +/- ##
=======================================
Coverage 84.99% 85.00%
=======================================
Files 170 170
Lines 26068 26085 +17
=======================================
+ Hits 22157 22174 +17
Misses 3911 3911 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
hannes-ucsc
approved these changes
Oct 23, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Linked issue: #8420
Checklist
Author
A01PR is assigned to the authorA02Status of PR is In progressA03Target branch isprodA04Name of PR branch matchespromotions/yyyy-mm-dd-prodA05PR is linked to the promotion issue it resolvesA06Status of linked issue is In progressA07PR description links to linked issueA08Title of linked issue matchesPromotion yyyy-mm-ddA09PR title starts with title of linked issue followed byprodA10PR title references the linked issueA11Propagated theupgrade,API,deploy:shared,deploy:gitlab,deploy:runner,backup:gitlab,reindex:partial,reindex:prod,mirror:partialandmirror:prodlabels and associated notes from the PRs included in this promotion or none of the promoted PRs include any of these labelsAuthor (reindex)
C01This PR is labeledreindex:prodor the changes introduced by it will not require reindexing ofprodC02This PR is labeledreindex:partialand its description documents the specific reindexing procedure forprodor requires a full reindex or is not labeledreindex:prodAuthor (mirror)
D01This PR is labeledmirror:prodor the changes introduced by it will not require mirroring ofprodD02This PR is labeledmirror:partialand its description documents the specific mirroring procedure forprodor requires a full mirroring or is not labeledmirror:prodAuthor (upgrading deployments)
F01This PR is labeledupgradeor does not require upgrading deploymentsF02This PR is labeleddeploy:sharedor does not modifydocker_images.json, and does not require deploying thesharedcomponent for any other reasonF03This PR is labeleddeploy:gitlabor does not require deploying thegitlabcomponentF04This PR is labeleddeploy:runneror does not require deploying therunnerimageAuthor (before every review)
H01PR branch is up to date (if not, mergeprodinto PR branch to integrate upstream changes)H02PR is not a draftH03PR is awaiting requested review from system administratorH04Status of PR is Review requestedH05PR is assigned to only the system administrator and the authorSystem administrator (after approval)
K01Actually approved the PRK02Labeled PR asno sandboxK03N reviewslabel is accurateK04Status of PR is ApprovedK05PR is assigned to only the operator and the authorOperator
L01Pushed PR branch to GitHubOperator (deploy
.sharedand.gitlabcomponents)M01Ran_select prod.shared && CI_COMMIT_REF_NAME=prod make -C terraform/shared apply_keep_unusedor this PR is not labeleddeploy:sharedM02Ran_select prod.gitlab && python scripts/create_gitlab_snapshot.py --no-restart(see operator manual for details) or this PR is not labeledbackup:gitlabM03Ran_select prod.gitlab && CI_COMMIT_REF_NAME=prod make -C terraform/gitlab apply(an error from _login_docker_gitlab is benign if the instance was stopped for backup) or this PR is not labeleddeploy:gitlabM04Checked the items in the next section or this PR is labeleddeploy:gitlabM05PR is assigned to only the system administrator and the author or this PR is not labeleddeploy:gitlabSystem administrator (post-deploy of
.gitlabcomponent)N01Background migrations forprod.gitlabare complete or this PR is not labeleddeploy:gitlabN02PR is assigned to only the operator and the authorOperator (deploy runner image)
P01Ran_select prod.gitlab && make -C terraform/gitlab/runneror this PR is not labeleddeploy:runnerOperator (merge the branch)
R01All status checks passed and the PR is mergeableR02The title of the merge commit starts with the title of this PRR03Added PR # reference to merge commit titleR04Collected commit title tags in merge commit title but excluded anyptagsR05Pushed merge commit to GitHubR06Status of PR is Merged stableOperator (main build)
S01Pushed merge commit to GitLabprodS02Build passes on GitLabprodS03Reviewed build logs for anomalies on GitLabprodS04Applied upgrade instructions from UPGRADING.rst toprodor this PR is not labeledupgrade, or upgrade instructions do not apply toprodS05Ran_select prod.shared && make -C terraform/shared applyor this PR is not labeleddeploy:sharedS06Deleted PR branch from GitHubS07PR is assigned to only the operatorS08Status of linked issue is StableS09Status of promoted1 PRs is Merged stableS10Status of promoted1 issues is Stable1 Promoted issues and PRs are referenced in the titles of the commits
that the promotion branch introduces to the stable branch. Prior to the
promotion, the status of promoted issues (PRs) is Lower (Merged lower).
Promoted PRs in status Done do not need to be moved.
Operator (reindex)
T01Inprod, deleted the catalogs specified in the notes or this PR is missing either thereindex:partialor thereindex:prodlabel, or bothT02Inprod, deindexed the sources sepcified in the notes or this PR is missing either thereindex:partialor thereindex:prodlabel, or bothT03Inprod, indexed the sources specified in the notes or this PR is missing either thereindex:partialor thereindex:prodlabel, or bothT04Inprod, indexed the catalogs specified in the notes or this PR is missing either thereindex:partialor thereindex:prodlabel, or bothT05Started full reindex inprodor this PR is not labeledreindex:prodor it is labeled reindex:partialT06Checked for, triaged and possibly requeued messages in both fail queues inprodor this PR is not labeledreindex:prodor it is labeled reindex:partialT07Emptied fail queues inprodor this PR is not labeledreindex:prodor it is labeled reindex:partialT08Restarted the Data Browser pipeline for the ucsc/hca/prod branch on GitLab inprod, and it succeeded or this PR is not labeledreindex:prodT09Restarted the Data Browser pipeline for the ucsc/lungmap/prod branch on GitLab inprod, and it succeeded or this PR is not labeledreindex:prodT10Restarteddeploy_browserjob in the GitLab pipeline for this PR inprod, and it succeeded or this PR is not labeledreindex:prodOperator (mirroring)
U01Started mirroring inprodor this PR is not labelledmirror:prodU02Checked for, triaged and possibly requeued messages in mirror fail queue inprodor this PR is not labelledmirror:prodU03Emptied mirror fail queue inprodor this PR is not labelledmirror:prodOperator
V01PR is assigned to only the system administratorSystem administrator
W01Removed unused image tags from pycharm image on DockerHub or this promotion does not alter references to that imageW02Removed unused image tags from bigquery_emulator image on DockerHub or this promotion does not alter references to that imageW03PR is assigned to no oneShorthand for review comments
Lline is too longWline wrapping is wrongQbad quotesFother formatting problem