Sync faces and the catalog before thumbnails, so a fresh device sees its names and collections first
Benchmarks / CPU and I/O (per commit) (push) Successful in 8m24s
Benchmarks / Frame budget (on demand) (push) Skipped
🐳 Android image / Build and push (push) Successful in 4s
Build and test / android-image (push) Successful in 4s
Build and test / Desktop (Linux) (push) Failing after 35s
🐳 Windows image / Build and push (push) Successful in 2s
Build and test / windows-image (push) Successful in 2s
Build and test / Layer separation (push) Successful in 30s
Traceability / Requirement traces (push) Failing after 48s
Build and test / Android (aarch64) (push) Failing after 0s
Build and test / Windows (x86_64, cross) (push) Failing after 0s
Benchmarks / CPU and I/O (per commit) (push) Successful in 8m24s
Benchmarks / Frame budget (on demand) (push) Skipped
🐳 Android image / Build and push (push) Successful in 4s
Build and test / android-image (push) Successful in 4s
Build and test / Desktop (Linux) (push) Failing after 35s
🐳 Windows image / Build and push (push) Successful in 2s
Build and test / windows-image (push) Successful in 2s
Build and test / Layer separation (push) Successful in 30s
Traceability / Requirement traces (push) Failing after 48s
Build and test / Android (aarch64) (push) Failing after 0s
Build and test / Windows (x86_64, cross) (push) Failing after 0s
The thumbnail stage ran first and, on a device that had just adopted its peers' shards, spent its time re-uploading hundreds of megabytes under its own client id while faces, people, collections and dates waited behind it. Faces go first — the catalog merge assigns identities to faces this device holds — then the catalog, then thumbnails. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -198,9 +198,13 @@ async fn run(
|
|||||||
// cheaper than probing, and an existing folder is not an error.
|
// cheaper than probing, and an existing folder is not an error.
|
||||||
let _ = backend.create_dir(&base).await;
|
let _ = backend.create_dir(&base).await;
|
||||||
|
|
||||||
let _ = tx.send(SyncMessage::Status("checking thumbnails…".into()));
|
// Small before large, and what the user is waiting for before what
|
||||||
sync_shards(backend, &base, thumbs_dir, scratch, &mut report).await?;
|
// fills in behind them. Faces first because the catalog merge assigns
|
||||||
|
// identities to faces this device holds, so they must be here by then;
|
||||||
|
// the catalog next for collections, people and dates; thumbnails last,
|
||||||
|
// because a fresh device's thumbnail stage is hundreds of megabytes and
|
||||||
|
// everything queued behind it — the sidebar, the timeline, the names —
|
||||||
|
// was invisible for as long as it ran.
|
||||||
let _ = tx.send(SyncMessage::Status("checking faces…".into()));
|
let _ = tx.send(SyncMessage::Status("checking faces…".into()));
|
||||||
sync_face_shards(
|
sync_face_shards(
|
||||||
backend,
|
backend,
|
||||||
@@ -216,6 +220,9 @@ async fn run(
|
|||||||
let _ = tx.send(SyncMessage::Status("checking collections…".into()));
|
let _ = tx.send(SyncMessage::Status("checking collections…".into()));
|
||||||
sync_catalog(backend, &base, catalog_path, scratch, &mut report).await?;
|
sync_catalog(backend, &base, catalog_path, scratch, &mut report).await?;
|
||||||
|
|
||||||
|
let _ = tx.send(SyncMessage::Status("checking thumbnails…".into()));
|
||||||
|
sync_shards(backend, &base, thumbs_dir, scratch, &mut report).await?;
|
||||||
|
|
||||||
// TRACES: FR-UI-8
|
// TRACES: FR-UI-8
|
||||||
// Last, and it costs one small GET plus at most one small PUT. Last because
|
// Last, and it costs one small GET plus at most one small PUT. Last because
|
||||||
// it is the only thing here that is not derived state and so the only thing
|
// it is the only thing here that is not derived state and so the only thing
|
||||||
|
|||||||
Reference in New Issue
Block a user