mirror of
https://github.com/ModernRelay/omnigraph.git
synced 2026-06-27 02:39:38 +02:00
61 lines
3.4 KiB
Markdown
61 lines
3.4 KiB
Markdown
|
|
# Omnigraph v0.7.2
|
|||
|
|
|
|||
|
|
A patch release over v0.7.1: write-path latency reductions plus three
|
|||
|
|
correctness fixes on the maintenance and recovery paths. No breaking changes, no
|
|||
|
|
on-disk format change, and no migration — drop-in over v0.7.1.
|
|||
|
|
|
|||
|
|
## Performance
|
|||
|
|
|
|||
|
|
- **Write opens go direct, schema validates once (#288, #298).** Write opens
|
|||
|
|
used to route through the per-table Lance namespace catalog, which re-opened
|
|||
|
|
the dataset just to read its location and re-resolved the latest version on
|
|||
|
|
every table open — an O(commit-depth) double resolution that dominated write
|
|||
|
|
latency on object stores (~70%). Writes now open each touched data table
|
|||
|
|
directly by its manifest-recorded location (Lance's O(1) version-hint path),
|
|||
|
|
validate the schema contract once per write instead of ~4×, and open each
|
|||
|
|
touched table once instead of 4×.
|
|||
|
|
|
|||
|
|
- **`optimize` compacts the internal metadata tables (#291).** `optimize`
|
|||
|
|
previously iterated only node/edge tables, so the internal `__manifest`,
|
|||
|
|
`_graph_commits`, and `_graph_commit_actors` tables accumulated one fragment
|
|||
|
|
per commit and were never compacted — making every write's metadata scan grow
|
|||
|
|
with commit history. `optimize` now compacts all three, so a periodically
|
|||
|
|
optimized long-lived graph keeps its per-write metadata scan flat in history.
|
|||
|
|
|
|||
|
|
## Fixes
|
|||
|
|
|
|||
|
|
- **`optimize` survives a cross-process write race (#297).** A CLI `optimize`
|
|||
|
|
racing a served write on the same table could fail: the in-process write queue
|
|||
|
|
doesn't serialize across processes, so a concurrent insert/delete advancing the
|
|||
|
|
manifest between optimize's compaction and its publish broke the strict
|
|||
|
|
equality CAS. Optimize now reopens-and-replans on a genuine Lance conflict and
|
|||
|
|
fast-forwards its publish monotonically, so a maintenance compaction never
|
|||
|
|
fails a live write. Bounded retry; sustained contention surfaces a loud
|
|||
|
|
conflict rather than dropping work.
|
|||
|
|
|
|||
|
|
- **`optimize` is non-destructive on upgraded graphs (#291).** A graph created by
|
|||
|
|
a pre-0.7.0 binary carries an on-by-default Lance auto-cleanup config; under it,
|
|||
|
|
optimize's compaction commit could fire Lance's version-GC hook and prune
|
|||
|
|
`__manifest`-pinned versions (breaking snapshots and time travel). Optimize now
|
|||
|
|
strips any stale `lance.auto_cleanup.*` config off every table — data and
|
|||
|
|
internal — before its HEAD-advancing commits, so compaction can never GC pinned
|
|||
|
|
versions.
|
|||
|
|
|
|||
|
|
- **Recovery converges instead of failing `open` under a concurrent manifest
|
|||
|
|
advance (#296).** The open-time recovery sweep published its roll-forward at the
|
|||
|
|
sidecar's pinned expected version; if another writer advanced the manifest
|
|||
|
|
during the classify→publish window, the CAS failed and aborted the whole
|
|||
|
|
`Omnigraph::open`. The sweep now treats roll-forward as "the manifest reflects
|
|||
|
|
the sidecar's committed state," not "this sweep won the CAS": on a CAS loss it
|
|||
|
|
re-reads the live manifest and, when the sidecar's intent is already satisfied,
|
|||
|
|
records the recovery and deletes the sidecar idempotently — so a concurrent
|
|||
|
|
advance no longer fails the open. (The destructive roll-back twin still defers
|
|||
|
|
to a cross-process lease, as documented.)
|
|||
|
|
|
|||
|
|
## Upgrade notes
|
|||
|
|
|
|||
|
|
Drop-in over v0.7.1 — no configuration, schema, or data changes. Upgrade the
|
|||
|
|
server and CLI together as usual. Graphs created on v0.7.1 read and write
|
|||
|
|
identically on v0.7.2; the optimize non-destructive fix additionally protects
|
|||
|
|
graphs created by pre-0.7.0 binaries from version GC during compaction.
|