Skip to content

Write store coverage MOC at end of run (dispatcher-side domain declaration) #200

Description

@espg

🤖 from Claude

Design record: docs/design/sparse_coverage.md §4 (D8/D9), tracked on #198. Blocked by #199 (needs the store-root conventions: morton_hive.json, root-object exception to the node invariant).

What

At end of run, the dispatcher writes {store_root}/coverage.moc — the store's populated-shard coverage as a MOC (mortie's compressed multi-order coverage). This is the roll-our-own replacement for consolidated metadata (disabled by default; measured +70 s/worker), answering "where does data exist?" in one GET.

How (the fast part)

No S3 walk. The dispatcher already tracks per-shard completion via the status channel poller (runner.py _async_result_poll); build the MOC from that completion list in memory (existing morton_coverage/MOC machinery — milliseconds) and PUT one small object. Spatially coherent coverage compresses well (~50k CONUS shards → few KB).

Semantics

  • Cache, not truth (D9): stamped with generated_at + source (dispatcher vs sweep); regenerable from a tree walk. The strongly-consistent delimiter-LIST walk remains ground truth — a run that crashes before writing its MOC degrades to walking, never to wrong answers.
  • Readers: GET manifest → GET MOC → moc_and against query AOI → arithmetic hive paths. Zero LISTs on the hot path (D10).

Open questions (from the design doc)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions