update stale media ownership language across all docs

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
This commit is contained in:
Gmer4Lfe
2026-05-22 21:35:45 -04:00
parent 29eb722057
commit 8d8a4fd637
5 changed files with 30 additions and 32 deletions
+11 -10
View File
@@ -59,7 +59,7 @@ HOST1 — unRAID-Gmer4Lfe
Hardware: Threadripper 1950X, 128GB RAM, ZFS cache pools Hardware: Threadripper 1950X, 128GB RAM, ZFS cache pools
Location: Primary site Location: Primary site
DDNS: Gmer4Lfe.com 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 HOST2 — unRAID-Jayred365
Hardware: Intel i5 10th gen, 64GB RAM 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 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 Both servers run arr instances simultaneously. arr_sync.sh keeps all databases in
different shares: 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) HOST1 runs: Radarr (Movies), Sonarr (Tv_Shows), Lidarr (Music)
HOST2 owns: Anime_Movies (his Radarr), Anime_Shows (his Sonarr) 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 When HOST2 runs HOST1's arr containers during a Tier 4 fallback, those arrs already
managing different shares is fine. When HOST2 runs HOST1's arrs during a Tier 4 fallback, know the full library — arr_sync kept them in union while both servers were online.
HOST1's Tdarr is not running (HOST1 is down) — no conflict.
### Auth Stack — Warm on Both Servers ### Auth Stack — Warm on Both Servers
+8 -11
View File
@@ -162,19 +162,16 @@ cleaned by arr_cleanup on all nodes after the next sync cycle.
## ━━━ HOST AWARENESS ━━━ ## ━━━ HOST AWARENESS ━━━
Scripts run on both servers but only operate on the shares and arrs that belong to that Scripts run on both servers via `detect_hosts()`, which aliases all `HOST*_` prefixed vars
server. `detect_hosts()` aliases all `HOST*_` prefixed vars to their unprefixed names. to their unprefixed names at runtime. No manual `HOST1`/`HOST2` comparisons exist in any script.
``` arr_sync.sh keeps all arr databases in bidirectional union — either server can download
HOST1 — source of truth for: HOST2 — source of truth for: to any share. Arr cleanup uses the union model: a file is only an orphan if neither arr
Movies (Radarr) Anime_Movies (his Radarr) on either server has it indexed. Arr scripts check the aliased URL — if empty (arr not
Tv_Shows (Sonarr) Anime_Shows (his Sonarr) configured on this host), they exit cleanly with no action.
Music (Lidarr)
```
Permissions and cleaner scripts run on both servers against their own shares. Arr cleanup Permissions and cleaner scripts run locally against each server's own shares, defined
scripts check the aliased URL — if empty (arr not configured on this host), they exit in `HOST*_MEDIA_PERMISSION_SHARES` and `HOST*_MEDIA_CLEAN_FOLDERS` in host*.conf.
cleanly with no action. No manual `HOST1`/`HOST2` comparisons exist in any script.
--- ---
+5 -5
View File
@@ -582,9 +582,9 @@ DAILY_MAINTENANCE_SCRIPTS=(
# host1.conf # host1.conf
HOST1_DAILY_SYNC_SHARES=( HOST1_DAILY_SYNC_SHARES=(
"/mnt/user/Movies" # HOST1 source of truth — push to HOST2 "/mnt/user/Movies" # both servers — arr_sync union, rsync spreads files
"/mnt/user/Tv_Shows" # HOST1 source of truth "/mnt/user/Tv_Shows" # both servers
"/mnt/user/Music" # HOST1 source of truth "/mnt/user/Music" # both servers
"/mnt/user/Kids_Movies" "/mnt/user/Kids_Movies"
"/mnt/user/Kids_Tv_Shows" "/mnt/user/Kids_Tv_Shows"
"/mnt/user/Sports" "/mnt/user/Sports"
@@ -597,8 +597,8 @@ HOST1_PERSONAL_SHARES=(
# host2.conf # host2.conf
HOST2_DAILY_SYNC_SHARES=( HOST2_DAILY_SYNC_SHARES=(
"/mnt/user/Anime_Shows" # HOST2 source of truth — push to HOST1 "/mnt/user/Anime_Shows" # both servers — arr_sync union, rsync spreads files
"/mnt/user/Anime_Movies" # HOST2 source of truth "/mnt/user/Anime_Movies" # both servers
) )
``` ```
+3 -3
View File
@@ -24,15 +24,15 @@ HOST1 — unRAID-Gmer4Lfe
Hardware: Threadripper 1950X, 128GB RAM, ZFS cache pools Hardware: Threadripper 1950X, 128GB RAM, ZFS cache pools
Location: Primary site Location: Primary site
Domain: Gmer4Lfe.com Domain: Gmer4Lfe.com
Owns: Movies, Tv_Shows, Music — source of truth Arrs: Movies, Tv_Shows, Music — union with HOST2 via arr_sync
Auth stack — source of truth Auth stack — source of truth (HOST1 owned, syncs to HOST2)
Emby — primary media server Emby — primary media server
HOST2 — unRAID-Jayred365 HOST2 — unRAID-Jayred365
Hardware: Intel i5 10th gen, 64GB RAM Hardware: Intel i5 10th gen, 64GB RAM
Location: Remote — different building, different power utility Location: Remote — different building, different power utility
Domain: Gmer4Lfe.us 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 His own Emby — for his household
``` ```
+3 -3
View File
@@ -637,9 +637,9 @@ bash rsync.sh /mnt/user/appdata-Failover/Arrs_Stack --status
# Rsync engine # Rsync engine
RSYNC_ENABLED=true RSYNC_ENABLED=true
DEFAULT_RSYNC_OPTS="-az --no-perms --no-owner --no-group --inplace" DEFAULT_RSYNC_OPTS="-az --no-perms --no-owner --no-group --inplace"
# No --delete in DEFAULT_RSYNC_OPTS — bidirectional media shares spread files only. # No --delete in DEFAULT_RSYNC_OPTS — media share rsync is additive only.
# Each server's arrs are source of truth for their content; arr cleanup scripts # arr_sync.sh keeps all arr databases in union — either server can download anything.
# handle deletions. Profiles set PROFILE_RSYNC_OPTS with --delete explicitly. # arr cleanup handles deletions (orphans only). Profiles use --delete explicitly.
BW_LIMIT=0 # KB/s, 0 = unlimited BW_LIMIT=0 # KB/s, 0 = unlimited
RETRY_COUNT=3 RETRY_COUNT=3
SLEEP=60 # seconds between retries SLEEP=60 # seconds between retries