From d3ee15fa3bcf714e17a21daf098288fbabb092e3 Mon Sep 17 00:00:00 2001 From: librelois <elois@ifee.fr> Date: Mon, 30 Sep 2019 22:46:54 +0200 Subject: [PATCH] [ref] bc-db-writer: isolate CURRENT_META_DATAS update --- .../blockchain/bc-db-writer/src/blocks.rs | 19 +------- .../bc-db-writer/src/current_meta_datas.rs | 48 +++++++++++++++++++ .../blockchain/bc-db-writer/src/lib.rs | 1 + .../bc-db-writer/src/writers/requests.rs | 1 + .../blockchain/src/fork/fork_algo.rs | 3 ++ .../bc-db-tests-tools/src/mocks.rs | 2 + 6 files changed, 56 insertions(+), 18 deletions(-) create mode 100644 lib/modules/blockchain/bc-db-writer/src/current_meta_datas.rs diff --git a/lib/modules/blockchain/bc-db-writer/src/blocks.rs b/lib/modules/blockchain/bc-db-writer/src/blocks.rs index 727e05c7..6b6f8d37 100644 --- a/lib/modules/blockchain/bc-db-writer/src/blocks.rs +++ b/lib/modules/blockchain/bc-db-writer/src/blocks.rs @@ -17,19 +17,17 @@ pub mod fork_tree; -use crate::DbError; use crate::*; use dubp_block_doc::block::BlockDocumentTrait; use dubp_common_doc::traits::Document; use durs_bc_db_reader::blocks::fork_tree::ForkTree; use durs_bc_db_reader::blocks::DbBlock; use durs_bc_db_reader::constants::*; -use durs_bc_db_reader::current_meta_datas::CurrentMetaDataKey; use durs_bc_db_reader::DbValue; use unwrap::unwrap; /// Insert new head Block in databases -/// Update MAIN_BLOCK and CURRENT_META_DATAS +/// Update MAIN_BLOCK only pub fn insert_new_head_block( db: &Db, w: &mut DbWriter, @@ -38,9 +36,7 @@ pub fn insert_new_head_block( ) -> Result<(), DbError> { // Serialize datas let bin_dal_block = durs_dbs_tools::to_bytes(&dal_block)?; - let new_current_blockstamp_bytes: Vec<u8> = dal_block.blockstamp().into(); - let current_meta_datas_store = db.get_int_store(CURRENT_METAS_DATAS); let main_blocks_store = db.get_int_store(MAIN_BLOCKS); let fork_blocks_store = db.get_store(FORK_BLOCKS); @@ -51,19 +47,6 @@ pub fn insert_new_head_block( &Db::db_value(&bin_dal_block)?, )?; - // Update current blockstamp - current_meta_datas_store.put( - w.as_mut(), - CurrentMetaDataKey::CurrentBlockstamp.to_u32(), - &DbValue::Blob(&new_current_blockstamp_bytes), - )?; - // Update current common time (also named "blockchain time") - current_meta_datas_store.put( - w.as_mut(), - CurrentMetaDataKey::CurrentBlockchainTime.to_u32(), - &DbValue::U64(dal_block.block.common_time()), - )?; - if let Some(fork_tree) = fork_tree { // Insert head block in fork tree let removed_blockstamps = diff --git a/lib/modules/blockchain/bc-db-writer/src/current_meta_datas.rs b/lib/modules/blockchain/bc-db-writer/src/current_meta_datas.rs new file mode 100644 index 00000000..0ec353e3 --- /dev/null +++ b/lib/modules/blockchain/bc-db-writer/src/current_meta_datas.rs @@ -0,0 +1,48 @@ +// Copyright (C) 2017-2019 The AXIOM TEAM Association. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see <https://www.gnu.org/licenses/>. + +//! Curent meta datas storage: define write requests. + +use crate::*; +use dubp_block_doc::block::BlockDocumentTrait; +use dubp_block_doc::BlockDocument; +use dubp_common_doc::traits::Document; +use durs_bc_db_reader::constants::CURRENT_METAS_DATAS; +use durs_bc_db_reader::current_meta_datas::CurrentMetaDataKey; +use durs_bc_db_reader::DbValue; + +/// Update CURRENT_META_DATAS +pub fn update_current_meta_datas( + db: &Db, + w: &mut DbWriter, + new_current_block: &BlockDocument, +) -> Result<(), DbError> { + let new_current_blockstamp_bytes: Vec<u8> = new_current_block.blockstamp().into(); + + // Update current blockstamp + db.get_int_store(CURRENT_METAS_DATAS).put( + w.as_mut(), + CurrentMetaDataKey::CurrentBlockstamp.to_u32(), + &DbValue::Blob(&new_current_blockstamp_bytes), + )?; + // Update current common time (also named "blockchain time") + db.get_int_store(CURRENT_METAS_DATAS).put( + w.as_mut(), + CurrentMetaDataKey::CurrentBlockchainTime.to_u32(), + &DbValue::U64(new_current_block.common_time()), + )?; + + Ok(()) +} diff --git a/lib/modules/blockchain/bc-db-writer/src/lib.rs b/lib/modules/blockchain/bc-db-writer/src/lib.rs index 83eeeeb3..6e84fd0e 100644 --- a/lib/modules/blockchain/bc-db-writer/src/lib.rs +++ b/lib/modules/blockchain/bc-db-writer/src/lib.rs @@ -31,6 +31,7 @@ extern crate log; pub mod blocks; +pub mod current_meta_datas; pub mod indexes; pub mod writers; diff --git a/lib/modules/blockchain/bc-db-writer/src/writers/requests.rs b/lib/modules/blockchain/bc-db-writer/src/writers/requests.rs index fcbd528d..045dac77 100644 --- a/lib/modules/blockchain/bc-db-writer/src/writers/requests.rs +++ b/lib/modules/blockchain/bc-db-writer/src/writers/requests.rs @@ -67,6 +67,7 @@ impl BlocksDBsWriteQuery { BlocksDBsWriteQuery::WriteBlock(dal_block) => { let dal_block: DbBlock = dal_block; trace!("BlocksDBsWriteQuery::WriteBlock..."); + crate::current_meta_datas::update_current_meta_datas(db, w, &dal_block.block)?; if sync_target.is_none() || dal_block.blockstamp().id.0 + fork_window_size as u32 >= sync_target.expect("safe unwrap").id.0 diff --git a/lib/modules/blockchain/blockchain/src/fork/fork_algo.rs b/lib/modules/blockchain/blockchain/src/fork/fork_algo.rs index d01bc5cf..cf635c60 100644 --- a/lib/modules/blockchain/blockchain/src/fork/fork_algo.rs +++ b/lib/modules/blockchain/blockchain/src/fork/fork_algo.rs @@ -123,6 +123,9 @@ mod tests { // Insert mock blocks in forks_dbs db.write(|mut w| { for block in &main_branch { + durs_bc_db_writer::current_meta_datas::update_current_meta_datas( + &db, &mut w, &block, + )?; durs_bc_db_writer::blocks::insert_new_head_block( &db, &mut w, diff --git a/lib/tests-tools/bc-db-tests-tools/src/mocks.rs b/lib/tests-tools/bc-db-tests-tools/src/mocks.rs index 1f28ca62..b541a2bb 100644 --- a/lib/tests-tools/bc-db-tests-tools/src/mocks.rs +++ b/lib/tests-tools/bc-db-tests-tools/src/mocks.rs @@ -19,6 +19,7 @@ use dubp_block_doc::BlockDocument; use durs_bc_db_reader::blocks::fork_tree::ForkTree; use durs_bc_db_reader::blocks::DbBlock; use durs_bc_db_writer::blocks::{insert_new_fork_block, insert_new_head_block}; +use durs_bc_db_writer::current_meta_datas::update_current_meta_datas; use durs_bc_db_writer::{Db, DbError}; /// Warning : This function does not update the indexes and considers @@ -31,6 +32,7 @@ pub fn insert_main_block( fork_tree: Option<&mut ForkTree>, ) -> Result<(), DbError> { db_tmp.write(|mut w| { + update_current_meta_datas(db_tmp, &mut w, &block)?; insert_new_head_block( &db_tmp, &mut w, -- GitLab