pub struct PageHeader {
pub shard: u32,
pub page_addr: u64,
pub used: u32,
pub dead_bytes: u32,
pub epoch: u32,
}Expand description
The header at the front of a log page.
Fields§
§shard: u32Which shard owns this page. Two shards never touch each other’s pages, so this is a check rather than a lookup, and it is the check that catches a segment allocated to two shards at once.
page_addr: u64The log address of byte zero of the payload, meaning of byte 32 of the page. Log addresses are logically infinite, so this is what maps a physical segment back to a position in the log.
used: u32Bytes of the payload that have been written, header excluded.
dead_bytes: u32Of those, how many belong to records the index no longer points at.
Compaction reads this and nothing else to decide what to do (06
section 5).
epoch: u32The epoch the page was last written in.
Implementations§
Source§impl PageHeader
impl PageHeader
Sourcepub fn encode(&self, page: &mut [u8])
pub fn encode(&self, page: &mut [u8])
Writes the header and its checksum into the first 32 bytes of page.
§Panics
If page is shorter than PAGE_HEADER_LEN.
Sourcepub fn decode(page: &[u8]) -> Result<PageHeader>
pub fn decode(page: &[u8]) -> Result<PageHeader>
Reads the header back, checking the magic and the checksum.
Sourcepub fn dead_fraction(&self) -> f64
pub fn dead_fraction(&self) -> f64
The fraction of this page that is dead, between 0 and 1.
An empty page is 0 rather than a division by zero, because an empty page is not worth compacting and that is the only question this answers.
Sourcepub fn wants_compaction(&self) -> bool
pub fn wants_compaction(&self) -> bool
Whether this page is worth compacting, at 06 section 5’s threshold.
Trait Implementations§
Source§impl Clone for PageHeader
impl Clone for PageHeader
Source§fn clone(&self) -> PageHeader
fn clone(&self) -> PageHeader
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more