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