Measured on 2026-10-15: the feed list and item lists went out uncompressed at over 100 KB; ipx read 2.6 GB of feed bodies a day and the directory 3.9 GB. - ipx-web compresses with zstd or gzip, leaving out /api/events, which a compressor would hold back, and /media (#239). - A body identical to the last one (SHA-256 in feeds.body_hash) is taken as a 304, unless something is missing a read would fill or the check is forced; and a feed without a schedule of its own whose body has been the same waits a twelfth of that, up to four hours, beside the failure backoff (#242). 35 Patreon show feeds sent ~300 KB each hourly, about 250 MB a day. - The directory checks each feed every twelve hours, not six (#243). - reqwest accepts brotli and zstd too (#244). #240 (cache the feed list's counts) is left open: at production's size on the test Postgres that count takes 12 ms and All Subscriptions 32 ms, against 366 and 300 ms in production, so the cause is production's database, not the query (#241). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -60,7 +60,10 @@ and the files, and no page.
|
||||
## A scan
|
||||
|
||||
1. Skip the feed unless `last_checked + max(schedule, ttl)` has passed (`--force` ignores this).
|
||||
2. Conditional GET with the stored `ETag` / `Last-Modified`. `304` ends it there.
|
||||
Without a schedule of its own, a feed whose body has been the same for a while waits longer:
|
||||
a twelfth of how long it has been the same, up to four hours (#242).
|
||||
2. Conditional GET with the stored `ETag` / `Last-Modified`. `304` ends it there, and so does a
|
||||
body identical to the last one (`body_hash`), from a server that ignores the validators.
|
||||
3. Sniff the body: RSS, then Atom, then OPML. An OPML is a live subscription — its feeds are
|
||||
re-derived into the database each scan, never written to config.toml. A Patreon creator link
|
||||
(a token, no `show=`) with more than one show is treated the same way, before any fetch: its
|
||||
@@ -81,7 +84,8 @@ and the files, and no page.
|
||||
|
||||
```
|
||||
feeds id, url, title, image, category, description, etag, last_modified,
|
||||
last_checked, ttl_mins, last_error, orphaned, group_id, managed
|
||||
last_checked, ttl_mins, last_error, orphaned, group_id, managed,
|
||||
body_hash, same_since
|
||||
entries feed_id, guid, title, link, published, description, first_seen,
|
||||
image, duration, episode, season PK (feed_id, guid)
|
||||
enclosures id, feed_id, guid, url UNIQUE, mime, length, path, state,
|
||||
|
||||
@@ -52,7 +52,10 @@ art_cache_mb = 500 # artwork kept on disk. 0 = none
|
||||
database as described above; `download_dir`, `socket` and `organize` stay in config.toml.
|
||||
|
||||
* **`schedule`** — how often feeds are re-checked. A feed's own `<ttl>` still wins when it asks to
|
||||
be polled *less* often, and a per-feed `schedule` overrides both. A feed that keeps failing
|
||||
be polled *less* often, and a per-feed `schedule` overrides both. Without a schedule of its own,
|
||||
a feed that sends the same body check after check (Patreon, Substack, which ignore "not
|
||||
modified") is checked less often the longer it stays the same, up to every four hours, and is
|
||||
back on schedule once it changes. A feed that keeps failing
|
||||
waits as long as it has been failing before the next try, up to a day, and is back on schedule
|
||||
after its first success. A moment's failure to look its host up does not count: the network, not
|
||||
the feed, failed, and it is tried again in ten minutes. Admin-only from the UI.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
`ipx-directory` is a catalogue of public podcasts and blogs that ipx servers share (#204). An ipx
|
||||
server sends it the public feeds its people subscribe to, and how many of them do. The directory
|
||||
fetches each feed's title, artwork, category, description and latest twenty items every six hours,
|
||||
fetches each feed's title, artwork, category, description and latest twenty items every twelve hours,
|
||||
and any server holding a token can browse it. It never downloads a file, and it never stores
|
||||
one's address: every ipx server still fetches its own feeds.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user