From b6db6b0d761460f4390c3b80beb9bf49e53d3192 Mon Sep 17 00:00:00 2001 From: Niko PLP Date: Fri, 26 Jul 2024 11:02:00 +0300 Subject: [PATCH] dont propagate removes of triples in AppPatch when SU-Set keeps them (some observed are not removed) --- ng-verifier/src/commits/transaction.rs | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/ng-verifier/src/commits/transaction.rs b/ng-verifier/src/commits/transaction.rs index 3861281..e8d2d8f 100644 --- a/ng-verifier/src/commits/transaction.rs +++ b/ng-verifier/src/commits/transaction.rs @@ -404,8 +404,11 @@ impl Verifier { self.update_graph(updates).await } - async fn update_graph(&mut self, updates: Vec) -> Result<(), VerifierError> { - let updates_ref = &updates; + async fn update_graph( + &mut self, + mut updates: Vec, + ) -> Result<(), VerifierError> { + let updates_ref = &mut updates; let res = self .graph_dataset .as_ref() @@ -414,7 +417,7 @@ impl Verifier { move |mut transaction| -> Result<(), ng_oxigraph::oxigraph::store::StorageError> { let reader = transaction.ng_get_reader(); - for update in updates_ref { + for update in updates_ref.iter_mut() { let commit_name = NuriV0::commit_graph_name(&update.commit_id, &update.overlay_id); let commit_encoded = numeric_encoder::StrHash::new(&commit_name); @@ -505,8 +508,8 @@ impl Verifier { } else { REMOVED_IN_OTHER }; - - for remove in update.transaction.removes.iter() { + let mut to_remove_from_removes: HashSet = HashSet::new(); + for (pos, remove) in update.transaction.removes.iter().enumerate() { let encoded_subject = remove.subject.as_ref().into(); let encoded_predicate = remove.predicate.as_ref().into(); let encoded_object = remove.object.as_ref().into(); @@ -548,12 +551,19 @@ impl Verifier { let triple_ref: TripleRef = remove.into(); let quad_ref = triple_ref.in_graph(ov_graphname_ref); transaction.remove(quad_ref)?; + } else { + to_remove_from_removes.insert(pos); } } } + let mut idx: usize = 0; + update.transaction.removes.retain(|_| { + let retain = !to_remove_from_removes.remove(&idx); + idx += 1; + retain + }); } } - Ok(()) }, )