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
94 lines
1.7 KiB
TOML
94 lines
1.7 KiB
TOML
[workspace]
|
|
resolver = "2"
|
|
members = ["crates/*"]
|
|
|
|
[workspace.package]
|
|
version = "0.1.0"
|
|
edition = "2021"
|
|
license = "MIT OR Apache-2.0"
|
|
rust-version = "1.75"
|
|
authors = ["MusicFS Contributors"]
|
|
repository = "https://github.com/user/musicfs"
|
|
|
|
[workspace.dependencies]
|
|
# Async runtime
|
|
tokio = { version = "1", features = ["full"] }
|
|
async-trait = "0.1"
|
|
|
|
# Error handling
|
|
thiserror = "1"
|
|
anyhow = "1"
|
|
|
|
# Serialization
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
rmp-serde = "1"
|
|
toml = "0.8"
|
|
|
|
# Concurrent collections
|
|
dashmap = "5"
|
|
|
|
# Logging
|
|
tracing = "0.1"
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
|
|
tracing-appender = "0.2"
|
|
tracing-journald = "0.3"
|
|
|
|
# FUSE
|
|
fuser = "0.14"
|
|
|
|
# Database
|
|
rusqlite = { version = "0.31", features = ["bundled"] }
|
|
sled = "0.34"
|
|
|
|
# Hashing (per architecture 8.3)
|
|
xxhash-rust = { version = "0.8", features = ["xxh64"] }
|
|
hex = "0.4"
|
|
|
|
# Audio metadata
|
|
symphonia = { version = "0.5", default-features = false, features = [
|
|
"aac", "alac", "flac", "mp3", "ogg", "vorbis", "wav"
|
|
] }
|
|
|
|
# Bytes handling
|
|
bytes = "1"
|
|
|
|
# Platform directories
|
|
dirs = "5"
|
|
|
|
# CLI
|
|
clap = { version = "4", features = ["derive"] }
|
|
|
|
# Testing
|
|
tempfile = "3"
|
|
fail = "0.5"
|
|
rlimit = "0.10"
|
|
nix = { version = "0.29", features = ["signal", "process"] }
|
|
wiremock = "0.6"
|
|
assert_cmd = "2.0"
|
|
noxious-client = "1.0"
|
|
|
|
# Platform-specific
|
|
libc = "0.2"
|
|
|
|
# Search (Week 8)
|
|
tantivy = "0.22"
|
|
moka = { version = "0.12", features = ["sync"] }
|
|
|
|
# Concurrency
|
|
parking_lot = "0.12"
|
|
|
|
# gRPC (Week 8)
|
|
tonic = "0.11"
|
|
prost = "0.12"
|
|
tokio-stream = "0.1"
|
|
|
|
# Smart Features (Week 9)
|
|
image = { version = "0.24", default-features = false, features = ["jpeg", "png"] }
|
|
chrono = "0.4"
|
|
|
|
sd-notify = "0.4"
|
|
|
|
[workspace.dependencies.tonic-build]
|
|
version = "0.11"
|