Rebuild spec: workers return probe candidates per release; a probe queue
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
16e504a8fb
commit
2d4f3f48cf
1 file changed
+18
-4
+18
-4
@@ -29,7 +29,16 @@ dropping garbage; 28 TB of compressed overview traffic. Throughput goal:
|
|||||||
into releases (`lib/release` rules) → drop garbage (random name +
|
into releases (`lib/release` rules) → drop garbage (random name +
|
||||||
dropped signature or tool) → set aside per-article random subjects and
|
dropped signature or tool) → set aside per-article random subjects and
|
||||||
obfuscated subjects (counted only; phase 2). Returns per batch: release
|
obfuscated subjects (counted only; phase 2). Returns per batch: release
|
||||||
chunks, edge fragments, counters. Holds no state beyond its lease.
|
chunks, edge fragments, probe candidates, counters. Holds no state beyond
|
||||||
|
its lease.
|
||||||
|
|
||||||
|
**Probe candidates**: per release, the articles phase 2 should read, as
|
||||||
|
(release key, kind, message-id, file in its chunk): the first article of
|
||||||
|
the first archive volume (`.part01.rar`, `.rar`, `.7z.001`), of the par2
|
||||||
|
index (smallest `.par2`), and of a lone random-named file; for a 7z set
|
||||||
|
also its last volume (the listing is in the tail). At most a few per
|
||||||
|
release (~115 M releases → ~150–250 M articles), not one per file. Per-
|
||||||
|
article and obfuscated subjects get none (they need every article's body).
|
||||||
|
|
||||||
3. **Chunk store** (bulk, append-only). One record per release per batch:
|
3. **Chunk store** (bulk, append-only). One record per release per batch:
|
||||||
its files' names, sizes and segment lists, compactly encoded (template
|
its files' names, sizes and segment lists, compactly encoded (template
|
||||||
@@ -42,16 +51,21 @@ dropping garbage; 28 TB of compressed overview traffic. Throughput goal:
|
|||||||
aggregates once per batch (one upsert per release per batch), plus a
|
aggregates once per batch (one upsert per release per batch), plus a
|
||||||
small name index for search. ~115 M rows, ~50–100 GB.
|
small name index for search. ~115 M rows, ~50–100 GB.
|
||||||
|
|
||||||
5. **Fragments**. Files crossing a range edge: kept by range and article
|
5. **Probe queue**. The candidates, in the catalog's database: one small row
|
||||||
|
each (release, kind, message-id, chunk reference), priority by the
|
||||||
|
release's state (settled first) and kind (random names before readable
|
||||||
|
ones). Phase 2 takes them from here; phase 1 only fills it.
|
||||||
|
|
||||||
|
6. **Fragments**. Files crossing a range edge: kept by range and article
|
||||||
number; merged when the neighbouring range is done, then written as a
|
number; merged when the neighbouring range is done, then written as a
|
||||||
chunk. Never staged per segment.
|
chunk. Never staged per segment.
|
||||||
|
|
||||||
6. **Settling**. A release is settled when the ranges covering its posting
|
7. **Settling**. A release is settled when the ranges covering its posting
|
||||||
span are done and no chunk arrived for a day: completeness is computed
|
span are done and no chunk arrived for a day: completeness is computed
|
||||||
then (expected vs found files and segments). Phase 2 picks its work from
|
then (expected vs found files and segments). Phase 2 picks its work from
|
||||||
settled releases.
|
settled releases.
|
||||||
|
|
||||||
7. **NZB and API**. NZB built from a release's chunks; a minimal Newznab
|
8. **NZB and API**. NZB built from a release's chunks; a minimal Newznab
|
||||||
search (names) and get. Web UI later.
|
search (names) and get. Web UI later.
|
||||||
|
|
||||||
## Not in phase 1
|
## Not in phase 1
|
||||||
|
|||||||
Reference in new issue
Block a user