ops: set provenance and timestamp on delete and rename tombstones
delete_node and rename_node were cloning the previous node version for the tombstone/rename entry without updating provenance or timestamp. This made it impossible to tell who deleted a node or when — the tombstone just inherited whatever the last write had. Now both operations derive provenance from POC_PROVENANCE env var (same as upsert) and set timestamp to now. Co-Authored-By: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
81fec99767
commit
199c415cf2
1 changed files with 14 additions and 0 deletions
|
|
@ -76,11 +76,17 @@ impl Store {
|
|||
let _lock = StoreLock::acquire()?;
|
||||
self.refresh_nodes()?;
|
||||
|
||||
let prov = Provenance::from_env()
|
||||
.map(|p| p.label().to_string())
|
||||
.unwrap_or_else(|| "manual".to_string());
|
||||
|
||||
let node = self.nodes.get(key)
|
||||
.ok_or_else(|| format!("No node '{}'", key))?;
|
||||
let mut deleted = node.clone();
|
||||
deleted.deleted = true;
|
||||
deleted.version += 1;
|
||||
deleted.provenance = prov;
|
||||
deleted.timestamp = now_epoch();
|
||||
self.append_nodes_unlocked(std::slice::from_ref(&deleted))?;
|
||||
self.nodes.remove(key);
|
||||
Ok(())
|
||||
|
|
@ -109,15 +115,23 @@ impl Store {
|
|||
.ok_or_else(|| format!("No node '{}'", old_key))?
|
||||
.clone();
|
||||
|
||||
let prov = Provenance::from_env()
|
||||
.map(|p| p.label().to_string())
|
||||
.unwrap_or_else(|| "manual".to_string());
|
||||
|
||||
// New version under the new key
|
||||
let mut renamed = node.clone();
|
||||
renamed.key = new_key.to_string();
|
||||
renamed.version += 1;
|
||||
renamed.provenance = prov.clone();
|
||||
renamed.timestamp = now_epoch();
|
||||
|
||||
// Deletion record for the old key (same UUID, independent version counter)
|
||||
let mut tombstone = node.clone();
|
||||
tombstone.deleted = true;
|
||||
tombstone.version += 1;
|
||||
tombstone.provenance = prov;
|
||||
tombstone.timestamp = now_epoch();
|
||||
|
||||
// Collect affected relations and update their debug key strings
|
||||
let updated_rels: Vec<_> = self.relations.iter()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue