From 9de4b9a6909b09275f03f30e4a6dfda1912e2c3f Mon Sep 17 00:00:00 2001
From: librelois <elois@ifee.fr>
Date: Sun, 3 Nov 2019 22:52:23 +0100
Subject: [PATCH] [fix] bc: apply certs: get idty request must be use parent
 transaction

---
 .../bc-db-reader/src/indexes/identities.rs    | 19 +++++--------------
 .../bc-db-writer/src/indexes/certs.rs         |  2 +-
 .../bc-db-writer/src/indexes/identities.rs    |  9 ++++++---
 lib/modules/blockchain/blockchain/src/dbex.rs | 12 ++++++++----
 4 files changed, 20 insertions(+), 22 deletions(-)

diff --git a/lib/modules-lib/bc-db-reader/src/indexes/identities.rs b/lib/modules-lib/bc-db-reader/src/indexes/identities.rs
index 500e5ce5..c3219da3 100644
--- a/lib/modules-lib/bc-db-reader/src/indexes/identities.rs
+++ b/lib/modules-lib/bc-db-reader/src/indexes/identities.rs
@@ -112,7 +112,7 @@ pub fn get_identities<DB: DbReadable>(
         db.read(|r| {
             let greatest_wot_id = crate::current_meta_datas::get_greatest_wot_id_(db, r)?;
             for wot_id in 0..=greatest_wot_id.0 {
-                if let Some(db_idty) = get_identity_by_wot_id_(db, r, WotId(wot_id))? {
+                if let Some(db_idty) = get_identity_by_wot_id(db, r, WotId(wot_id))? {
                     if filters
                         .paging
                         .check_created_on(db_idty.idty_doc.blockstamp().id, current_block_id)
@@ -152,7 +152,7 @@ pub fn get_identity_by_pubkey_<DB: DbReadable, R: DbReader>(
     pubkey: &PubKey,
 ) -> Result<Option<DbIdentity>, DbError> {
     if let Some(wot_id) = get_wot_id_(db, r, pubkey)? {
-        get_identity_by_wot_id_(db, r, wot_id)
+        get_identity_by_wot_id(db, r, wot_id)
     } else {
         Ok(None)
     }
@@ -160,16 +160,7 @@ pub fn get_identity_by_pubkey_<DB: DbReadable, R: DbReader>(
 
 /// Get identity by pubkey
 #[inline]
-pub fn get_identity_by_wot_id<DB: DbReadable>(
-    db: &DB,
-    wot_id: WotId,
-) -> Result<Option<DbIdentity>, DbError> {
-    db.read(|r| get_identity_by_wot_id_(db, r, wot_id))
-}
-
-/// Get identity by pubkey
-#[inline]
-pub fn get_identity_by_wot_id_<DB: DbReadable, R: DbReader>(
+pub fn get_identity_by_wot_id<DB: DbReadable, R: DbReader>(
     db: &DB,
     r: &R,
     wot_id: WotId,
@@ -203,7 +194,7 @@ pub fn get_wot_id_from_uid<DB: DbReadable>(db: &DB, uid: &str) -> Result<Option<
     db.read(|r| {
         let greatest_wot_id = crate::current_meta_datas::get_greatest_wot_id_(db, r)?;
         for wot_id in 0..=greatest_wot_id.0 {
-            if let Some(db_idty) = get_identity_by_wot_id_(db, r, WotId(wot_id))? {
+            if let Some(db_idty) = get_identity_by_wot_id(db, r, WotId(wot_id))? {
                 if db_idty.idty_doc.username() == uid {
                     return Ok(Some(WotId(wot_id)));
                 }
@@ -261,7 +252,7 @@ pub fn get_wot_uid_index<DB: DbReadable>(db: &DB) -> Result<HashMap<WotId, Strin
         let mut wot_uid_index = HashMap::new();
         let greatest_wot_id = crate::current_meta_datas::get_greatest_wot_id_(db, r)?;
         for wot_id in 0..=greatest_wot_id.0 {
-            if let Some(db_idty) = get_identity_by_wot_id_(db, r, WotId(wot_id))? {
+            if let Some(db_idty) = get_identity_by_wot_id(db, r, WotId(wot_id))? {
                 wot_uid_index.insert(WotId(wot_id), db_idty.idty_doc.username().to_owned());
             }
         }
diff --git a/lib/modules/blockchain/bc-db-writer/src/indexes/certs.rs b/lib/modules/blockchain/bc-db-writer/src/indexes/certs.rs
index ab7c3411..23c2ae75 100644
--- a/lib/modules/blockchain/bc-db-writer/src/indexes/certs.rs
+++ b/lib/modules/blockchain/bc-db-writer/src/indexes/certs.rs
@@ -36,7 +36,7 @@ pub fn write_certification(
 ) -> Result<(), DbError> {
     // Get cert_chainable_on
     let mut member_datas =
-        durs_bc_db_reader::indexes::identities::get_identity_by_wot_id(db, source)?
+        durs_bc_db_reader::indexes::identities::get_identity_by_wot_id(db, w.as_ref(), source)?
             .expect("Try to write certification with unexist certifier.");
     // Push new cert_chainable_on
     member_datas
diff --git a/lib/modules/blockchain/bc-db-writer/src/indexes/identities.rs b/lib/modules/blockchain/bc-db-writer/src/indexes/identities.rs
index ed249e9e..e8a1500f 100644
--- a/lib/modules/blockchain/bc-db-writer/src/indexes/identities.rs
+++ b/lib/modules/blockchain/bc-db-writer/src/indexes/identities.rs
@@ -222,9 +222,12 @@ pub fn renewal_identity(
     revert: bool,
 ) -> Result<(), DbError> {
     // Get idty_datas
-    let mut idty_datas =
-        durs_bc_db_reader::indexes::identities::get_identity_by_wot_id(db, idty_wot_id)?
-            .expect("Fatal error : try to renewal unknow identity !");
+    let mut idty_datas = durs_bc_db_reader::indexes::identities::get_identity_by_wot_id(
+        db,
+        w.as_ref(),
+        idty_wot_id,
+    )?
+    .expect("Fatal error : try to renewal unknow identity !");
     // Calculate new state value
     idty_datas.state = if revert {
         match idty_datas.state {
diff --git a/lib/modules/blockchain/blockchain/src/dbex.rs b/lib/modules/blockchain/blockchain/src/dbex.rs
index fcd2acd5..8efde336 100644
--- a/lib/modules/blockchain/blockchain/src/dbex.rs
+++ b/lib/modules/blockchain/blockchain/src/dbex.rs
@@ -457,10 +457,14 @@ pub fn dbex_wot(profile_path: PathBuf, csv: bool, query: &DbExWotQuery) {
                 UidOrPubkey::Pubkey(ref pubkey) => wot_index.get(pubkey).copied(),
             };
             if let Some(wot_id) = wot_id_opt {
-                let idty =
-                    durs_bc_db_reader::indexes::identities::get_identity_by_wot_id(&db, wot_id)
-                        .expect("DB error: ")
-                        .expect("DB corrupted: all WotId must be point to an identity.");
+                let idty = db
+                    .read(|r| {
+                        durs_bc_db_reader::indexes::identities::get_identity_by_wot_id(
+                            &db, r, wot_id,
+                        )
+                    })
+                    .expect("DB error: ")
+                    .expect("DB corrupted: all WotId must be point to an identity.");
 
                 println!(
                     "{} : wot_id={}, pubkey={}.",
-- 
GitLab