From 8d8a4fd637f32bfe4413a07df997bda27ff07e34 Mon Sep 17 00:00:00 2001 From: Gmer4Lfe Date: Fri, 22 May 2026 21:35:45 -0400 Subject: [PATCH] update stale media ownership language across all docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit arr_sync.sh bidirectional union replaced the old split-ownership model. Old: HOST1 owns Movies/TV/Music, HOST2 owns Anime — each arr manages different shares to avoid conflicts. New: arr_sync.sh keeps all arr databases in union. Either server can download to any share at any time. The union is the source of truth. Auth stack references left intact — HOST1 still owns auth config (one-way sync to HOST2). Only media library ownership language updated. Files changed: README.md — server block + share annotations Fallback/README-Fallback.md — role line + Split Source of Truth section Orchestrators/README-Orchestrators — daily sync share comments Rsync/Manual-Rsync.md — DEFAULT_RSYNC_OPTS comment block Media/README-Media.md — HOST AWARENESS section --- Fallback/README-Fallback.md | 21 +++++++++++---------- Media/README-Media.md | 19 ++++++++----------- Orchestrators/README-Orchestrators.md | 10 +++++----- README.md | 6 +++--- Rsync/Manual-Rsync.md | 6 +++--- 5 files changed, 30 insertions(+), 32 deletions(-) diff --git a/Fallback/README-Fallback.md b/Fallback/README-Fallback.md index 36cb19a..3f5949e 100644 --- a/Fallback/README-Fallback.md +++ b/Fallback/README-Fallback.md @@ -59,7 +59,7 @@ HOST1 — unRAID-Gmer4Lfe Hardware: Threadripper 1950X, 128GB RAM, ZFS cache pools Location: Primary site DDNS: Gmer4Lfe.com - Role: Primary — full service stack + source of truth for Movies/Shows/Music + Role: Primary — full service stack, arr_sync union for all media shares HOST2 — unRAID-Jayred365 Hardware: Intel i5 10th gen, 64GB RAM @@ -81,21 +81,22 @@ Container names "Emby" on HOST2 must be the container HOST2 starts for HOST1 Network names Docker custom networks must match for NPM routing to work ``` -### Split Source of Truth — No Conflicts +### Union Library — arr_sync.sh Is the Source of Truth -Both servers run arr instances simultaneously with zero conflict — they manage completely -different shares: +Both servers run arr instances simultaneously. arr_sync.sh keeps all databases in +bidirectional union before every rsync cycle — either server can download anything +and it propagates to the other: ``` -HOST1 owns: Movies (Radarr), Tv_Shows (Sonarr), Music (Lidarr) -HOST2 owns: Anime_Movies (his Radarr), Anime_Shows (his Sonarr) +HOST1 runs: Radarr (Movies), Sonarr (Tv_Shows), Lidarr (Music) +HOST2 runs: Radarr (Anime_Movies), Sonarr (Anime_Shows) -Each server mirrors the other's shares continuously via rsync. +All arr databases merged via arr_sync. rsync spreads files additively. +Either server downloads to any share — the other catches up on the next cycle. ``` -The rule: never run two arr instances against the same share simultaneously. Different arrs -managing different shares is fine. When HOST2 runs HOST1's arrs during a Tier 4 fallback, -HOST1's Tdarr is not running (HOST1 is down) — no conflict. +When HOST2 runs HOST1's arr containers during a Tier 4 fallback, those arrs already +know the full library — arr_sync kept them in union while both servers were online. ### Auth Stack — Warm on Both Servers diff --git a/Media/README-Media.md b/Media/README-Media.md index 3143245..3740da6 100644 --- a/Media/README-Media.md +++ b/Media/README-Media.md @@ -162,19 +162,16 @@ cleaned by arr_cleanup on all nodes after the next sync cycle. ## ━━━ HOST AWARENESS ━━━ -Scripts run on both servers but only operate on the shares and arrs that belong to that -server. `detect_hosts()` aliases all `HOST*_` prefixed vars to their unprefixed names. +Scripts run on both servers via `detect_hosts()`, which aliases all `HOST*_` prefixed vars +to their unprefixed names at runtime. No manual `HOST1`/`HOST2` comparisons exist in any script. -``` -HOST1 — source of truth for: HOST2 — source of truth for: - Movies (Radarr) Anime_Movies (his Radarr) - Tv_Shows (Sonarr) Anime_Shows (his Sonarr) - Music (Lidarr) -``` +arr_sync.sh keeps all arr databases in bidirectional union — either server can download +to any share. Arr cleanup uses the union model: a file is only an orphan if neither arr +on either server has it indexed. Arr scripts check the aliased URL — if empty (arr not +configured on this host), they exit cleanly with no action. -Permissions and cleaner scripts run on both servers against their own shares. Arr cleanup -scripts check the aliased URL — if empty (arr not configured on this host), they exit -cleanly with no action. No manual `HOST1`/`HOST2` comparisons exist in any script. +Permissions and cleaner scripts run locally against each server's own shares, defined +in `HOST*_MEDIA_PERMISSION_SHARES` and `HOST*_MEDIA_CLEAN_FOLDERS` in host*.conf. --- diff --git a/Orchestrators/README-Orchestrators.md b/Orchestrators/README-Orchestrators.md index 433499b..fbc36d9 100644 --- a/Orchestrators/README-Orchestrators.md +++ b/Orchestrators/README-Orchestrators.md @@ -582,9 +582,9 @@ DAILY_MAINTENANCE_SCRIPTS=( # host1.conf HOST1_DAILY_SYNC_SHARES=( - "/mnt/user/Movies" # HOST1 source of truth — push to HOST2 - "/mnt/user/Tv_Shows" # HOST1 source of truth - "/mnt/user/Music" # HOST1 source of truth + "/mnt/user/Movies" # both servers — arr_sync union, rsync spreads files + "/mnt/user/Tv_Shows" # both servers + "/mnt/user/Music" # both servers "/mnt/user/Kids_Movies" "/mnt/user/Kids_Tv_Shows" "/mnt/user/Sports" @@ -597,8 +597,8 @@ HOST1_PERSONAL_SHARES=( # host2.conf HOST2_DAILY_SYNC_SHARES=( - "/mnt/user/Anime_Shows" # HOST2 source of truth — push to HOST1 - "/mnt/user/Anime_Movies" # HOST2 source of truth + "/mnt/user/Anime_Shows" # both servers — arr_sync union, rsync spreads files + "/mnt/user/Anime_Movies" # both servers ) ``` diff --git a/README.md b/README.md index 1ef7b73..a6261e6 100644 --- a/README.md +++ b/README.md @@ -24,15 +24,15 @@ HOST1 — unRAID-Gmer4Lfe Hardware: Threadripper 1950X, 128GB RAM, ZFS cache pools Location: Primary site Domain: Gmer4Lfe.com - Owns: Movies, Tv_Shows, Music — source of truth - Auth stack — source of truth + Arrs: Movies, Tv_Shows, Music — union with HOST2 via arr_sync + Auth stack — source of truth (HOST1 owned, syncs to HOST2) Emby — primary media server HOST2 — unRAID-Jayred365 Hardware: Intel i5 10th gen, 64GB RAM Location: Remote — different building, different power utility Domain: Gmer4Lfe.us - Owns: Anime_Shows, Anime_Movies — source of truth + Arrs: Anime_Shows, Anime_Movies — union with HOST1 via arr_sync His own Emby — for his household ``` diff --git a/Rsync/Manual-Rsync.md b/Rsync/Manual-Rsync.md index b6f5bbc..fe55676 100644 --- a/Rsync/Manual-Rsync.md +++ b/Rsync/Manual-Rsync.md @@ -637,9 +637,9 @@ bash rsync.sh /mnt/user/appdata-Failover/Arrs_Stack --status # Rsync engine RSYNC_ENABLED=true DEFAULT_RSYNC_OPTS="-az --no-perms --no-owner --no-group --inplace" -# No --delete in DEFAULT_RSYNC_OPTS — bidirectional media shares spread files only. -# Each server's arrs are source of truth for their content; arr cleanup scripts -# handle deletions. Profiles set PROFILE_RSYNC_OPTS with --delete explicitly. +# No --delete in DEFAULT_RSYNC_OPTS — media share rsync is additive only. +# arr_sync.sh keeps all arr databases in union — either server can download anything. +# arr cleanup handles deletions (orphans only). Profiles use --delete explicitly. BW_LIMIT=0 # KB/s, 0 = unlimited RETRY_COUNT=3 SLEEP=60 # seconds between retries