6285eeb6c0
Implements all 6 critical resilience fixes from phase-a-stop-dying.md: - Issue 2.9: Migrate std::sync::RwLock → parking_lot::RwLock (7 files) Prevents lock poisoning cascade on writer panic - Issue 2.2: Add install_panic_hook() to log panics via tracing Ensures panics are captured in logs/journald before process death - Issue 3.7: Add ExecStopPost to systemd service Cleans up stale FUSE mounts on service stop - Issue 2.7: Add check_stale_mount() detection on startup Auto-cleans leftover mounts from previous crashes - Issue 2.10: Integrate sd_notify for systemd lifecycle Sends READY=1 after mount, STOPPING on shutdown - Issue 2.1: Add signal handling with spawn_mount Catches SIGTERM/SIGINT for clean shutdown instead of instant death All 7 Phase A tests pass: - test_poisoned_tree_lock_returns_eio_not_panic - test_parking_lot_rwlock_survives_panic - test_panic_hook_logs_to_tracing - test_systemd_service_has_execstoppost - test_stale_mount_check_function_exists - test_sd_notify_ready_sent - test_sigterm_triggers_shutdown
30 lines
675 B
Desktop File
30 lines
675 B
Desktop File
[Unit]
|
|
Description=MusicFS - Metadata-Organized Music Filesystem
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=notify
|
|
ExecStart=/usr/bin/musicfs mount --config /etc/musicfs/config.toml /mnt/music
|
|
ExecStop=/usr/bin/musicfs shutdown
|
|
ExecStopPost=/usr/bin/fusermount -uz /mnt/music || true
|
|
Restart=on-failure
|
|
RestartSec=5
|
|
User=musicfs
|
|
Group=musicfs
|
|
|
|
Environment="RUST_LOG=musicfs=info,warn"
|
|
StandardOutput=journal
|
|
StandardError=journal
|
|
SyslogIdentifier=musicfs
|
|
RateLimitIntervalSec=30s
|
|
RateLimitBurst=1000
|
|
|
|
NoNewPrivileges=true
|
|
ProtectSystem=strict
|
|
ProtectHome=read-only
|
|
ReadWritePaths=/var/cache/musicfs /var/log/musicfs /mnt/music
|
|
PrivateTmp=true
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|