diff --git a/Cargo.lock b/Cargo.lock index 0d2d57dd9c4..bc9713e16cb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8815,6 +8815,7 @@ dependencies = [ "eyre", "metrics", "mockall", + "parking_lot", "reth-chainspec", "reth-codecs", "reth-db", diff --git a/crates/optimism/trie/Cargo.toml b/crates/optimism/trie/Cargo.toml index e5e9ee14f60..7adb4634f2b 100644 --- a/crates/optimism/trie/Cargo.toml +++ b/crates/optimism/trie/Cargo.toml @@ -40,6 +40,7 @@ serde.workspace = true bincode.workspace = true # misc +parking_lot.workspace = true thiserror.workspace = true auto_impl.workspace = true eyre = { workspace = true, optional = true } diff --git a/crates/optimism/trie/src/error.rs b/crates/optimism/trie/src/error.rs index 9d0eb5112bf..aa7a1f81861 100644 --- a/crates/optimism/trie/src/error.rs +++ b/crates/optimism/trie/src/error.rs @@ -7,7 +7,6 @@ use reth_provider::ProviderError; use reth_trie_common::Nibbles; use std::sync::Arc; use thiserror::Error; -use tokio::sync::TryLockError; /// Error type for storage operations #[derive(Debug, Clone, Error)] @@ -98,12 +97,6 @@ pub enum OpProofsStorageError { InitializeStorageInconsistentState, } -impl From for OpProofsStorageError { - fn from(_: TryLockError) -> Self { - Self::TryLockError - } -} - impl From for OpProofsStorageError { fn from(error: BlockExecutionError) -> Self { Self::ExecutionError(Arc::new(error)) @@ -169,15 +162,6 @@ mod test { assert!(matches!(converted_error, DatabaseError::Decode)) } - #[test] - fn test_conversion_from_lock_error() { - let lock = tokio::sync::Mutex::new(()); - let _guard = lock.try_lock().unwrap(); - let lock_error = lock.try_lock().err().unwrap(); - let op_proofs_store_error = OpProofsStorageError::from(lock_error); - assert!(matches!(op_proofs_store_error, OpProofsStorageError::TryLockError)); - } - #[test] fn test_conversion_from_block_execution_error() { let block_execution_error = diff --git a/crates/optimism/trie/src/in_memory.rs b/crates/optimism/trie/src/in_memory.rs index fbd41d3a5dd..ea1b1892f91 100644 --- a/crates/optimism/trie/src/in_memory.rs +++ b/crates/optimism/trie/src/in_memory.rs @@ -5,6 +5,7 @@ use crate::{ }; use alloy_eips::{eip1898::BlockWithParent, BlockNumHash}; use alloy_primitives::{B256, U256}; +use parking_lot::RwLock; use reth_db::DatabaseError; use reth_primitives_traits::Account; use reth_trie::{ @@ -15,7 +16,6 @@ use reth_trie_common::{ updates::TrieUpdatesSorted, BranchNodeCompact, HashedPostStateSorted, Nibbles, }; use std::{collections::BTreeMap, sync::Arc}; -use tokio::sync::RwLock; /// In-memory implementation of [`OpProofsStore`] for testing purposes #[derive(Debug, Clone)] @@ -174,7 +174,7 @@ impl InMemoryTrieCursor { return Ok(()); } - let storage = self.inner.try_read().map_err(OpProofsStorageError::from)?; + let storage = self.inner.try_read().ok_or(OpProofsStorageError::TryLockError)?; // Common logic: collect latest values for each path let mut path_to_latest: std::collections::BTreeMap< @@ -333,7 +333,7 @@ impl InMemoryStorageCursor { return Ok(()); } - let storage = self.inner.try_read().map_err(OpProofsStorageError::from)?; + let storage = self.inner.try_read().ok_or(OpProofsStorageError::TryLockError)?; // Collect latest values for each slot let mut slot_to_latest: std::collections::BTreeMap = @@ -489,7 +489,7 @@ impl OpProofsStore for InMemoryProofsStorage { &self, updates: Vec<(Nibbles, Option)>, ) -> OpProofsStorageResult<()> { - let mut inner = self.inner.write().await; + let mut inner = self.inner.write(); for (path, branch) in updates { inner.account_branches.insert((0, path), branch); @@ -503,7 +503,7 @@ impl OpProofsStore for InMemoryProofsStorage { hashed_address: B256, items: Vec<(Nibbles, Option)>, ) -> OpProofsStorageResult<()> { - let mut inner = self.inner.write().await; + let mut inner = self.inner.write(); for (path, branch) in items { inner.storage_branches.insert((0, hashed_address, path), branch); @@ -516,7 +516,7 @@ impl OpProofsStore for InMemoryProofsStorage { &self, accounts: Vec<(B256, Option)>, ) -> OpProofsStorageResult<()> { - let mut inner = self.inner.write().await; + let mut inner = self.inner.write(); for (address, account) in accounts { inner.hashed_accounts.insert((0, address), account); @@ -530,7 +530,7 @@ impl OpProofsStore for InMemoryProofsStorage { hashed_address: B256, storages: Vec<(B256, U256)>, ) -> OpProofsStorageResult<()> { - let mut inner = self.inner.write().await; + let mut inner = self.inner.write(); for (slot, value) in storages { inner.hashed_storages.insert((0, hashed_address, slot), value); @@ -540,12 +540,12 @@ impl OpProofsStore for InMemoryProofsStorage { } async fn get_earliest_block_number(&self) -> OpProofsStorageResult> { - let inner = self.inner.read().await; + let inner = self.inner.read(); Ok(inner.earliest_block) } async fn get_latest_block_number(&self) -> OpProofsStorageResult> { - let inner = self.inner.read().await; + let inner = self.inner.read(); // Find the latest block number from trie_updates let latest_block = inner.trie_updates.keys().max().copied(); if let Some(block) = latest_block { @@ -584,7 +584,7 @@ impl OpProofsStore for InMemoryProofsStorage { &self, max_block_number: u64, ) -> OpProofsStorageResult> { - let inner = self.inner.try_read()?; + let inner = self.inner.try_read().ok_or(OpProofsStorageError::TryLockError)?; Ok(InMemoryAccountCursor::new(&inner, max_block_number)) } @@ -593,13 +593,13 @@ impl OpProofsStore for InMemoryProofsStorage { block_ref: BlockWithParent, block_state_diff: BlockStateDiff, ) -> OpProofsStorageResult { - let mut inner = self.inner.write().await; + let mut inner = self.inner.write(); Ok(inner.store_trie_updates(block_ref.block.number, block_state_diff)) } async fn fetch_trie_updates(&self, block_number: u64) -> OpProofsStorageResult { - let inner = self.inner.read().await; + let inner = self.inner.read(); let trie_updates = inner.trie_updates.get(&block_number).cloned().unwrap_or_default(); let post_state = inner.post_states.get(&block_number).cloned().unwrap_or_default(); @@ -612,7 +612,7 @@ impl OpProofsStore for InMemoryProofsStorage { new_earliest_block_ref: BlockWithParent, ) -> OpProofsStorageResult { let mut write_counts = WriteCounts::default(); - let mut inner = self.inner.write().await; + let mut inner = self.inner.write(); let new_earliest = new_earliest_block_ref.block.number; // 1. Account Branches @@ -698,7 +698,7 @@ impl OpProofsStore for InMemoryProofsStorage { &self, unwind_upto_block: BlockWithParent, ) -> OpProofsStorageResult<()> { - let mut inner = self.inner.write().await; + let mut inner = self.inner.write(); let unwind_upto_block_number = unwind_upto_block.block.number - 1; // Remove all updates after unwind_upto_block_number @@ -717,7 +717,7 @@ impl OpProofsStore for InMemoryProofsStorage { latest_common_block: BlockNumHash, blocks_to_add: Vec<(BlockWithParent, BlockStateDiff)>, ) -> OpProofsStorageResult<()> { - let mut inner = self.inner.write().await; + let mut inner = self.inner.write(); let latest_common_block_number = latest_common_block.number; // Remove all updates after latest_common_block_number @@ -740,7 +740,7 @@ impl OpProofsStore for InMemoryProofsStorage { block_number: u64, hash: B256, ) -> OpProofsStorageResult<()> { - let mut inner = self.inner.write().await; + let mut inner = self.inner.write(); inner.earliest_block = Some((block_number, hash)); Ok(()) }