mirror of
https://github.com/neondatabase/neon.git
synced 2026-07-06 05:30:38 +00:00
(De)Serialize Lsn and Key in LayerInfo in human-readable format
This commit is contained in:
@@ -3,6 +3,7 @@ use std::{
|
||||
fmt,
|
||||
num::{NonZeroU64, NonZeroUsize},
|
||||
ops::Range,
|
||||
str::FromStr,
|
||||
};
|
||||
|
||||
use byteorder::{BigEndian, ByteOrder, ReadBytesExt, BE};
|
||||
@@ -237,28 +238,45 @@ pub struct LayerMapInfo {
|
||||
pub historic_layers: BTreeSet<HistoricLayerInfo>,
|
||||
}
|
||||
|
||||
#[serde_as]
|
||||
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Copy, Clone, Serialize, Deserialize)]
|
||||
#[serde(tag = "kind")]
|
||||
pub enum InMemoryLayerInfo {
|
||||
Open { lsn_start: Lsn },
|
||||
Frozen { lsn_start: Lsn, lsn_end: Lsn },
|
||||
Open {
|
||||
#[serde_as(as = "DisplayFromStr")]
|
||||
lsn_start: Lsn,
|
||||
},
|
||||
Frozen {
|
||||
#[serde_as(as = "DisplayFromStr")]
|
||||
lsn_start: Lsn,
|
||||
#[serde_as(as = "DisplayFromStr")]
|
||||
lsn_end: Lsn,
|
||||
},
|
||||
}
|
||||
|
||||
#[serde_as]
|
||||
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Serialize, Deserialize)]
|
||||
#[serde(tag = "kind")]
|
||||
pub enum HistoricLayerInfo {
|
||||
Delta {
|
||||
layer_file_name: String,
|
||||
#[serde_as(as = "DisplayFromStr")]
|
||||
key_start: Key,
|
||||
#[serde_as(as = "DisplayFromStr")]
|
||||
key_end: Key,
|
||||
#[serde_as(as = "DisplayFromStr")]
|
||||
lsn_start: Lsn,
|
||||
#[serde_as(as = "DisplayFromStr")]
|
||||
lsn_end: Lsn,
|
||||
remote: bool,
|
||||
},
|
||||
Image {
|
||||
layer_file_name: String,
|
||||
#[serde_as(as = "DisplayFromStr")]
|
||||
key_start: Key,
|
||||
#[serde_as(as = "DisplayFromStr")]
|
||||
key_end: Key,
|
||||
#[serde_as(as = "DisplayFromStr")]
|
||||
lsn_start: Lsn,
|
||||
remote: bool,
|
||||
},
|
||||
@@ -625,10 +643,6 @@ pub fn key_range_size(key_range: &Range<Key>) -> u32 {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn singleton_range(key: Key) -> Range<Key> {
|
||||
key..key.next()
|
||||
}
|
||||
|
||||
impl fmt::Display for Key {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(
|
||||
@@ -639,6 +653,14 @@ impl fmt::Display for Key {
|
||||
}
|
||||
}
|
||||
|
||||
impl FromStr for Key {
|
||||
type Err = anyhow::Error;
|
||||
|
||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||
Self::from_hex(s)
|
||||
}
|
||||
}
|
||||
|
||||
impl Key {
|
||||
pub const MIN: Key = Key {
|
||||
field1: u8::MIN,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use pageserver_api::models::{key_range_size, singleton_range, Key};
|
||||
use pageserver_api::models::{key_range_size, Key};
|
||||
use postgres_ffi::BLCKSZ;
|
||||
use std::ops::Range;
|
||||
|
||||
@@ -102,7 +102,7 @@ impl KeySpaceAccum {
|
||||
}
|
||||
|
||||
pub fn add_key(&mut self, key: Key) {
|
||||
self.add_range(singleton_range(key))
|
||||
self.add_range(key..key.next())
|
||||
}
|
||||
|
||||
pub fn add_range(&mut self, range: Range<Key>) {
|
||||
|
||||
Reference in New Issue
Block a user