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:
parent
c0376995c9
commit
b6bf3a87f1
4 changed files with 63 additions and 16 deletions
12
tvix/Cargo.lock
generated
12
tvix/Cargo.lock
generated
|
@ -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",
|
||||
|
|
|
@ -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" ];
|
||||
|
|
|
@ -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"]
|
||||
|
|
|
@ -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 = {
|
||||
|
|
Loading…
Reference in a new issue