mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 19:09:54 +00:00
feat: impl remove_blocks_above to static file service (#9553)
This commit is contained in:
@ -3,7 +3,9 @@
|
|||||||
use reth_db::database::Database;
|
use reth_db::database::Database;
|
||||||
use reth_errors::ProviderResult;
|
use reth_errors::ProviderResult;
|
||||||
use reth_primitives::{SealedBlock, StaticFileSegment, TransactionSignedNoHash, B256, U256};
|
use reth_primitives::{SealedBlock, StaticFileSegment, TransactionSignedNoHash, B256, U256};
|
||||||
use reth_provider::{ProviderFactory, StaticFileProviderFactory, StaticFileWriter};
|
use reth_provider::{
|
||||||
|
ProviderFactory, StaticFileProviderFactory, StaticFileWriter, TransactionsProviderExt,
|
||||||
|
};
|
||||||
use std::sync::{
|
use std::sync::{
|
||||||
mpsc::{Receiver, SendError, Sender},
|
mpsc::{Receiver, SendError, Sender},
|
||||||
Arc,
|
Arc,
|
||||||
@ -162,17 +164,40 @@ where
|
|||||||
block_num: u64,
|
block_num: u64,
|
||||||
sender: oneshot::Sender<()>,
|
sender: oneshot::Sender<()>,
|
||||||
) -> ProviderResult<()> {
|
) -> ProviderResult<()> {
|
||||||
let provider = self.provider.static_file_provider();
|
let sf_provider = self.provider.static_file_provider();
|
||||||
|
let db_provider_rw = self.provider.provider_rw()?;
|
||||||
|
|
||||||
|
// get highest static file block for the total block range
|
||||||
|
let highest_static_file_block = sf_provider
|
||||||
|
.get_highest_static_file_block(StaticFileSegment::Headers)
|
||||||
|
.expect("todo: error handling, headers should exist");
|
||||||
|
|
||||||
|
// Get the total txs for the block range, so we have the correct number of columns for
|
||||||
|
// receipts and transactions
|
||||||
|
let tx_range = db_provider_rw
|
||||||
|
.transaction_range_by_block_range(block_num..=highest_static_file_block)?;
|
||||||
|
let total_txs = tx_range.end().saturating_sub(*tx_range.start());
|
||||||
|
|
||||||
// get the writers
|
// get the writers
|
||||||
let mut _header_writer = provider.get_writer(block_num, StaticFileSegment::Headers)?;
|
let mut header_writer = sf_provider.get_writer(block_num, StaticFileSegment::Headers)?;
|
||||||
let mut _transactions_writer =
|
let mut transactions_writer =
|
||||||
provider.get_writer(block_num, StaticFileSegment::Transactions)?;
|
sf_provider.get_writer(block_num, StaticFileSegment::Transactions)?;
|
||||||
let mut _receipts_writer = provider.get_writer(block_num, StaticFileSegment::Receipts)?;
|
let mut receipts_writer = sf_provider.get_writer(block_num, StaticFileSegment::Receipts)?;
|
||||||
|
|
||||||
// TODO: how do we delete s.t. `block_num` is the start? Additionally, do we need to index
|
// finally actually truncate, these internally commit
|
||||||
// by tx num for the transactions segment?
|
receipts_writer.truncate(StaticFileSegment::Receipts, total_txs, Some(block_num))?;
|
||||||
todo!("implement remove_blocks_above")
|
transactions_writer.truncate(
|
||||||
|
StaticFileSegment::Transactions,
|
||||||
|
total_txs,
|
||||||
|
Some(block_num),
|
||||||
|
)?;
|
||||||
|
header_writer.truncate(
|
||||||
|
StaticFileSegment::Headers,
|
||||||
|
highest_static_file_block.saturating_sub(block_num),
|
||||||
|
None,
|
||||||
|
)?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -338,7 +338,7 @@ impl StaticFileProviderRW {
|
|||||||
///
|
///
|
||||||
/// # Note
|
/// # Note
|
||||||
/// Commits to the configuration file at the end.
|
/// Commits to the configuration file at the end.
|
||||||
fn truncate(
|
pub fn truncate(
|
||||||
&mut self,
|
&mut self,
|
||||||
segment: StaticFileSegment,
|
segment: StaticFileSegment,
|
||||||
num_rows: u64,
|
num_rows: u64,
|
||||||
|
|||||||
Reference in New Issue
Block a user