Files
MusicFS/musicfs/Cargo.toml
T
Alexander 0ff2a17ab7 Implement Phase C: Production Hardening
Implements phase-c-hardening.md to fix 6 RED resilience tests:

- D1/D2: Health check timeout (1.5s) + parallel execution via join_all
- C6: Recursive CAS calculate_size() to scan shard subdirectories
- C7: FUSE read timeout (30s) returns EIO instead of hanging
- 6.4: Auto-re-fetch corrupt/missing chunks from origin
- 6.6: Passthrough mode - continue even when CAS write fails
- C9: PID file with flock prevents concurrent mounts
- 5.3: fd exhaustion handling test

All 27 resilience tests now pass. Full test suite green.

Files changed:
- musicfs-origins/src/health.rs: timeout + join_all
- musicfs-origins/Cargo.toml: add futures dependency
- musicfs-cas/src/store.rs: recursive calculate_size
- musicfs-cas/src/reader.rs: auto-re-fetch on IntegrityError/NotFound
- musicfs-cas/src/fetcher.rs: passthrough fallback
- musicfs-fuse/src/filesystem.rs: 30s read timeout
- musicfs-cli/src/main.rs: PID file with flock
- musicfs-test-utils/tests/resilience.rs: updated tests
2026-05-13 15:55:22 +02:00

96 lines
1.8 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"] }
tokio-util = { version = "0.7", features = ["rt"] }
async-trait = "0.1"
futures = "0.3"
# 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"