From 149aa495758f021c836795d5fb27c13bb84e3846 Mon Sep 17 00:00:00 2001 From: Christien Rioux Date: Sat, 6 Apr 2024 22:33:00 -0400 Subject: [PATCH] fix set dht value during a sequence number conflict --- veilid-core/src/storage_manager/set_value.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/veilid-core/src/storage_manager/set_value.rs b/veilid-core/src/storage_manager/set_value.rs index 4d793174..0ddeebb4 100644 --- a/veilid-core/src/storage_manager/set_value.rs +++ b/veilid-core/src/storage_manager/set_value.rs @@ -100,11 +100,17 @@ impl StorageManager { return Ok(NetworkResult::invalid_message("Schema validation failed")); } + // If we got a value back it should be different than the one we are setting + if ctx.value.value_data() == value.value_data() { + // Move to the next node + return Ok(NetworkResult::invalid_message("same value returned")); + } + // We have a prior value, ensure this is a newer sequence number let prior_seq = ctx.value.value_data().seq(); let new_seq = value.value_data().seq(); - if new_seq > prior_seq { - // If the sequence number is greater, keep it + if new_seq >= prior_seq { + // If the sequence number is greater or equal, keep it ctx.value = Arc::new(value); // One node has shown us this value so far ctx.value_nodes = vec![next_node];