From ad0c5410d73d607f6aa70758ea15e80774f8534e Mon Sep 17 00:00:00 2001 From: Konstantin Knizhnik Date: Sat, 29 Oct 2022 22:49:57 +0300 Subject: [PATCH] Limit number of buffered responses --- pageserver/src/page_service.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pageserver/src/page_service.rs b/pageserver/src/page_service.rs index d139c9dedd..985026b2ac 100644 --- a/pageserver/src/page_service.rs +++ b/pageserver/src/page_service.rs @@ -275,6 +275,7 @@ impl PageServerHandler { pgb.flush().await?; let metrics = PageRequestMetrics::new(&tenant_id, &timeline_id); + let mut n_buffered_responses = 0usize; loop { let msg = tokio::select! { @@ -312,7 +313,7 @@ impl PageServerHandler { } PagestreamFeMessage::GetPage(req) => { let _timer = metrics.get_page_at_lsn.start_timer(); - do_flush = !req.prefetch; + do_flush = !req.prefetch || n_buffered_responses > MAX_BUFFERED_RESPONSES; self.handle_get_page_at_lsn_request(&timeline, &req).await } PagestreamFeMessage::DbSize(req) => { @@ -331,8 +332,10 @@ impl PageServerHandler { }); pgb.write_message(&BeMessage::CopyData(&response.serialize()))?; + n_buffered_responses += 1; if do_flush { pgb.flush().await?; + n_buffered_responses = 0; } } Ok(())