Skip to content

Conversation

@jdoucett
Copy link
Contributor

Summary

  • ship_object()'s htar/htar_large create step no longer treats a nonzero exit code as automatically fatal. On rc != 0 it checks via hsi ls whether the tar (+ .idx) actually landed on Fortress, and if so falls through to the existing round-trip retrieve + per-file MD5 verify before trusting it — only raising if that verification also fails. A genuinely missing tar still raises exactly as before.
  • Full (untruncated) create stdout is now written to a per-object debug log ({stem}_{ts}.htar_create.log) instead of only a 4000-char tail in the exception, so a real future failure is diagnosable without reproducing it.
  • Motivated by Negishi job 40527505 (htar rc=70 under 14 concurrent archive jobs hitting Fortress, even though stdout ended "HTAR SUCCESSFUL" and the tar was confirmed fine) and a related report of htar own /tmp/HTAR_CF_CHK checksum artifact getting swept into a shard tar and tripping the same false abort.

Test plan

  • New tests/test_ship_object_htar_rc.py: rc != 0 + tar confirmed present recovers (round-trip actually runs against real copied bytes); rc != 0 + tar genuinely missing still raises; rc = 0 baseline unaffected.
  • Full suite green: python3 -m pytest tests/ — 292/292 passed.

Generated with Claude Code

…bject

HPSS can return a nonzero create exit code even though the tar landed fine
(observed on Negishi job 40527505: htar rc=70 under 14 concurrent archive
jobs, stdout ended "HTAR SUCCESSFUL"; also reported for htar's own
/tmp/HTAR_CF_CHK checksum artifact getting swept into a shard's tar).
ship_object no longer treats rc != 0 as automatically fatal: it now checks
via `hsi ls` whether the tar (+ .idx) actually landed, and if so falls
through to the existing round-trip retrieve + per-file MD5 verify before
trusting it -- only raising if that verification also fails. Genuinely
missing tars still raise exactly as before. Full (untruncated) create
stdout is now written to a per-object debug log instead of only a
4000-char tail in the exception, so a real future failure is diagnosable
without reproducing it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@jdoucett Jarrod S Doucette (jdoucett) deleted the claude/pensive-hodgkin-14fff6 branch July 12, 2026 19:03
Jarrod S Doucette (jdoucett) added a commit that referenced this pull request Jul 12, 2026
…t size

Indexed htar -L silently drops members whose relpath is >= 250 chars
(rc=70, "name too long for tar archive- file omitted") - reproduced live
on Negishi and the root cause of X0A_Task4_Pendleton_Transcriptomics
repeatedly failing on the same overlong Novogene GSEA/KEGG path. htar_large
has no such ceiling (confirmed live with a 431-char relpath), so
choose_transport now also routes on arcname length (HTAR_ARCNAME_LEN_LIMIT
= 240), not just size.

As defense in depth, ship_object scans create stdout for htar's/tar's own
unambiguous member-omission messages and fails fast with every dropped
file named, instead of falling through to the rc=70-tolerant path (PR #28)
or waiting on the round-trip verify to surface a bare FileNotFoundError.
Generalized beyond the name-too-long case after live-testing showed two
more silent-drop modes: htar's "Not readable" skip, and - the one case rc
gives zero signal for, confirmed rc=0 on Negishi - tar's own "Cannot open"
error under htar_large, whose exit code reflects hsi put, not the tar
process that actually failed. Checked for a native htar "abort on skip"
setting (no man page; pulled the full -H option list from the binary) and
a structural exceptions-list option (-H exfile=) - neither exists/works,
confirmed by live testing rather than assumed.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Sign in to join this conversation on GitHub.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant