OpenAPI elb-openapi 4.21 rebuild for sharded outfmt 7¶
Motivation¶
An OpenAPI-plane submit (submission_source: external_api, the API Reference
"Mode B — core_nt tabular + taxids" try-it) of
-outfmt 7 std staxids sscinames failed with:
ERROR: Partitioned BLAST requires outfmt 5 without extended fields,
outfmt 6, or "6 std..."; 7 is not supported for merge
Root cause: the deployed elb-openapi image was tag 4.20, pinned and built
on 2026-06-04. The three patches that make sharded outfmt 7 work —
patch_partitioned_outfmt_gate(widen ElasticBLAST'selb_config.pypartitioned-outfmt gate to allow7/7 std),- the quote-safe multi-token
-outfmtargv rebuild inblast-run-aks.sh(patch_blast_run_aks_outfmt_argv), and - the field-aware shard merge (
resolve_tabular_columnsinmerge-sharded-results.sh)
— all landed on 2026-06-10 (commits 86e2c5e and 4bd037a), after the 4.20
image was built. The docker-openapi build context still carried the 2026-06-04
copies of patch_elastic_blast.py and merge-sharded-results.sh, which contain
none of the three patches (grep counts were 0/0/0). The dashboard (terminal
sidecar) path was already correct because its image was rebuilt by CI on the
latest commit; only the separately-pinned OpenAPI plane was stale.
User-facing change¶
OpenAPI-plane sharded BLAST submits (/v1/jobs and the API Reference try-it)
now accept -outfmt 7 std staxids sscinames and produce merged tabular results
with taxid + scientific-name columns for NCBI databases that ship a taxdb (e.g.
core_nt). No dashboard-submit behaviour changes.
API / IaC diff summary¶
api/services/image_tags.py:IMAGE_TAGS["elb-openapi"]bumped4.20→4.21. 4.21 is the same upstream app code (3.7.5) rebuilt from the patched local context to pick up the gate/argv/merge patches.~/dev/elastic-blast-azure/docker-openapi/{patch_elastic_blast.py, merge-sharded-results.sh}refreshed from this repo'sterminal/copies (the build-context support files; not tracked in this repo). The committed Dockerfile already wirespython3 /tmp/patch_elastic_blast.pyatELB_REF=7a471297, whoseelb_config.pygate block matches the patch anchor verbatim, so the patch applies cleanly at build time.
Build + rollout¶
Rollout order (charter): build+push the sibling image to ACR FIRST, then move the pin.
cp terminal/patch_elastic_blast.py ~/dev/elastic-blast-azure/docker-openapi/
cp terminal/merge-sharded-results.sh ~/dev/elastic-blast-azure/docker-openapi/
az acr build -r acrelbdashboard3abp67bppe -t elb-openapi:4.21 \
-f ~/dev/elastic-blast-azure/docker-openapi/Dockerfile \
~/dev/elastic-blast-azure/docker-openapi
# then bump IMAGE_TAGS["elb-openapi"] = "4.21" and redeploy the elb-openapi pod
Validation evidence¶
git merge-base --is-ancestorconfirms the 4.20 pin (6a818b6, 2026-06-04) predates the gate patch (86e2c5e, 2026-06-10) — the staleness root cause.- Context
grepbefore refresh: gate=0, argv=0, merge=0; after refresh: 2/2/2. - ElasticBLAST
elb_config.pygate block at7a471297matches the patch anchor verbatim (so the build-time patch applies without drift). - Post-deploy: re-run the Mode B
outfmt 7 std staxidsOpenAPI submit and confirm the job no longer fails at the partitioned-outfmt gate.