Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/skade

serve/Cargo.toml

# The `skade-katalog serve` binary — opens ONE lock-owning RedbCatalog and
# fronts it over REST and/or gRPC, serializing every commit through the single
# catalog. This is what makes "the ONE live catalog" real (PLAN CATALOG
# DOCTRINE): remote clients are thin and lock-free; co-located callers still link
# skade-katalog and bypass the wire entirely. Own workspace (detached), excluded
# from the core crate's tarball.
[package]
name = "skade-katalog-serve"
readme = "README.md"
version = "0.1.0"
edition = "2024"
rust-version = "1.85"
description = "The `skade-katalog serve` binary: one lock-owning RedbCatalog fronted over REST and/or gRPC (the ONE live catalog)."
license = "Apache-2.0"
repository = "https://git.gunnar.rs/nordisk/skade"

[[bin]]
name = "skade-katalog"
path = "src/main.rs"

[dependencies]
skade-katalog = { path = ".." , version = "0.2.0" }
# The two fronts — REUSE the shipped serving crates, not re-implement.
skade-katalog-rest = { path = "../rest" , version = "0.1.0" }
skade-katalog-grpc = { path = "../grpc" , version = "0.1.1", features = ["tls"] }
iceberg = { package = "iceberg-arrow59", version = "0.11.0", path = "../vendor/iceberg-arrow59" }
tokio = { version = "1", features = ["rt-multi-thread", "macros", "net", "signal"] }
anyhow = "1"
# OPTIONAL (feature `object-store`, OFF by default) — the skade data plane's
# pluggable object store, REUSED rather than re-implemented: `ObjectStoreConfig`
# + `ObjectStoreFactory` are exactly the `iceberg::io::StorageFactory` that
# `skade::Warehouse::open_with_store` / `open_with_object_store_config` wire into
# a warehouse whose blobs live in MinIO/S3. Linking it here lets `serve` open
# THAT SAME warehouse instead of assuming a local `file://` tree. Default-off
# keeps the stock binary's dependency tree (and build time) exactly as it was:
# no arrow, no parquet, no S3 client unless asked for.
skade = { path = "../skade", version = "0.7.0", optional = true, default-features = false, features = ["rustfs", "s3"] }

[features]
# `object-store` (opt-in, default OFF) — serve a warehouse whose Iceberg blobs
# live in an object store (S3/MinIO) rather than on this box's filesystem.
# Adds the `--warehouse-uri` / `--s3-*` flags and the `WarehouseStorage::ObjectStore`
# variant. Nothing existing changes shape or behaviour when it is off.
object-store = ["dep:skade"]

[dev-dependencies]
tempfile = "3"
serde_json = "1"
# Stock iceberg-rust REST client — the functional test loads over REST a table
# created over gRPC, proving both fronts share the one backing catalog.
iceberg-catalog-rest = { package = "iceberg-catalog-rest-arrow59", path = "../vendor/iceberg-catalog-rest-arrow59" }
# The DATA PLANE, for the object-store round-trip test: it writes real Arrow
# batches into an object-store-backed warehouse, then the serve path opens that
# same redb + store and must list/load the table over REST. Dev-dep so the
# always-on test target compiles even with `object-store` off (the test bodies
# that need the store are `#[cfg(feature = "object-store")]`).
skade = { path = "../skade", default-features = false, features = ["rustfs"] }
# The project-agnostic nornir bench envelope (`nornir_bench::BenchResult`) —
# `examples/loadtable_bench.rs` emits the SAME run/result JSONL every other
# nordisk bencher does instead of inventing a one-off format. Same sibling path
# skade's own benchers use. nornir-bench is graph-agnostic (no skade/iceberg
# dep), so this stays cycle-free. Dev-dep only.
nornir-bench = { version = "0.2.0", path = "../../edda/crates/nornir-bench", default-features = false }
anyhow = "1"

# The `loadTable` A/B: does reading table metadata through the catalog's own
# `FileIO` (what makes an object-store warehouse servable) cost the local-fs
# read that every existing deployment already does? See the file header.
[[example]]
name = "loadtable_bench"
path = "examples/loadtable_bench.rs"

# The live half of `tests/data_plane_warehouse.rs`: the offline test cannot
# exercise an endpoint URL, TLS, path-style addressing, SigV4 or a bucket
# policy, because it has none. Point this at a real MinIO/S3 and it does.
# Skips (exit 0) when its env is unset, so it is safe to run anywhere.
[[example]]
name = "live_object_store"
path = "examples/live_object_store.rs"

# Detached workspace: keep the core crate's lock/build pristine (L2 no-regression).
[workspace]