Skip to content

Commit d4d878f

Browse files
committed
[mempool] share state view between get_account_sequence_nummber() calls
1 parent 807bb84 commit d4d878f

File tree

3 files changed

+18
-6
lines changed

3 files changed

+18
-6
lines changed

mempool/src/shared_mempool/tasks.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ use std::{
3636
sync::Arc,
3737
time::{Duration, Instant},
3838
};
39+
use storage_interface::state_view::LatestDbStateCheckpointView;
3940
use tokio::runtime::Handle;
4041
use vm_validator::vm_validator::{get_account_sequence_number, TransactionValidation};
4142

@@ -235,12 +236,17 @@ where
235236
let mut statuses = vec![];
236237

237238
let start_storage_read = Instant::now();
239+
let state_view = smp
240+
.db
241+
.latest_state_checkpoint_view()
242+
.expect("Failed to get latest state checkpoint view.");
243+
238244
// Track latency: fetching seq number
239245
let seq_numbers = IO_POOL.install(|| {
240246
transactions
241247
.par_iter()
242248
.map(|t| {
243-
get_account_sequence_number(smp.db.clone(), t.sender()).map_err(|e| {
249+
get_account_sequence_number(&state_view, t.sender()).map_err(|e| {
244250
error!(LogSchema::new(LogEntry::DBError).error(&e));
245251
counters::DB_ERROR.inc();
246252
e

vm-validator/src/unit_tests/vm_validator_test.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ use move_deps::move_core_types::{
1818
gas_schedule::{GasAlgebra, GasConstants},
1919
};
2020
use rand::SeedableRng;
21+
use storage_interface::state_view::LatestDbStateCheckpointView;
2122
use storage_interface::DbReaderWriter;
2223

2324
const MAX_TRANSACTION_SIZE_IN_BYTES: u64 = 262144;
@@ -202,15 +203,20 @@ fn test_validate_max_gas_units_below_min() {
202203
fn test_get_account_sequence_number() {
203204
let vm_validator = TestValidator::new();
204205
let root_address = account_config::aptos_root_address();
206+
let state_view = vm_validator
207+
.vm_validator
208+
.db_reader
209+
.latest_state_checkpoint_view()
210+
.unwrap();
205211
assert_eq!(
206-
get_account_sequence_number(vm_validator.vm_validator.db_reader.clone(), root_address,)
212+
get_account_sequence_number(&state_view, root_address,)
207213
.unwrap()
208214
.min_seq(),
209215
0
210216
);
211217
assert_eq!(
212218
get_account_sequence_number(
213-
vm_validator.vm_validator.db_reader,
219+
&state_view,
214220
AccountAddress::new([5u8; AccountAddress::LENGTH]),
215221
)
216222
.unwrap()

vm-validator/src/vm_validator.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use aptos_types::{
1313
use aptos_vm::AptosVM;
1414
use fail::fail_point;
1515
use std::sync::Arc;
16+
use storage_interface::state_view::DbStateView;
1617
use storage_interface::{
1718
cached_state_view::CachedDbStateView, state_view::LatestDbStateCheckpointView, DbReader,
1819
};
@@ -93,17 +94,16 @@ impl TransactionValidation for VMValidator {
9394

9495
/// returns account's sequence number from storage
9596
pub fn get_account_sequence_number(
96-
storage: Arc<dyn DbReader>,
97+
state_view: &DbStateView,
9798
address: AccountAddress,
9899
) -> Result<AccountSequenceInfo> {
99100
fail_point!("vm_validator::get_account_sequence_number", |_| {
100101
Err(anyhow::anyhow!(
101102
"Injected error in get_account_sequence_number"
102103
))
103104
});
104-
let db_state_view = storage.latest_state_checkpoint_view()?;
105105

106-
let account_state_view = db_state_view.as_account_with_state_view(&address);
106+
let account_state_view = state_view.as_account_with_state_view(&address);
107107

108108
if let Ok(Some(crsn)) = account_state_view.get_crsn_resource() {
109109
return Ok(AccountSequenceInfo::CRSN {

0 commit comments

Comments
 (0)