From 94086784d81a6dcfbbdcd9bd6a53af106ce9f814 Mon Sep 17 00:00:00 2001 From: Georgy Moshkin <gmoshkin@picodata.io> Date: Fri, 2 Jun 2023 14:01:12 +0300 Subject: [PATCH] refactor: move Clusterwide::space_dumps out of the macro --- src/storage.rs | 55 +++++++++++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 23 deletions(-) diff --git a/src/storage.rs b/src/storage.rs index a965b29c56..f9912097d1 100644 --- a/src/storage.rs +++ b/src/storage.rs @@ -295,31 +295,12 @@ macro_rules! define_clusterwide_spaces { Ok(()) } - /// This doesn't have `&self` parameter, because it is called from - /// RaftSpaceAccess, which doesn't have a reference to Node at least - /// for now. - pub fn snapshot_data() -> tarantool::Result<SnapshotData> { - let mut space_dumps = vec![ + #[inline(always)] + pub fn internal_space_dumps() -> tarantool::Result<Vec<SpaceDump>> { + let res = vec![ $( Self::space_dump(&$ClusterwideSpace::$cw_space_var)?, )+ ]; - - let pico_space = space_by_name(&ClusterwideSpace::Space)?; - let iter = pico_space.select(IteratorType::All, &())?; - for tuple in iter { - let space_def: SpaceDef = tuple.decode()?; - space_dumps.push(Self::space_dump(&space_def.name)?); - } - - let pico_property = space_by_id(ClusterwideSpaceId::Property.value())?; - let tuple = pico_property.get(&[PropertyName::GlobalSchemaVersion.as_str()])?; - let mut schema_version = 0; - if let Some(tuple) = tuple { - if let Some(v) = tuple.field(1)? { - schema_version = v; - } - } - - Ok(SnapshotData { schema_version, space_dumps }) + Ok(res) } } @@ -503,6 +484,34 @@ define_clusterwide_spaces! { } impl Clusterwide { + // This doesn't have `&self` parameter, because it is called from + // RaftSpaceAccess, which doesn't have a reference to Node at least + // for now. + pub fn snapshot_data() -> tarantool::Result<SnapshotData> { + let mut space_dumps = Self::internal_space_dumps()?; + + let pico_space = space_by_name(&ClusterwideSpace::Space)?; + let iter = pico_space.select(IteratorType::All, &())?; + for tuple in iter { + let space_def: SpaceDef = tuple.decode()?; + space_dumps.push(Self::space_dump(&space_def.name)?); + } + + let pico_property = space_by_id(ClusterwideSpaceId::Property.value())?; + let tuple = pico_property.get(&[PropertyName::GlobalSchemaVersion.as_str()])?; + let mut schema_version = 0; + if let Some(tuple) = tuple { + if let Some(v) = tuple.field(1)? { + schema_version = v; + } + } + + Ok(SnapshotData { + schema_version, + space_dumps, + }) + } + fn space_dump(space_name: &str) -> tarantool::Result<SpaceDump> { let space = space_by_name(space_name)?; let mut array_writer = ArrayWriter::from_vec(Vec::with_capacity(space.bsize()?)); -- GitLab