Skip to content
Snippets Groups Projects
Commit 9d0473c3 authored by Éloïs's avatar Éloïs
Browse files

[fix] bc-db-reader: get_dal_block_in_local_blockchain mustn't create tx

parent 0f5881c9
No related branches found
No related tags found
1 merge request!193Resolve "Migrate high-volume DBs to LMDB"
......@@ -124,12 +124,13 @@ pub fn get_fork_block<DB: DbReadable, R: DbReader>(
}
/// Get block hash
pub fn get_block_hash<DB: DbReadable>(
pub fn get_block_hash<DB: DbReadable, R: DbReader>(
db: &DB,
r: &R,
block_number: BlockNumber,
) -> Result<Option<BlockHash>, DbError> {
Ok(
if let Some(block) = get_block_in_local_blockchain(db, block_number)? {
if let Some(block) = get_block_in_local_blockchain(db, r, block_number)? {
block.hash()
} else {
None
......@@ -139,16 +140,12 @@ pub fn get_block_hash<DB: DbReadable>(
/// Get block in local blockchain
#[inline]
pub fn get_block_in_local_blockchain<DB: DbReadable>(
pub fn get_block_in_local_blockchain<DB: DbReadable, R: DbReader>(
db: &DB,
r: &R,
block_number: BlockNumber,
) -> Result<Option<BlockDocument>, DbError> {
db.read(|r| {
Ok(
get_dal_block_in_local_blockchain(db, r, block_number)?
.map(|dal_block| dal_block.block),
)
})
Ok(get_dal_block_in_local_blockchain(db, r, block_number)?.map(|dal_block| dal_block.block))
}
/// Get block in local blockchain
......
......@@ -146,9 +146,9 @@ pub fn dbex_bc(profile_path: PathBuf, _csv: bool, _query: DbExBcQuery) -> Result
durs_bc_db_reader::current_meta_datas::get_current_blockstamp(&db)?
{
println!("Current block: #{}.", current_blockstamp);
if let Some(current_block) =
durs_bc_db_reader::blocks::get_block_in_local_blockchain(&db, current_blockstamp.id)?
{
if let Some(current_block) = db.read(|r| {
durs_bc_db_reader::blocks::get_block_in_local_blockchain(&db, r, current_blockstamp.id)
})? {
let map_pubkey = durs_bc_db_reader::blocks::get_current_frame(&current_block, &db)?;
let mut vec = map_pubkey.iter().collect::<Vec<(&PubKey, &usize)>>();
......
......@@ -36,7 +36,7 @@ pub enum InvalidBlockError {
pub fn verify_block_validity<DB, R, W>(
block: &BlockDocument,
db: &DB,
_r: &R,
r: &R,
_wot_index: &HashMap<PubKey, WotId>,
_wot_db: &BinFreeStructDb<W>,
) -> Result<(), BlockError>
......@@ -50,6 +50,7 @@ where
// Get previous block
let previous_block_opt = durs_bc_db_reader::blocks::get_block_in_local_blockchain(
db,
r,
BlockNumber(block.number().0 - 1),
)?;
......
......@@ -140,9 +140,13 @@ mod tests {
})?;
// Local blockchain must contain at least `fork_window_size +2` blocks
assert!(durs_bc_db_reader::blocks::get_block_in_local_blockchain(
assert!(db
.read(
|r| durs_bc_db_reader::blocks::get_block_in_local_blockchain(
&db,
r,
BlockNumber((fork_window_size + 1) as u32)
)
)?
.is_some());
......
......@@ -37,10 +37,13 @@ pub fn receive_req(
BlockchainRequest::CurrentBlock => {
debug!("BlockchainModule : receive BlockchainRequest::CurrentBlock()");
if let Ok(block_opt) = durs_bc_db_reader::blocks::get_block_in_local_blockchain(
if let Ok(block_opt) = bc.db().read(|r| {
durs_bc_db_reader::blocks::get_block_in_local_blockchain(
bc.db(),
r,
bc.current_blockstamp.id,
) {
)
}) {
if let Some(block) = block_opt {
debug!(
"BlockchainModule : send_req_response(CurrentBlock({}))",
......@@ -70,9 +73,13 @@ pub fn receive_req(
block_number
);
if let Ok(block_opt) =
durs_bc_db_reader::blocks::get_block_in_local_blockchain(bc.db(), block_number)
{
if let Ok(block_opt) = bc.db().read(|r| {
durs_bc_db_reader::blocks::get_block_in_local_blockchain(
bc.db(),
r,
block_number,
)
}) {
if let Some(block) = block_opt {
debug!(
"BlockchainModule : send_req_response(BlockByNumber(#{}))",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment