Eliminates the single-lock bottleneck for media forwarding. Before: all participants across all rooms competed for one Mutex. Now rooms are stored in DashMap (64 internal shards with per-shard RwLocks). Changes: - RoomManager.rooms: HashMap → DashMap<String, Room> - Per-room quality tracking (qualities, current_tier moved into Room) - Arc<Mutex<RoomManager>> → Arc<RoomManager> everywhere - 20 .lock().await sites removed across room.rs, main.rs, federation.rs, ws.rs - federation forward_to_peers: clone peer list, release lock, then send - ACL uses std::sync::Mutex (rarely accessed, non-async) Concurrency improvement: - Before: 100 rooms × 10 people = 1000 tasks → 1 Mutex - After: distributed across 64 DashMap shards, ~15 tasks per shard avg - Rooms are fully independent — room A never blocks room B 314 tests passing, 0 regressions. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
44 lines
1.2 KiB
TOML
44 lines
1.2 KiB
TOML
[package]
|
|
name = "wzp-relay"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
rust-version.workspace = true
|
|
description = "WarzonePhone relay daemon — ties codec, FEC, crypto, and transport together"
|
|
|
|
[dependencies]
|
|
wzp-proto = { workspace = true }
|
|
wzp-codec = { workspace = true }
|
|
wzp-fec = { workspace = true }
|
|
wzp-crypto = { workspace = true }
|
|
wzp-transport = { workspace = true }
|
|
tokio = { workspace = true }
|
|
tracing = { workspace = true }
|
|
tracing-subscriber = { workspace = true }
|
|
async-trait = { workspace = true }
|
|
bytes = { workspace = true }
|
|
serde = { workspace = true }
|
|
toml = "0.8"
|
|
anyhow = "1"
|
|
reqwest = { version = "0.12", features = ["json"] }
|
|
serde_json = "1"
|
|
rustls = { version = "0.23", default-features = false, features = ["ring", "std"] }
|
|
quinn = { workspace = true }
|
|
prometheus = "0.13"
|
|
axum = { version = "0.7", default-features = false, features = ["tokio", "http1", "ws"] }
|
|
tower-http = { version = "0.6", features = ["fs"] }
|
|
futures-util = "0.3"
|
|
dashmap = "6"
|
|
dirs = "6"
|
|
sha2 = { workspace = true }
|
|
chrono = "0.4"
|
|
|
|
[[bin]]
|
|
name = "wzp-relay"
|
|
path = "src/main.rs"
|
|
|
|
[dev-dependencies]
|
|
tokio = { workspace = true, features = ["rt-multi-thread", "macros"] }
|
|
wzp-transport = { workspace = true }
|
|
wzp-client = { workspace = true }
|