diff --git a/libs/pageserver_api/src/models.rs b/libs/pageserver_api/src/models.rs index e1b7c7d08c..70024bdfca 100644 --- a/libs/pageserver_api/src/models.rs +++ b/libs/pageserver_api/src/models.rs @@ -735,7 +735,7 @@ pub struct PagestreamDbSizeRequest { #[derive(Debug, PartialEq, Eq)] pub struct PagestreamGetSlruSegmentRequest { - pub latest: bool, + pub horizon: Lsn, pub lsn: Lsn, pub kind: u8, pub segno: u32, @@ -818,17 +818,6 @@ impl PagestreamFeMessage { bytes.put_u32(req.blkno); } - Self::GetPage(req) => { - bytes.put_u8(4); - bytes.put_u64(req.horizon.0); - bytes.put_u64(req.lsn.0); - bytes.put_u32(req.rel.spcnode); - bytes.put_u32(req.rel.dbnode); - bytes.put_u32(req.rel.relnode); - bytes.put_u8(req.rel.forknum); - bytes.put_u32(req.blkno); - } - Self::DbSize(req) => { bytes.put_u8(3); bytes.put_u64(req.horizon.0); @@ -838,11 +827,22 @@ impl PagestreamFeMessage { Self::GetSlruSegment(req) => { bytes.put_u8(4); - bytes.put_u8(u8::from(req.latest)); + bytes.put_u64(req.horizon.0); bytes.put_u64(req.lsn.0); bytes.put_u8(req.kind); bytes.put_u32(req.segno); } + + Self::GetPage(req) => { + bytes.put_u8(5); + bytes.put_u64(req.horizon.0); + bytes.put_u64(req.lsn.0); + bytes.put_u32(req.rel.spcnode); + bytes.put_u32(req.rel.dbnode); + bytes.put_u32(req.rel.relnode); + bytes.put_u8(req.rel.forknum); + bytes.put_u32(req.blkno); + } } bytes.into() @@ -895,7 +895,15 @@ impl PagestreamFeMessage { lsn: Lsn::from(body.read_u64::()?), dbnode: body.read_u32::()?, })), - 4 => Ok(PagestreamFeMessage::GetPage(PagestreamGetPageRequest { + 4 => Ok(PagestreamFeMessage::GetSlruSegment( + PagestreamGetSlruSegmentRequest { + horizon: Lsn::from(body.read_u64::()?), + lsn: Lsn::from(body.read_u64::()?), + kind: body.read_u8()?, + segno: body.read_u32::()?, + }, + )), + 5 => Ok(PagestreamFeMessage::GetPage(PagestreamGetPageRequest { horizon: Lsn::from(body.read_u64::()?), lsn: Lsn::from(body.read_u64::()?), rel: RelTag { @@ -906,14 +914,6 @@ impl PagestreamFeMessage { }, blkno: body.read_u32::()?, })), - 5 => Ok(PagestreamFeMessage::GetSlruSegment( - PagestreamGetSlruSegmentRequest { - latest: body.read_u8()? != 0, - lsn: Lsn::from(body.read_u64::()?), - kind: body.read_u8()?, - segno: body.read_u32::()?, - }, - )), _ => bail!("unknown smgr message tag: {:?}", msg_tag), } } diff --git a/pageserver/src/page_service.rs b/pageserver/src/page_service.rs index 74aff21578..c1b00e995b 100644 --- a/pageserver/src/page_service.rs +++ b/pageserver/src/page_service.rs @@ -1175,7 +1175,7 @@ impl PageServerHandler { let latest_gc_cutoff_lsn = timeline.get_latest_gc_cutoff_lsn(); let lsn = - Self::wait_or_get_last_lsn(timeline, req.lsn, req.latest, &latest_gc_cutoff_lsn, ctx) + Self::wait_or_get_last_lsn(timeline, req.lsn, req.horizon, &latest_gc_cutoff_lsn, ctx) .await?; let kind = SlruKind::from_repr(req.kind) diff --git a/pgxn/neon/pagestore_smgr.c b/pgxn/neon/pagestore_smgr.c index d6298ca1a3..dd69bc7503 100644 --- a/pgxn/neon/pagestore_smgr.c +++ b/pgxn/neon/pagestore_smgr.c @@ -1063,7 +1063,7 @@ nm_pack_request(NeonRequest *msg) { NeonGetSlruSegmentRequest *msg_req = (NeonGetSlruSegmentRequest *) msg; - pq_sendbyte(&s, msg_req->req.latest); + pq_sendint64(&s, msg_req->req.horizon); pq_sendint64(&s, msg_req->req.lsn); pq_sendbyte(&s, msg_req->kind); pq_sendint32(&s, msg_req->segno); @@ -1265,7 +1265,7 @@ nm_to_string(NeonMessage *msg) appendStringInfo(&s, ", \"kind\": %u", msg_req->kind); appendStringInfo(&s, ", \"segno\": %u", msg_req->segno); appendStringInfo(&s, ", \"lsn\": \"%X/%X\"", LSN_FORMAT_ARGS(msg_req->req.lsn)); - appendStringInfo(&s, ", \"latest\": %d", msg_req->req.latest); + appendStringInfo(&s, ", \"horizon\": \"%X/%X\"", LSN_FORMAT_ARGS(msg_req->req.horizon)); appendStringInfoChar(&s, '}'); break; } @@ -2832,7 +2832,7 @@ neon_read_slru_segment(SMgrRelation reln, const char* path, int segno, void* buf NeonResponse *resp; NeonGetSlruSegmentRequest request = { .req.tag = T_NeonGetSlruSegmentRequest, - .req.latest = false, + .req.horizon = InvalidXLogRecPtr, .req.lsn = request_lsn, .kind = kind,