diff --git a/conductor/archive/fix_litefs_config_20260208/index.md b/conductor/archive/fix_litefs_config_20260208/index.md new file mode 100644 index 0000000..44bc447 --- /dev/null +++ b/conductor/archive/fix_litefs_config_20260208/index.md @@ -0,0 +1,5 @@ +# Track fix_litefs_config_20260208 Context + +- [Specification](./spec.md) +- [Implementation Plan](./plan.md) +- [Metadata](./metadata.json) diff --git a/conductor/archive/fix_litefs_config_20260208/metadata.json b/conductor/archive/fix_litefs_config_20260208/metadata.json new file mode 100644 index 0000000..9132145 --- /dev/null +++ b/conductor/archive/fix_litefs_config_20260208/metadata.json @@ -0,0 +1,8 @@ +{ + "track_id": "fix_litefs_config_20260208", + "type": "feature", + "status": "new", + "created_at": "2026-02-08T18:00:00Z", + "updated_at": "2026-02-08T18:00:00Z", + "description": "Fix LiteFS configuration to use 'exec' for Navidrome and ensure it only runs on the Primary node. Also fix DB path configuration." +} diff --git a/conductor/archive/fix_litefs_config_20260208/plan.md b/conductor/archive/fix_litefs_config_20260208/plan.md new file mode 100644 index 0000000..550874b --- /dev/null +++ b/conductor/archive/fix_litefs_config_20260208/plan.md @@ -0,0 +1,22 @@ +# Plan: Fix LiteFS Configuration and Process Management (`fix_litefs_config`) + +## Phase 1: Configuration and Image Structure [ ] +- [x] Task: Update `litefs.yml` to include the `exec` block (396dfeb) +- [x] Task: Update `Dockerfile` to use LiteFS as the supervisor (`ENTRYPOINT ["litefs", "mount"]`) (ef91b8e) +- [x] Task: Update `navidrome-litefs-v2.nomad` with corrected storage paths (`ND_DATAFOLDER`, `ND_CACHEFOLDER`, `ND_BACKUP_PATH`) (5cbb657) +- [ ] Task: Conductor - User Manual Verification 'Phase 1: Configuration and Image Structure' (Protocol in workflow.md) + +## Phase 2: Entrypoint and Registration Logic [x] [checkpoint: 9cd5455] +- [x] Task: Refactor `entrypoint.sh` to handle leadership-aware process management (9cd5455) + - [x] Integrate Consul registration logic (from `register.sh`) + - [x] Implement loop to start/stop Navidrome based on `/data/.primary` existence + - [x] Ensure proper signal handling for Navidrome shutdown +- [x] Task: Clean up redundant scripts (e.g., `register.sh` if fully integrated) (9cd5455) +- [ ] Task: Conductor - User Manual Verification 'Phase 2: Entrypoint and Registration Logic' (Protocol in workflow.md) + +## Phase 3: Deployment and Failover Verification [ ] +- [~] Task: Build and push the updated Docker image via Gitea Actions (if possible) or manual trigger +- [~] Task: Deploy the updated Nomad job +- [ ] Task: Verify cluster health and process distribution using `cluster_status` script +- [ ] Task: Perform a manual failover (stop primary allocation) and verify Navidrome migrates correctly +- [ ] Task: Conductor - User Manual Verification 'Phase 3: Deployment and Failover Verification' (Protocol in workflow.md) diff --git a/conductor/archive/fix_litefs_config_20260208/spec.md b/conductor/archive/fix_litefs_config_20260208/spec.md new file mode 100644 index 0000000..678aab5 --- /dev/null +++ b/conductor/archive/fix_litefs_config_20260208/spec.md @@ -0,0 +1,38 @@ +# Specification: Fix LiteFS Configuration and Process Management (`fix_litefs_config`) + +## Overview +Reconfigure the Navidrome/LiteFS process management to ensure Navidrome and its Consul service registration only occur on the Primary node. This will be achieved by leveraging the LiteFS `exec` block and updating the `entrypoint.sh` logic. Additionally, correct the Navidrome database and storage paths to properly utilize the LiteFS replicated mount. + +## Functional Requirements +- **LiteFS Configuration (`litefs.yml`):** + - Enable the `exec` block to trigger `/usr/local/bin/entrypoint.sh`. + - This allows LiteFS to manage the lifecycle of the application. +- **Entrypoint Logic (`entrypoint.sh`):** + - Implement a supervision loop that monitors leadership via the `/data/.primary` file. + - **On Primary:** + - Register the node as the `navidrome` (primary) service in Consul. + - Start the Navidrome process. + - **On Replica:** + - Ensure Navidrome is NOT running. + - Deregister the `navidrome` primary service if previously registered. + - (Optional) Register as a replica service or simply wait. + - **On Transition:** Handle graceful shutdown of Navidrome if the node loses leadership. +- **Storage and Path Configuration (`navidrome-litefs-v2.nomad`):** + - Set `ND_DATAFOLDER` to `/data` (the LiteFS FUSE mount). + - Set `ND_CACHEFOLDER` to `/shared_data/cache` (shared persistent storage). + - Set `ND_BACKUP_PATH` to `/shared_data/backup` (shared persistent storage). +- **Dockerfile Updates:** + - Update `ENTRYPOINT` to `["litefs", "mount"]` to allow LiteFS to act as the supervisor. + +## Non-Functional Requirements +- **Robustness:** Use a simple bash loop for process management to avoid extra dependencies. +- **Signal Handling:** Ensure signals (SIGTERM) are correctly forwarded to Navidrome for graceful shutdown. + +## Acceptance Criteria +- [ ] Navidrome process runs ONLY on the Primary node. +- [ ] Consul service `navidrome` correctly points to the current Primary. +- [ ] Navidrome database (`navidrome.db`) is confirmed to be on the `/data` mount. +- [ ] Cluster failover correctly stops Navidrome on the old primary and starts it on the new one. + +## Out of Scope +- Implementation of complex init systems like `tini` (bash loop selected by user).