From 9ebb922832f537d9573978c9d34c00c175e21418 Mon Sep 17 00:00:00 2001 From: Christian Schwarz Date: Thu, 11 Jan 2024 11:31:38 +0000 Subject: [PATCH] hack for testing asyncification: repurpose pagebench initial logical size trigger benchmark to induce unbounded concurrency --- .../cmd/trigger_initial_size_calculation.rs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/pageserver/pagebench/src/cmd/trigger_initial_size_calculation.rs b/pageserver/pagebench/src/cmd/trigger_initial_size_calculation.rs index 98938d780a..18431515f8 100644 --- a/pageserver/pagebench/src/cmd/trigger_initial_size_calculation.rs +++ b/pageserver/pagebench/src/cmd/trigger_initial_size_calculation.rs @@ -58,10 +58,21 @@ async fn main_impl(args: Args) -> anyhow::Result<()> { for tl in timelines { let mgmt_api_client = Arc::clone(&mgmt_api_client); js.spawn(async move { - let info = mgmt_api_client - .timeline_info(tl.tenant_id, tl.timeline_id, ForceAwaitLogicalSize::Yes) - .await - .unwrap(); + + // detach-attach to attach with emptied initial logical size cache + mgmt_api_client.tenant_reset(tl.tenant_id).await.unwrap(); + + let info = loop { + let res = mgmt_api_client + .timeline_info(tl.tenant_id, tl.timeline_id, ForceAwaitLogicalSize::Yes) + .await; + match res { + Ok(info) => break info, + Err(_) => { + tokio::time::sleep(std::time::Duration::from_secs(1).into()).await; + } + } + }; // Polling should not be strictly required here since we await // for the initial logical size, however it's possible for the request