Say the benchmark's second open no longer pays the backfill

benchmarks.md and catalog_open.rs both said schema::backfill runs on
every Catalog::open. Since ffdd640 it runs on the first open of a path
in a process and is skipped while the stamp matches, so in dr-bench
catalog_open_ms still includes it and catalog_open_warm_ms, the second
open in the same process, no longer does. That is what a library
reopened in one session costs, and both now say which figure is which.
The comment keeps its line count, so no tag below it moves.
This commit is contained in:
2026-09-26 14:58:20 -04:00
parent d2b99bb8c1
commit 1b8d0e740f
2 changed files with 10 additions and 5 deletions
+7 -2
View File
@@ -58,8 +58,13 @@ Two of those rows carry a qualifier, and the qualifiers are the point.
**NFR-P1 — catalog open under 2 s.** The measured span is the four things the
library view cannot paint without: `Catalog::open` (which connects, migrates and
**backfills**, and the backfill is three passes over the images table on every
open), `count`, the first 400-row `window`, and the monthly `timeline`. Tagged
**backfills**, and the backfill is passes over the whole images table), `count`,
the first 400-row `window`, and the monthly `timeline`. Since 0.17.0 the
backfill runs on the first open of a catalog in a process and is skipped by
later ones while nothing has changed ([catalog.md §2](catalog.md)), so
`catalog_open_ms` includes it and `catalog_open_warm_ms`, the second open in
the same process, does not — which is what a library reopened in the same
session costs. Tagged
`TRACES: NFR-P1` in [`tools/bench/src/catalog_open.rs`](../../tools/bench/src/catalog_open.rs),
because a build that breaks it fails this gate.
+3 -3
View File
@@ -14,9 +14,9 @@
//! without:
//!
//! 1. [`Catalog::open`] — connect, migrate if needed, and **backfill**. The
//! backfill is the interesting one: `schema::backfill` runs on every open
//! and is three passes over the images table, so it is O(library) work on a
//! path whose budget is stated in absolute seconds.
//! backfill is the interesting one: O(library) passes over the images table
//! on a path whose budget is in absolute seconds. Since 0.17.0 it runs on the
//! first open in a process and is skipped while nothing changed (`backfilled`).
//! 2. [`Catalog::count`] — the total, which is what sizes the scrollbar.
//! 3. [`Catalog::window`] — the first screenful of rows.
//! 4. [`Catalog::timeline`] — the scrubber's buckets, drawn beside the grid