Skip to content

Reuse cached scores on nodes with another st_dev - #35

Draft
DimaMolod wants to merge 2 commits into
mainfrom
fix/cache-ignore-device-number
Draft

DimaMolod wants to merge 2 commits into
mainfrom
fix/cache-ignore-device-number

Conversation

@DimaMolod

@DimaMolod DimaMolod commented Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator

Stat-mode cache validation included st_dev in each file fingerprint. On a shared filesystem the same file can have a different st_dev on each node (BeeGFS on the EMBL cluster: 65 on one node, 59 on another). So alphajudge --recursive on one node recomputed every table certified on another, and redrew every PAE plot, although size, mtime, ctime and inode matched.

Seen in a 1,900-fold AlphaPulldown run:

  • 890 of 1,913 manifests differed only in st_dev;
  • the summary report spent days rescoring valid tables;
  • once the tables were re-certified, it still redrew ~10,000 plots.

Change

  • file_fingerprint() no longer records device. It covers both inputs and PAE plots. Size, mtime_ns, ctime_ns and inode remain, so edits and replaced files are still detected.
  • Regression test: score a run with plots, report another st_dev for every file, and check that neither the table nor any plot is redone. It fails on main.
  • CHANGELOG entry under Unreleased.

Manifests written by 1.4.4 are recomputed once after upgrading, as after any software change.

Tests: full suite 183 passed, 6 skipped. After the plot test was added, test_run_integrity.py passes in full (59).

🤖 Generated with Claude Code

DimaMolod and others added 2 commits October 20, 2026 10:17
file_fingerprint() put the input files' device number into the stat-mode
cache identity. A shared filesystem (BeeGFS on the EMBL cluster) reports a
different st_dev for the same file on each node, so a recursive run on one
node treated every interfaces.csv certified on another as stale and
recomputed it, although size, mtime, ctime and inode were identical. In a
1,900-fold AlphaPulldown campaign, 890 of 1,913 manifests differed only in
st_dev (65 vs 59), and the summary report spent days rescoring valid tables.

Size, mtime_ns, ctime_ns and inode stay in the fingerprint, so edits and
replaced files are still detected (the replaced-inputs test is unchanged).
Manifests written by 1.4.4 are recomputed once, as after any software
change, because the software identity hashes the package source.

The new regression test scores a run, then reports another st_dev for
every file and checks that the table is reused; it fails on main.
Full suite: 183 passed, 6 skipped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PAE plot fingerprints use the same file_fingerprint(), so a recursive run
on another node also redrew every plot it found: the AlphaPulldown
campaign's summary report redrew ~10,000 plots before the device number was
dropped. The regression test now draws plots on the first run and fails if
the second run, with another st_dev, reloads a model to redraw one; it
fails on main. The CHANGELOG entry mentions plots.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
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