MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / put_edge_versioned

Method put_edge_versioned

nodedb/src/engine/graph/edge_store/temporal/write.rs:22–69  ·  view source on GitHub ↗

Write a new version of an edge at `system_from`. Maintains the reverse index with the same suffix so inbound traversal can version-scan symmetrically. Does NOT close prior versions' `system_until` — Ceiling infers the closed-open interval at read time from the next-newer version's `system_from`.

(
        &self,
        edge: EdgeRef<'_>,
        properties: &[u8],
        system_from: i64,
        valid_from_ms: i64,
        valid_until_ms: i64,
    )

Source from the content-addressed store, hash-verified

20 /// closed-open interval at read time from the next-newer version's
21 /// `system_from`.
22 pub fn put_edge_versioned(
23 &self,
24 edge: EdgeRef<'_>,
25 properties: &[u8],
26 system_from: i64,
27 valid_from_ms: i64,
28 valid_until_ms: i64,
29 ) -> crate::Result<()> {
30 let fwd = versioned_edge_key(edge.collection, edge.src, edge.label, edge.dst, system_from)?;
31 let rev = versioned_edge_key(edge.collection, edge.dst, edge.label, edge.src, system_from)?;
32 let payload =
33 EdgeValuePayload::new(valid_from_ms, valid_until_ms, properties.to_vec()).encode()?;
34 let t = edge.tid.as_u64();
35
36 let write_txn = self
37 .db
38 .begin_write()
39 .map_err(|e| redb_err("begin_write", e))?;
40 {
41 let mut edges = write_txn
42 .open_table(EDGES)
43 .map_err(|e| redb_err("open edges", e))?;
44 edges
45 .insert((t, fwd.as_str()), payload.as_slice())
46 .map_err(|e| redb_err("insert versioned edge", e))?;
47 drop(edges);
48
49 let mut rev_t = write_txn
50 .open_table(REVERSE_EDGES)
51 .map_err(|e| redb_err("open reverse", e))?;
52 rev_t
53 .insert((t, rev.as_str()), &[] as &[u8])
54 .map_err(|e| redb_err("insert reverse", e))?;
55 drop(rev_t);
56
57 increment_for_insert(
58 &write_txn,
59 t,
60 edge.collection,
61 edge.label,
62 edge.src,
63 edge.dst,
64 system_from,
65 )?;
66 }
67 write_txn.commit().map_err(|e| redb_err("commit", e))?;
68 Ok(())
69 }
70
71 /// BiTemporalFK enforcement: close a referrer edge by appending a new
72 /// version that copies the latest live version's properties and

Callers 15

execute_edge_putMethod · 0.80
maybe_register_edgeMethod · 0.80
apply_undo_edgeMethod · 0.80
make_social_graphFunction · 0.80
extract_empty_propertiesFunction · 0.80
putFunction · 0.80
putFunction · 0.80
tenants_are_isolatedFunction · 0.80
close_referrer_edgeMethod · 0.80

Calls 11

versioned_edge_keyFunction · 0.85
increment_for_insertFunction · 0.85
begin_writeMethod · 0.80
redb_errFunction · 0.50
encodeMethod · 0.45
to_vecMethod · 0.45
as_u64Method · 0.45
insertMethod · 0.45
as_strMethod · 0.45
as_sliceMethod · 0.45
commitMethod · 0.45