test(tvix/castore): use tokio-retry for exp backoff

Rather than using this loop, use exponential backoff while waiting for
the socket path to be created.

Change-Id: I18706a64ce06f8916a07892dfbcd409ac5b3bff1
Reviewed-on: https://cl.tvl.fyi/c/depot/+/9568
Autosubmit: flokli <flokli@flokli.de>
Reviewed-by: Connor Brewster <cbrewster@hey.com>
Tested-by: BuildkiteCI
This commit is contained in:
Florian Klink 2023-10-08 13:33:43 +02:00 committed by clbot
parent c0376995c9
commit b6bf3a87f1
4 changed files with 63 additions and 16 deletions

12
tvix/Cargo.lock generated
View file

@ -2460,6 +2460,17 @@ dependencies = [
"syn 2.0.16",
]
[[package]]
name = "tokio-retry"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f57eb36ecbe0fc510036adff84824dd3c24bb781e21bfa67b69d556aa85214f"
dependencies = [
"pin-project",
"rand",
"tokio",
]
[[package]]
name = "tokio-stream"
version = "0.1.14"
@ -2700,6 +2711,7 @@ dependencies = [
"test-case",
"thiserror",
"tokio",
"tokio-retry",
"tokio-stream",
"tokio-util",
"tonic",

View file

@ -7181,6 +7181,38 @@ rec {
}
];
};
"tokio-retry" = rec {
crateName = "tokio-retry";
version = "0.3.0";
edition = "2018";
sha256 = "0kr1hnm5dmb9gfkby88yg2xj8g6x4i4gipva0c8ca3xyxhvfnmvz";
authors = [
"Sam Rijs <srijs@airpost.net>"
];
dependencies = [
{
name = "pin-project";
packageId = "pin-project";
}
{
name = "rand";
packageId = "rand";
}
{
name = "tokio";
packageId = "tokio";
features = [ "time" ];
}
];
devDependencies = [
{
name = "tokio";
packageId = "tokio";
features = [ "full" ];
}
];
};
"tokio-stream" = rec {
crateName = "tokio-stream";
@ -8127,6 +8159,10 @@ rec {
name = "test-case";
packageId = "test-case";
}
{
name = "tokio-retry";
packageId = "tokio-retry";
}
];
features = {
"tonic-reflection" = [ "dep:tonic-reflection" ];

View file

@ -34,7 +34,8 @@ tonic-build = "0.10.2"
[dev-dependencies]
test-case = "2.2.2"
tempfile = "3.3.0"
tokio-retry = "0.3.0"
[features]
default = []
tonic-reflection = ["dep:tonic-reflection"]
tonic-reflection = ["dep:tonic-reflection"]

View file

@ -281,10 +281,12 @@ impl<W: tokio::io::AsyncWrite + Unpin> tokio::io::AsyncWrite for GRPCBlobWriter<
#[cfg(test)]
mod tests {
use std::sync::Arc;
use std::time::Duration;
use tempfile::TempDir;
use tokio::net::UnixListener;
use tokio::time;
use tokio_retry::strategy::ExponentialBackoff;
use tokio_retry::Retry;
use tokio_stream::wrappers::UnixListenerStream;
use crate::blobservice::MemoryBlobService;
@ -374,22 +376,18 @@ mod tests {
});
// wait for the socket to be created
{
let mut socket_created = false;
// TODO: exponential backoff urgently
for _try in 1..20 {
Retry::spawn(
ExponentialBackoff::from_millis(20).max_delay(Duration::from_secs(10)),
|| async {
if socket_path.exists() {
socket_created = true;
break;
Ok(())
} else {
Err(())
}
tokio::time::sleep(time::Duration::from_millis(20)).await;
}
assert!(
socket_created,
"expected socket path to eventually get created, but never happened"
);
}
},
)
.await
.expect("failed to wait for socket");
// prepare a client
let grpc_client = {