Phase 1: storage + catalog layer

- storaged: object_store backend (LocalFileSystem), PUT/GET/DELETE/LIST endpoints
- shared: arrow_helpers with Parquet roundtrip + schema fingerprinting (2 tests)
- catalogd: in-memory registry with write-ahead manifest persistence to object storage
- catalogd: POST/GET /datasets, GET /datasets/by-name/{name}
- gateway: wires storaged + catalogd with shared object_store state
- Phase tracker updated: Phase 0 + Phase 1 gates passed

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
root
2026-03-27 05:15:27 -05:00
co-authored by Claude Opus 4.6
parent a52ca841c6
commit 655b6c0b37
17 changed files with 2331 additions and 30 deletions
+12 -2
View File
@@ -9,10 +9,20 @@ async fn main() {
.with(fmt::layer())
.init();
// Storage backend — local filesystem for now
let storage_root = std::env::var("STORAGE_ROOT").unwrap_or_else(|_| "./data".to_string());
let store = storaged::backend::init_local(&storage_root);
// Catalog — rebuild from persisted manifests
let registry = catalogd::registry::Registry::new(store.clone());
if let Err(e) = registry.rebuild().await {
tracing::warn!("catalog rebuild failed (empty store?): {e}");
}
let app = Router::new()
.route("/health", get(health))
.nest("/storage", storaged::service::router())
.nest("/catalog", catalogd::service::router())
.nest("/storage", storaged::service::router(store))
.nest("/catalog", catalogd::service::router(registry))
.nest("/query", queryd::service::router())
.nest("/ai", aibridge::service::router())
.layer(TraceLayer::new_for_http());