[all (rust)] Pull out structures for intermediate representation

Also fix the data type for thin timestamp
This commit is contained in:
Ming-Hung Tsai
2021-07-08 17:04:40 +08:00
parent 6d31d4def2
commit 7002a8ae8d
14 changed files with 205 additions and 179 deletions

View File

@ -18,14 +18,15 @@ use crate::pdata::unpack::*;
use crate::report::*;
use crate::thin::block_time::*;
use crate::thin::device_detail::*;
use crate::thin::ir::{self, MetadataVisitor};
use crate::thin::runs::*;
use crate::thin::superblock::*;
use crate::thin::xml::{self, MetadataVisitor};
use crate::thin::xml;
//------------------------------------------
struct RunBuilder {
run: Option<xml::Map>,
run: Option<ir::Map>,
}
impl RunBuilder {
@ -33,12 +34,12 @@ impl RunBuilder {
RunBuilder { run: None }
}
fn next(&mut self, thin_block: u64, data_block: u64, time: u32) -> Option<xml::Map> {
use xml::Map;
fn next(&mut self, thin_block: u64, data_block: u64, time: u32) -> Option<ir::Map> {
use ir::Map;
match self.run {
None => {
self.run = Some(xml::Map {
self.run = Some(ir::Map {
thin_begin: thin_block,
data_begin: data_block,
time,
@ -46,7 +47,7 @@ impl RunBuilder {
});
None
}
Some(xml::Map {
Some(ir::Map {
thin_begin,
data_begin,
time: mtime,
@ -70,7 +71,7 @@ impl RunBuilder {
}
}
fn complete(&mut self) -> Option<xml::Map> {
fn complete(&mut self) -> Option<ir::Map> {
self.run.take()
}
}
@ -78,7 +79,7 @@ impl RunBuilder {
//------------------------------------------
struct MVInner<'a> {
md_out: &'a mut dyn xml::MetadataVisitor,
md_out: &'a mut dyn MetadataVisitor,
builder: RunBuilder,
}
@ -89,7 +90,7 @@ struct MappingVisitor<'a> {
//------------------------------------------
impl<'a> MappingVisitor<'a> {
fn new(md_out: &'a mut dyn xml::MetadataVisitor) -> MappingVisitor<'a> {
fn new(md_out: &'a mut dyn MetadataVisitor) -> MappingVisitor<'a> {
MappingVisitor {
inner: Mutex::new(MVInner {
md_out,
@ -516,7 +517,7 @@ where
Ok(())
}
fn emit_leaves(ctx: &Context, out: &mut dyn xml::MetadataVisitor, ls: &[u64]) -> Result<()> {
fn emit_leaves(ctx: &Context, out: &mut dyn MetadataVisitor, ls: &[u64]) -> Result<()> {
let mut v = MappingVisitor::new(out);
let proc = |b| {
emit_leaf(&mut v, &b)?;
@ -560,9 +561,9 @@ fn emit_entries<W: Write>(
fn dump_metadata(ctx: &Context, w: &mut dyn Write, sb: &Superblock, md: &Metadata) -> Result<()> {
let data_root = unpack::<SMRoot>(&sb.data_sm_root[0..])?;
let mut out = xml::XmlWriter::new(w);
let xml_sb = xml::Superblock {
let xml_sb = ir::Superblock {
uuid: "".to_string(),
time: sb.time as u64,
time: sb.time,
transaction: sb.transaction_id,
flags: None,
version: Some(2),
@ -581,12 +582,12 @@ fn dump_metadata(ctx: &Context, w: &mut dyn Write, sb: &Superblock, md: &Metadat
ctx.report.set_title("Dumping devices");
for dev in &md.devs {
let device = xml::Device {
let device = ir::Device {
dev_id: dev.thin_id,
mapped_blocks: dev.detail.mapped_blocks,
transaction: dev.detail.transaction_id,
creation_time: dev.detail.creation_time as u64,
snap_time: dev.detail.snapshotted_time as u64,
creation_time: dev.detail.creation_time,
snap_time: dev.detail.snapshotted_time,
};
out.device_b(&device)?;
emit_entries(ctx, &mut out, &dev.map.entries)?;