mirror of
https://github.com/0glabs/0g-storage-node.git
synced 2025-01-12 16:15:17 +00:00
fix: finalize check on tx sync (#220)
Some checks failed
abi-consistent-check / build-and-compare (push) Has been cancelled
code-coverage / unittest-cov (push) Has been cancelled
rust / check (push) Has been cancelled
rust / test (push) Has been cancelled
rust / lints (push) Has been cancelled
functional-test / test (push) Has been cancelled
Some checks failed
abi-consistent-check / build-and-compare (push) Has been cancelled
code-coverage / unittest-cov (push) Has been cancelled
rust / check (push) Has been cancelled
rust / test (push) Has been cancelled
rust / lints (push) Has been cancelled
functional-test / test (push) Has been cancelled
* fix: finalize * fix: check * fix: end_segment_index * fix: fmt
This commit is contained in:
parent
07ac814e57
commit
949462084a
@ -12,7 +12,7 @@ use std::fmt::Debug;
|
|||||||
use std::future::Future;
|
use std::future::Future;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::{Duration, Instant};
|
use std::time::{Duration, Instant};
|
||||||
use storage::log_store::log_manager::sector_to_segment;
|
use storage::log_store::log_manager::PORA_CHUNK_SIZE;
|
||||||
use storage::log_store::{tx_store::BlockHashAndSubmissionIndex, Store};
|
use storage::log_store::{tx_store::BlockHashAndSubmissionIndex, Store};
|
||||||
use task_executor::{ShutdownReason, TaskExecutor};
|
use task_executor::{ShutdownReason, TaskExecutor};
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
@ -479,11 +479,30 @@ impl LogSyncManager {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// check if current node need to save at least one segment
|
||||||
let store = self.store.clone();
|
let store = self.store.clone();
|
||||||
let shard_config = store.flow().get_shard_config();
|
let shard_config = store.flow().get_shard_config();
|
||||||
if sector_to_segment(bytes_to_chunks(tx.size as usize) as u64)
|
let start_segment_index = tx.start_entry_index as usize / PORA_CHUNK_SIZE;
|
||||||
< shard_config.shard_id
|
let sector_size = bytes_to_chunks(tx.size as usize);
|
||||||
{
|
let end_segment_index = start_segment_index
|
||||||
|
+ ((sector_size + PORA_CHUNK_SIZE - 1) / PORA_CHUNK_SIZE)
|
||||||
|
- 1;
|
||||||
|
let mut can_finalize = false;
|
||||||
|
if end_segment_index < shard_config.shard_id {
|
||||||
|
can_finalize = true;
|
||||||
|
} else {
|
||||||
|
// check if there is a number N between [start_segment_index, end_segment_index] that satisfy:
|
||||||
|
// N % num_shard = shard_id
|
||||||
|
let min_n_gte_start =
|
||||||
|
(start_segment_index + shard_config.num_shard - 1 - shard_config.shard_id)
|
||||||
|
/ shard_config.num_shard;
|
||||||
|
let max_n_lte_end =
|
||||||
|
(end_segment_index - shard_config.shard_id) / shard_config.num_shard;
|
||||||
|
if min_n_gte_start > max_n_lte_end {
|
||||||
|
can_finalize = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if can_finalize {
|
||||||
if let Err(e) = store.finalize_tx_with_hash(tx.seq, tx.hash()) {
|
if let Err(e) = store.finalize_tx_with_hash(tx.seq, tx.hash()) {
|
||||||
error!("finalize file that does not need to store: e={:?}", e);
|
error!("finalize file that does not need to store: e={:?}", e);
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
Reference in New Issue
Block a user