mirror of
https://github.com/neondatabase/neon.git
synced 2026-05-24 08:30:37 +00:00
- Rename "filename" types which no longer map directly to a filename (LayerFileName -> LayerName) - Add a -v1- part to local layer paths to smooth the path to future updates (we anticipate a -v2- that uses checksums later) - Rename methods that refer to the string-ized version of a LayerName to no longer be called "filename" - Refactor reconcile() function to use a LocalLayerFileMetadata type that includes the local path, rather than carrying local path separately in a tuple and unwrap()'ing it later.
39 lines
1.3 KiB
Rust
39 lines
1.3 KiB
Rust
use std::collections::HashMap;
|
|
|
|
use anyhow::Context;
|
|
use camino::Utf8PathBuf;
|
|
use pageserver::tenant::remote_timeline_client::index::IndexLayerMetadata;
|
|
use pageserver::tenant::storage_layer::LayerName;
|
|
use pageserver::tenant::{metadata::TimelineMetadata, IndexPart};
|
|
use utils::lsn::Lsn;
|
|
|
|
#[derive(clap::Subcommand)]
|
|
pub(crate) enum IndexPartCmd {
|
|
Dump { path: Utf8PathBuf },
|
|
}
|
|
|
|
pub(crate) async fn main(cmd: &IndexPartCmd) -> anyhow::Result<()> {
|
|
match cmd {
|
|
IndexPartCmd::Dump { path } => {
|
|
let bytes = tokio::fs::read(path).await.context("read file")?;
|
|
let des: IndexPart = IndexPart::from_s3_bytes(&bytes).context("deserialize")?;
|
|
#[derive(serde::Serialize)]
|
|
struct Output<'a> {
|
|
layer_metadata: &'a HashMap<LayerName, IndexLayerMetadata>,
|
|
disk_consistent_lsn: Lsn,
|
|
timeline_metadata: &'a TimelineMetadata,
|
|
}
|
|
|
|
let output = Output {
|
|
layer_metadata: &des.layer_metadata,
|
|
disk_consistent_lsn: des.get_disk_consistent_lsn(),
|
|
timeline_metadata: &des.metadata,
|
|
};
|
|
|
|
let output = serde_json::to_string_pretty(&output).context("serialize output")?;
|
|
println!("{output}");
|
|
Ok(())
|
|
}
|
|
}
|
|
}
|