mirror of
https://github.com/ModernRelay/omnigraph.git
synced 2026-06-15 01:55:13 +02:00
LocalStateBackend becomes ClusterStore: every stored byte — state ledger, lock, recovery sidecars, approval artifacts — now flows through the engine's StorageAdapter, making file:// and s3:// one code path. Behavior on the file backend is byte-compatible (layout, CAS semantics, diagnostics, lock release timing) and the entire pre-existing suite passes unchanged. Mechanics: the ledger CAS keeps its public sha256 vocabulary while the physical swap is token-conditioned (ETag If-Match on S3 via PR #186's primitives; content-token + temp/rename locally — the pre-port semantics); the lock is a create-only put (genuinely cross-machine on object stores) with deterministic drop-release locally and best-effort spawned release on S3; sidecars/approvals address by URI (SweepOutcome and the executors carry strings); sweep row-1 retirement joins the uniform deferred post-CAS cleanup. ClusterStore also gains the catalog-payload and graph-root methods that commit 2 wires in. Async ripple: status/force-unlock/serving-snapshot and the server's settings loader chain go async (CLI dispatch and ~20 test hosts follow, mechanically). tokio joins the cluster crate's runtime deps for the lock guard's handle. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
34 lines
1.2 KiB
TOML
34 lines
1.2 KiB
TOML
[package]
|
|
name = "omnigraph-cluster"
|
|
version = "0.6.2"
|
|
edition = "2024"
|
|
description = "Cluster configuration validation, planning, and config-only apply for Omnigraph."
|
|
license = "MIT"
|
|
repository = "https://github.com/ModernRelay/omnigraph"
|
|
homepage = "https://github.com/ModernRelay/omnigraph"
|
|
documentation = "https://docs.rs/omnigraph-cluster"
|
|
|
|
[features]
|
|
# Fault-injection hooks for the apply protocol (crash-mid-apply, CAS-race
|
|
# tests). Deliberately does NOT enable omnigraph/failpoints.
|
|
failpoints = ["dep:fail", "fail/failpoints"]
|
|
|
|
[dependencies]
|
|
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.6.2" }
|
|
omnigraph = { package = "omnigraph-engine", path = "../omnigraph", version = "0.6.2" }
|
|
fail = { workspace = true, optional = true }
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
serde_yaml = { workspace = true }
|
|
sha2 = { workspace = true }
|
|
thiserror = { workspace = true }
|
|
time = { workspace = true }
|
|
# Runtime handle only — best-effort async lock release in
|
|
# StateLockGuard::drop on object-store backends (cluster commands always
|
|
# run inside the caller's tokio runtime).
|
|
tokio = { workspace = true }
|
|
ulid = { workspace = true }
|
|
|
|
[dev-dependencies]
|
|
tempfile = { workspace = true }
|
|
tokio = { workspace = true }
|