32 lines
1.4 KiB
Markdown
32 lines
1.4 KiB
Markdown
# mkv TODO
|
|
|
|
## Done
|
|
|
|
- [x] SQLite schema + pragmas + ReadPool + WriterHandle (`db.rs`)
|
|
- [x] Config parsing with validation (`config.rs`)
|
|
- [x] Error types with axum IntoResponse (`error.rs`)
|
|
- [x] Consistent hash ring with virtual nodes + stability tests (`hasher.rs`)
|
|
- [x] Volume HTTP client — key-as-path, no sidecar files (`volume.rs`)
|
|
- [x] Health checker background task (`health.rs`)
|
|
- [x] HTTP handlers with pure decision functions extracted (`server.rs`)
|
|
- [x] CLI with clap subcommands (`main.rs`)
|
|
- [x] Rebuild tool — recursive nginx autoindex walk (`rebuild.rs`)
|
|
- [x] Rebalance tool with --dry-run (`rebalance.rs`)
|
|
- [x] Integration tests — 8 tests against real nginx (Docker Compose)
|
|
- [x] Unit tests — 17 tests (hasher, server pure fns, rebalance planning)
|
|
- [x] Key-as-path simplification (removed content-addressed paths + .key sidecars)
|
|
|
|
## Remaining
|
|
|
|
### Worth doing
|
|
|
|
- [ ] **Typed volume errors** — replace `String` errors in `volume.rs` with a proper enum
|
|
- [ ] **Unit tests for `db.rs`** — CRUD round-trip with in-memory SQLite
|
|
- [ ] **Graceful shutdown** — drain in-flight requests, flush writer
|
|
|
|
### Nice to have
|
|
|
|
- [ ] **Metrics** — request count, latency histograms, volume error rates
|
|
- [ ] **Request ID / tracing spans** — per-request trace context
|
|
- [ ] **Config reload** — SIGHUP to reload config without restart
|
|
- [ ] **Rate limiting on list endpoint** — prefix scan can be expensive
|