mirror of
https://github.com/ModernRelay/omnigraph.git
synced 2026-07-15 03:22:11 +02:00
MR-771: demote Run to direct-publish via expected_table_versions CAS
mutate_as and load now write directly to target tables and call the publisher once at the end with per-table expected versions; the Run state machine, _graph_runs.lance writers, __run__ staging branches, and server /runs/* endpoints are removed. Multi-statement mutations remain atomic at the manifest level via an in-memory MutationStaging accumulator that gives read-your-writes within a query and a single publish at the end. Concurrent-writer conflicts surface as ExpectedVersionMismatch (HTTP 409 manifest_conflict) instead of the old DivergentUpdate merge shape. Documents one known limitation in docs/runs.md: a multi-statement mid-query failure where op-N writes a Lance fragment and op-N+1 fails leaves Lance HEAD ahead of the manifest until a follow-up introduces per-table Lance branches. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
4e5374a85e
commit
35be20cb05
28 changed files with 1188 additions and 3216 deletions
|
|
@ -996,32 +996,21 @@ impl Omnigraph {
|
|||
self.ensure_schema_apply_idle("branch_merge").await?;
|
||||
let previous_actor = self.audit_actor_id.clone();
|
||||
self.audit_actor_id = actor_id.map(str::to_string);
|
||||
let result = self.branch_merge_impl(source, target, false).await;
|
||||
let result = self.branch_merge_impl(source, target).await;
|
||||
self.audit_actor_id = previous_actor;
|
||||
result
|
||||
}
|
||||
|
||||
pub(crate) async fn branch_merge_internal(
|
||||
&mut self,
|
||||
source: &str,
|
||||
target: &str,
|
||||
) -> Result<MergeOutcome> {
|
||||
self.branch_merge_impl(source, target, true).await
|
||||
}
|
||||
|
||||
async fn branch_merge_impl(
|
||||
&mut self,
|
||||
source: &str,
|
||||
target: &str,
|
||||
allow_internal_refs: bool,
|
||||
) -> Result<MergeOutcome> {
|
||||
if !allow_internal_refs {
|
||||
if is_internal_run_branch(source) || is_internal_run_branch(target) {
|
||||
return Err(OmniError::manifest(format!(
|
||||
"branch_merge does not allow internal run refs ('{}' -> '{}')",
|
||||
source, target
|
||||
)));
|
||||
}
|
||||
if is_internal_run_branch(source) || is_internal_run_branch(target) {
|
||||
return Err(OmniError::manifest(format!(
|
||||
"branch_merge does not allow internal run refs ('{}' -> '{}')",
|
||||
source, target
|
||||
)));
|
||||
}
|
||||
let source_branch = Omnigraph::normalize_branch_name(source)?;
|
||||
let target_branch = Omnigraph::normalize_branch_name(target)?;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue