diff --git a/lib/modules/blockchain/bc-db-writer/src/blocks.rs b/lib/modules/blockchain/bc-db-writer/src/blocks.rs index 727e05c7f643cff64a7ace69b09ef1e6b6a57b8a..6b6f8d3710e71eed6046de91c27b730f5371be18 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 0000000000000000000000000000000000000000..0ec353e3041fd8ec760e931013ed828e35bd6732 --- /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 83eeeeb3e98f3b9c827bf40b57cbf0d02f6e454a..6e84fd0e815be172d508e8b18d3cc972cf4893c2 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 fcbd528da38d0f7c178674547fda3c1bae5b149d..045dac7777a40e71a8a076e98c012437df0f4895 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 d01bc5cf501fa4ab641352bc8fbbe1bb4bda0f81..cf635c60ab72f37a80fabf91c65388a9ec149276 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 1f28ca62ce642fd2cb79b3c89db60fee00191f7f..b541a2bb014b7948e69f72452d6a3366793eb202 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,