LCOV - code coverage report
Current view: top level - pageserver/src/walredo/process - protocol.rs (source / functions) Coverage Total Hit
Test: 32f4a56327bc9da697706839ed4836b2a00a408f.info Lines: 100.0 % 36 36
Test Date: 2024-02-07 07:37:29 Functions: 45.5 % 11 5

            Line data    Source code
       1              : use bytes::BufMut;
       2              : use pageserver_api::reltag::RelTag;
       3              : use serde::Serialize;
       4              : use utils::bin_ser::BeSer;
       5              : use utils::lsn::Lsn;
       6              : 
       7              : ///
       8              : /// `RelTag` + block number (`blknum`) gives us a unique id of the page in the cluster.
       9              : ///
      10              : /// In Postgres `BufferTag` structure is used for exactly the same purpose.
      11              : /// [See more related comments here](https://github.com/postgres/postgres/blob/99c5852e20a0987eca1c38ba0c09329d4076b6a0/src/include/storage/buf_internals.h#L91).
      12              : ///
      13      6321580 : #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Serialize)]
      14              : pub(crate) struct BufferTag {
      15              :     pub rel: RelTag,
      16              :     pub blknum: u32,
      17              : }
      18              : 
      19      2856626 : pub(crate) fn build_begin_redo_for_block_msg(tag: BufferTag, buf: &mut Vec<u8>) {
      20      2856626 :     let len = 4 + 1 + 4 * 4;
      21      2856626 : 
      22      2856626 :     buf.put_u8(b'B');
      23      2856626 :     buf.put_u32(len as u32);
      24      2856626 : 
      25      2856626 :     tag.ser_into(buf)
      26      2856626 :         .expect("serialize BufferTag should always succeed");
      27      2856626 : }
      28              : 
      29       608328 : pub(crate) fn build_push_page_msg(tag: BufferTag, base_img: &[u8], buf: &mut Vec<u8>) {
      30       608328 :     assert!(base_img.len() == 8192);
      31              : 
      32       608328 :     let len = 4 + 1 + 4 * 4 + base_img.len();
      33       608328 : 
      34       608328 :     buf.put_u8(b'P');
      35       608328 :     buf.put_u32(len as u32);
      36       608328 :     tag.ser_into(buf)
      37       608328 :         .expect("serialize BufferTag should always succeed");
      38       608328 :     buf.put(base_img);
      39       608328 : }
      40              : 
      41     62894968 : pub(crate) fn build_apply_record_msg(endlsn: Lsn, rec: &[u8], buf: &mut Vec<u8>) {
      42     62894968 :     let len = 4 + 8 + rec.len();
      43     62894968 : 
      44     62894968 :     buf.put_u8(b'A');
      45     62894968 :     buf.put_u32(len as u32);
      46     62894968 :     buf.put_u64(endlsn.0);
      47     62894968 :     buf.put(rec);
      48     62894968 : }
      49              : 
      50      2856626 : pub(crate) fn build_get_page_msg(tag: BufferTag, buf: &mut Vec<u8>) {
      51      2856626 :     let len = 4 + 1 + 4 * 4;
      52      2856626 : 
      53      2856626 :     buf.put_u8(b'G');
      54      2856626 :     buf.put_u32(len as u32);
      55      2856626 :     tag.ser_into(buf)
      56      2856626 :         .expect("serialize BufferTag should always succeed");
      57      2856626 : }
        

Generated by: LCOV version 2.1-beta