[thin_dump] fix overrides
This commit is contained in:
parent
56ea130650
commit
959b04ecb5
@ -265,33 +265,40 @@ fn emit_entries(
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FIXME: surely this is a standard fun?
|
||||||
|
fn override_<'a, T>(opt: &'a Option<T>, default: &'a T) -> &'a T {
|
||||||
|
match opt {
|
||||||
|
Some(v) => v,
|
||||||
|
None => default,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn dump_metadata(
|
pub fn dump_metadata(
|
||||||
engine: Arc<dyn IoEngine>,
|
engine: Arc<dyn IoEngine>,
|
||||||
out: &mut dyn MetadataVisitor,
|
out: &mut dyn MetadataVisitor,
|
||||||
sb: &Superblock,
|
sb: &Superblock,
|
||||||
md: &Metadata,
|
md: &Metadata,
|
||||||
|
overrides: &SuperblockOverrides,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let data_root = unpack::<SMRoot>(&sb.data_sm_root[0..])?;
|
let data_root = unpack::<SMRoot>(&sb.data_sm_root[0..])?;
|
||||||
let out_sb = ir::Superblock {
|
let out_sb = ir::Superblock {
|
||||||
uuid: "".to_string(),
|
uuid: "".to_string(),
|
||||||
time: sb.time,
|
time: sb.time,
|
||||||
transaction: sb.transaction_id,
|
transaction: *override_(&overrides.transaction_id, &sb.transaction_id),
|
||||||
flags: if sb.flags.needs_check { Some(1) } else { None },
|
flags: if sb.flags.needs_check { Some(1) } else { None },
|
||||||
version: Some(2),
|
version: Some(2),
|
||||||
data_block_size: sb.data_block_size,
|
data_block_size: *override_(&overrides.data_block_size, &sb.data_block_size),
|
||||||
nr_data_blocks: data_root.nr_blocks,
|
nr_data_blocks: *override_(&overrides.nr_data_blocks, &data_root.nr_blocks),
|
||||||
metadata_snap: None,
|
metadata_snap: None,
|
||||||
};
|
};
|
||||||
out.superblock_b(&out_sb)?;
|
out.superblock_b(&out_sb)?;
|
||||||
|
|
||||||
// ctx.report.set_title("Dumping shared regions");
|
|
||||||
for d in &md.defs {
|
for d in &md.defs {
|
||||||
out.def_shared_b(&format!("{}", d.def_id))?;
|
out.def_shared_b(&format!("{}", d.def_id))?;
|
||||||
emit_entries(engine.clone(), out, &d.map.entries)?;
|
emit_entries(engine.clone(), out, &d.map.entries)?;
|
||||||
out.def_shared_e()?;
|
out.def_shared_e()?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ctx.report.set_title("Dumping devices");
|
|
||||||
for dev in &md.devs {
|
for dev in &md.devs {
|
||||||
let device = ir::Device {
|
let device = ir::Device {
|
||||||
dev_id: dev.thin_id,
|
dev_id: dev.thin_id,
|
||||||
@ -336,7 +343,7 @@ pub fn dump(opts: ThinDumpOptions) -> Result<()> {
|
|||||||
}
|
}
|
||||||
let mut out = xml::XmlWriter::new(writer);
|
let mut out = xml::XmlWriter::new(writer);
|
||||||
|
|
||||||
dump_metadata(ctx.engine, &mut out, &sb, &md)
|
dump_metadata(ctx.engine, &mut out, &sb, &md, &opts.overrides)
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------
|
//------------------------------------------
|
||||||
|
@ -72,7 +72,7 @@ pub fn repair(opts: ThinRepairOptions) -> Result<()> {
|
|||||||
);
|
);
|
||||||
let mut restorer = Restorer::new(&mut w, ctx.report);
|
let mut restorer = Restorer::new(&mut w, ctx.report);
|
||||||
|
|
||||||
dump_metadata(ctx.engine_in, &mut restorer, &sb, &md)
|
dump_metadata(ctx.engine_in, &mut restorer, &sb, &md, &opts.overrides)
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------
|
//------------------------------------------
|
||||||
|
@ -145,33 +145,27 @@ fn no_stderr() -> Result<()> {
|
|||||||
// test superblock overriding & repair
|
// test superblock overriding & repair
|
||||||
// TODO: share with thin_repair
|
// TODO: share with thin_repair
|
||||||
|
|
||||||
#[cfg(not(feature = "rust_tests"))]
|
|
||||||
fn override_something(flag: &str, value: &str, pattern: &str) -> Result<()> {
|
fn override_something(flag: &str, value: &str, pattern: &str) -> Result<()> {
|
||||||
let mut td = TestDir::new()?;
|
let mut td = TestDir::new()?;
|
||||||
let md = mk_valid_md(&mut td)?;
|
let md = mk_valid_md(&mut td)?;
|
||||||
let output = run_ok_raw(thin_dump_cmd(args![&md, flag, value]))?;
|
let output = run_ok_raw(thin_dump_cmd(args![&md, flag, value]))?;
|
||||||
|
|
||||||
if !cfg!(feature = "rust_tests") {
|
assert_eq!(output.stderr.len(), 0);
|
||||||
assert_eq!(output.stderr.len(), 0);
|
|
||||||
}
|
|
||||||
assert!(std::str::from_utf8(&output.stdout[0..])?.contains(pattern));
|
assert!(std::str::from_utf8(&output.stdout[0..])?.contains(pattern));
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
#[cfg(not(feature = "rust_tests"))]
|
|
||||||
fn override_transaction_id() -> Result<()> {
|
fn override_transaction_id() -> Result<()> {
|
||||||
override_something("--transaction-id", "2345", "transaction=\"2345\"")
|
override_something("--transaction-id", "2345", "transaction=\"2345\"")
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
#[cfg(not(feature = "rust_tests"))]
|
|
||||||
fn override_data_block_size() -> Result<()> {
|
fn override_data_block_size() -> Result<()> {
|
||||||
override_something("--data-block-size", "8192", "data_block_size=\"8192\"")
|
override_something("--data-block-size", "8192", "data_block_size=\"8192\"")
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
#[cfg(not(feature = "rust_tests"))]
|
|
||||||
fn override_nr_data_blocks() -> Result<()> {
|
fn override_nr_data_blocks() -> Result<()> {
|
||||||
override_something("--nr-data-blocks", "234500", "nr_data_blocks=\"234500\"")
|
override_something("--nr-data-blocks", "234500", "nr_data_blocks=\"234500\"")
|
||||||
}
|
}
|
||||||
@ -206,7 +200,6 @@ fn repair_superblock() -> Result<()> {
|
|||||||
// TODO: share with thin_repair
|
// TODO: share with thin_repair
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
#[cfg(not(feature = "rust_tests"))]
|
|
||||||
fn missing_transaction_id() -> Result<()> {
|
fn missing_transaction_id() -> Result<()> {
|
||||||
let mut td = TestDir::new()?;
|
let mut td = TestDir::new()?;
|
||||||
let md = mk_valid_md(&mut td)?;
|
let md = mk_valid_md(&mut td)?;
|
||||||
@ -243,7 +236,6 @@ fn missing_data_block_size() -> Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
#[cfg(not(feature = "rust_tests"))]
|
|
||||||
fn missing_nr_data_blocks() -> Result<()> {
|
fn missing_nr_data_blocks() -> Result<()> {
|
||||||
let mut td = TestDir::new()?;
|
let mut td = TestDir::new()?;
|
||||||
let md = mk_valid_md(&mut td)?;
|
let md = mk_valid_md(&mut td)?;
|
||||||
|
Loading…
Reference in New Issue
Block a user