From 2b01d661bd506ca000cda224426f5ebdd707fc6c Mon Sep 17 00:00:00 2001 From: Christian Schwarz Date: Fri, 3 Nov 2023 11:57:52 +0000 Subject: [PATCH] define no-op request/response type inside pagestream & impl server side --- libs/pageserver_api/src/models.rs | 14 ++++++++++++++ pageserver/src/metrics.rs | 1 + pageserver/src/page_service.rs | 5 +++++ pgxn/neon/pagestore_client.h | 2 ++ trace/src/main.rs | 1 + 5 files changed, 23 insertions(+) diff --git a/libs/pageserver_api/src/models.rs b/libs/pageserver_api/src/models.rs index 098cd4c4e9..1a64bd0fc5 100644 --- a/libs/pageserver_api/src/models.rs +++ b/libs/pageserver_api/src/models.rs @@ -572,15 +572,18 @@ pub enum PagestreamFeMessage { Nblocks(PagestreamNblocksRequest), GetPage(PagestreamGetPageRequest), DbSize(PagestreamDbSizeRequest), + NoOp, } // Wrapped in libpq CopyData +#[derive(Debug)] pub enum PagestreamBeMessage { Exists(PagestreamExistsResponse), Nblocks(PagestreamNblocksResponse), GetPage(PagestreamGetPageResponse), Error(PagestreamErrorResponse), DbSize(PagestreamDbSizeResponse), + NoOp, } #[derive(Debug, PartialEq, Eq)] @@ -679,6 +682,10 @@ impl PagestreamFeMessage { bytes.put_u64(req.lsn.0); bytes.put_u32(req.dbnode); } + + Self::NoOp => { + bytes.put_u8(4); + } } bytes.into() @@ -729,6 +736,7 @@ impl PagestreamFeMessage { lsn: Lsn::from(body.read_u64::()?), dbnode: body.read_u32::()?, })), + 4 => Ok(PagestreamFeMessage::NoOp), _ => bail!("unknown smgr message tag: {:?}", msg_tag), } } @@ -763,6 +771,9 @@ impl PagestreamBeMessage { bytes.put_u8(104); /* tag from pagestore_client.h */ bytes.put_i64(resp.db_size); } + Self::NoOp => { + bytes.put_u8(105); + } } bytes.into() @@ -794,6 +805,9 @@ impl PagestreamBeMessage { })) } 104 => todo!(), + 105 => { + Ok(PagestreamBeMessage::NoOp) + }, _ => bail!("unknown tag: {:?}", msg_tag), } } diff --git a/pageserver/src/metrics.rs b/pageserver/src/metrics.rs index a1a999fb17..7a13e935b6 100644 --- a/pageserver/src/metrics.rs +++ b/pageserver/src/metrics.rs @@ -760,6 +760,7 @@ pub enum SmgrQueryType { GetRelSize, GetPageAtLsn, GetDbSize, + NoOp, } #[derive(Debug)] diff --git a/pageserver/src/page_service.rs b/pageserver/src/page_service.rs index 5193b3c5ff..32075c033a 100644 --- a/pageserver/src/page_service.rs +++ b/pageserver/src/page_service.rs @@ -491,6 +491,11 @@ impl PageServerHandler { span, ) } + PagestreamFeMessage::NoOp => { + let _timer = metrics.start_timer(metrics::SmgrQueryType::NoOp); + let span = tracing::info_span!("no_op"); + (Ok(PagestreamBeMessage::NoOp), span) + } }; if let Err(e) = &response { diff --git a/pgxn/neon/pagestore_client.h b/pgxn/neon/pagestore_client.h index d61f74b5c8..386ae13387 100644 --- a/pgxn/neon/pagestore_client.h +++ b/pgxn/neon/pagestore_client.h @@ -33,6 +33,7 @@ typedef enum T_NeonNblocksRequest, T_NeonGetPageRequest, T_NeonDbSizeRequest, + T_NeonPagestoreNoopRequest, /* pagestore -> pagestore_client */ T_NeonExistsResponse = 100, @@ -40,6 +41,7 @@ typedef enum T_NeonGetPageResponse, T_NeonErrorResponse, T_NeonDbSizeResponse, + T_NeonPagestoreNoopResponse, } NeonMessageTag; /* base struct for c-style inheritance */ diff --git a/trace/src/main.rs b/trace/src/main.rs index ddd970e95d..9b20ed99c4 100644 --- a/trace/src/main.rs +++ b/trace/src/main.rs @@ -74,6 +74,7 @@ fn analyze_trace(mut reader: R) { prev = Some(req); } PagestreamFeMessage::DbSize(_) => {} + PagestreamFeMessage::NoOp => {}, }; }