From 4de522c9f08349fe5289b11bffc399728666bff9 Mon Sep 17 00:00:00 2001 From: Till Rohrmann Date: Mon, 20 Oct 2025 13:12:33 +0200 Subject: [PATCH] Harden raft_metadata_cluster_smoke_test Wrap all client calls in retry_on_retryable_error to protect from retryable errors as they can occur in case the leader of the Raft cluster changes. This fixes #3914. --- server/tests/raft_metadata_cluster.rs | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/server/tests/raft_metadata_cluster.rs b/server/tests/raft_metadata_cluster.rs index 87a6471fdc..3f12ebbbef 100644 --- a/server/tests/raft_metadata_cluster.rs +++ b/server/tests/raft_metadata_cluster.rs @@ -95,13 +95,13 @@ async fn raft_metadata_cluster_smoke_test() -> googletest::Result<()> { let new_value = Value::new(1337); let new_value_version = new_value.version(); assert_that!( - client - .put( - key.clone(), - &new_value, - Precondition::MatchesVersion(value_version.next()), - ) - .await, + retry_on_retryable_error(retry_policy.clone(), || client.put( + key.clone(), + &new_value, + Precondition::MatchesVersion(value_version.next()), + )) + .await + .map_err(|err| err.into_inner()), err(pat!(WriteError::FailedPrecondition(_))) ); assert_that!( @@ -123,14 +123,19 @@ async fn raft_metadata_cluster_smoke_test() -> googletest::Result<()> { ) }) .await?; - let stored_new_value = client.get::(key.clone()).await?; + let stored_new_value = + retry_on_retryable_error(retry_policy.clone(), || client.get::(key.clone())).await?; assert_eq!(stored_new_value, Some(new_value)); retry_on_retryable_error(retry_policy.clone(), || { client.delete(key.clone(), Precondition::MatchesVersion(new_value_version)) }) .await?; - assert!(client.get::(key.clone()).await?.is_none()); + assert!( + retry_on_retryable_error(retry_policy.clone(), || client.get::(key.clone())) + .await? + .is_none() + ); cluster.graceful_shutdown(Duration::from_secs(3)).await?;