feat: karapace-store — content-addressable object store, layers, metadata, WAL
- ObjectStore: blake3-addressed objects, atomic writes (NamedTempFile + persist)
- Integrity verification on every read (hash comparison without String allocation)
- LayerStore: layer manifests with Base/Dependency/Policy/Snapshot kinds
- MetadataStore: environment state machine, naming, ref-counting, blake3 checksum
- GarbageCollector: signal-cancellable orphan cleanup, protects live references
- WriteAheadLog: crash recovery with typed rollback steps (RemoveDir/RemoveFile/ResetState)
- StoreLayout: #[inline] path accessors, store format v2 versioning
- Store migration: v1→v2 with atomic version file rewrite
- Deterministic tar packing/unpacking (sorted entries, zero timestamps, uid/gid 0)
- fsync_dir() for POSIX-portable rename durability
2026-02-22 17:36:31 +00:00
|
|
|
[package]
|
|
|
|
|
name = "karapace-store"
|
|
|
|
|
description = "Content-addressable store, metadata, layers, GC, and integrity for Karapace"
|
|
|
|
|
version.workspace = true
|
|
|
|
|
edition.workspace = true
|
|
|
|
|
license.workspace = true
|
|
|
|
|
repository.workspace = true
|
|
|
|
|
|
|
|
|
|
[lints]
|
|
|
|
|
workspace = true
|
|
|
|
|
|
|
|
|
|
[dependencies]
|
|
|
|
|
blake3.workspace = true
|
|
|
|
|
serde.workspace = true
|
|
|
|
|
serde_json.workspace = true
|
|
|
|
|
thiserror.workspace = true
|
|
|
|
|
tempfile.workspace = true
|
|
|
|
|
fs2.workspace = true
|
|
|
|
|
chrono.workspace = true
|
|
|
|
|
tar.workspace = true
|
|
|
|
|
tracing.workspace = true
|
|
|
|
|
karapace-schema = { path = "../karapace-schema" }
|
2026-02-22 19:11:09 +00:00
|
|
|
|
|
|
|
|
[dev-dependencies]
|
|
|
|
|
libc.workspace = true
|