docs(media): how to prove a relayout landed, read from both servers' tables
A scan answers 204 whether or not it found anything, so proof is the journal replayed against Jellyfin's BaseItems.Path and Plex's media_parts.file: every move has a row at its dst, no row names its src. Records the four wrong doors: no sqlite3 binary on the hosts or in either container, Jellyfin's single BaseItems table (no MediaItems), its container-side /data path prefix, and Plex's HTTPD closing on ?path= / on /search matching titles not paths.
This commit is contained in:
1 parent
54a393edab
commit
ce6b3b1d3b
1 file changed
+24
@@ -111,6 +111,30 @@ shred -u /tmp/jf.hdr
|
|||||||
|
|
||||||
`204` is acceptance; the scan then runs on the server's own schedule.
|
`204` is acceptance; the scan then runs on the server's own schedule.
|
||||||
|
|
||||||
|
### Proving the move landed
|
||||||
|
|
||||||
|
A scan answers `204` whether or not it finds anything, so proof is the journal
|
||||||
|
replayed against both servers' own tables: every `move` row has a row at its
|
||||||
|
`dst`, and **zero** rows still name its `src`. There is no `sqlite3` binary on
|
||||||
|
these hosts and none inside either container — read the DBs with the host
|
||||||
|
`python3` and `mode=ro&immutable=1`, which takes no lock while the server runs.
|
||||||
|
|
||||||
|
| | path | path column | shape |
|
||||||
|
|---|---|---|---|
|
||||||
|
| Jellyfin | `/home/dank/Containers/jellyfin/config/data/jellyfin.db` | `BaseItems.Path` | one `BaseItems` table; `Type` holds the .NET class (`…Entities.TV.Episode`). There is no `MediaItems`/`TypedItems`. |
|
||||||
|
| Plex | `/var/lib/plexmediaserver/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.db` | `media_parts.file` | join `media_parts → media_items → metadata_items`; filter `deleted_at is null` on **both** or deleted scans pollute the count. |
|
||||||
|
|
||||||
|
**Jellyfin stores container-side paths.** The share binds `/mnt/entropy → /data`
|
||||||
|
in that container, so a journal `src` of `/mnt/entropy/TVShows/…` is stored as
|
||||||
|
`/data/TVShows/…`. Plex is bound at the same path it has on the host, so its
|
||||||
|
rows match the journal verbatim.
|
||||||
|
|
||||||
|
Three doors that look right and are not: `GET /search?query=` matches metadata
|
||||||
|
titles, never file paths; `?path=` on `/library/sections/N/all` makes Plex's
|
||||||
|
HTTPD close without a single byte; and the same HTTPD drops requests that carry
|
||||||
|
no `Accept` and client-identifier header (see the scan block above for the form
|
||||||
|
that works).
|
||||||
|
|
||||||
## TV in the movie library
|
## TV in the movie library
|
||||||
|
|
||||||
A box set that arrives in the movie share stays there until someone moves it:
|
A box set that arrives in the movie share stays there until someone moves it:
|
||||||
|
|||||||
Reference in new issue
Block a user