mirror of
https://github.com/ModernRelay/omnigraph.git
synced 2026-06-09 01:35:18 +02:00
Add db/manifest/recovery.rs with the primitives the open-time recovery
sweep will invoke. No integration into Omnigraph::open or any writer
path yet — those land in Phase 3+.
Sidecar protocol:
- RecoverySidecar JSON shape (schema_version=1; SidecarSchemaError
refuses unknown versions — old binaries don't guess at newer shapes).
- SidecarKind {Mutation, Load, SchemaApply, BranchMerge, EnsureIndices}
for audit attribution.
- SidecarTablePin {table_key, table_path, expected_version,
post_commit_pin}.
- write_sidecar / delete_sidecar / list_sidecars / parse_sidecar.
Classifier + decision dispatcher (all-or-nothing per sidecar):
- TableClassification {NoMovement, RolledPastExpected, UnexpectedAtP1,
UnexpectedMultistep, InvariantViolation}.
- classify_table(pin, lance_head, manifest_pinned).
- decide(&[TableClassification]) -> SidecarDecision {RollForward,
RollBack, Abort}. Mid-Phase-B crash with mixed states rolls BACK
(not forward) — atomicity per docs/invariants.md §VI.23.
Restore primitive:
- restore_table_to_version(table_path, expected_version): open,
checkout(expected_version), restore. Includes a fragment-set
equality short-circuit so repeated mid-rollback crashes don't pile
up Lance versions (Lance fragments are immutable; equal fragment-ids
⇒ equal content).
StorageAdapter trait extension:
- Added list_dir(dir_uri) -> Vec<String> for sidecar enumeration.
LocalStorageAdapter uses tokio::fs::read_dir; S3StorageAdapter uses
object_store::list with a prefix-collision guard
(filters to require the directory '/' boundary so listing
__recovery doesn't accidentally match __recovery_log/...).
RecordingStorageAdapter (test wrapper) delegates to inner.
17 unit tests covering: classifier branches, decision branches
(including mid-Phase-B mix → RollBack and empty slice → RollForward),
JSON round-trip, schema-version refusal, restore HEAD+1, fragment-set
short-circuit no-op, list_sidecars empty/round-trip/non-JSON-skip.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
||
|---|---|---|
| .. | ||
| omnigraph | ||
| omnigraph-cli | ||
| omnigraph-compiler | ||
| omnigraph-server | ||