Skip to content

Commit 6f8b1a1

Browse files
apollo_gateway: move instantiate_validator to be async
1 parent cf45842 commit 6f8b1a1

File tree

5 files changed

+30
-32
lines changed

5 files changed

+30
-32
lines changed

crates/apollo_gateway/src/gateway.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -256,9 +256,9 @@ impl ProcessTxBlockingTask {
256256
}
257257

258258
fn process_tx(self) -> GatewayResult<Nonce> {
259-
let mut stateful_transaction_validator = self
260-
.stateful_tx_validator_factory
261-
.instantiate_validator(self.state_reader_factory.as_ref(), self.runtime.clone())?;
259+
let mut stateful_transaction_validator = self.runtime.block_on(
260+
self.stateful_tx_validator_factory.instantiate_validator(self.state_reader_factory),
261+
)?;
262262

263263
let nonce = stateful_transaction_validator.extract_state_nonce_and_run_validations(
264264
&self.executable_tx,

crates/apollo_gateway/src/gateway_test.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ use crate::state_reader_test_utils::{local_test_state_reader_factory, TestStateR
9898
use crate::stateful_transaction_validator::{
9999
MockStatefulTransactionValidatorFactoryTrait,
100100
MockStatefulTransactionValidatorTrait,
101+
StatefulTransactionValidatorTrait,
101102
};
102103
use crate::stateless_transaction_validator::MockStatelessTransactionValidatorTrait;
103104

@@ -563,9 +564,13 @@ async fn process_tx_returns_error_when_extract_state_nonce_and_run_validations_f
563564
.expect_extract_state_nonce_and_run_validations()
564565
.return_once(|_, _, _| Err(expected_error));
565566

566-
mock_stateful_transaction_validator_factory
567-
.expect_instantiate_validator()
568-
.return_once(|_, _| Ok(Box::new(mock_stateful_transaction_validator)));
567+
mock_stateful_transaction_validator_factory.expect_instantiate_validator().return_once(|_| {
568+
Box::pin(async {
569+
Ok::<Box<dyn StatefulTransactionValidatorTrait>, _>(Box::new(
570+
mock_stateful_transaction_validator,
571+
))
572+
})
573+
});
569574

570575
let process_tx_task = process_tx_task(mock_stateful_transaction_validator_factory);
571576

@@ -608,7 +613,7 @@ async fn process_tx_returns_error_when_instantiating_validator_fails(
608613
};
609614
mock_stateful_transaction_validator_factory
610615
.expect_instantiate_validator()
611-
.return_once(|_, _| Err(expected_error));
616+
.return_once(|_| Box::pin(async { Err::<_, _>(expected_error) }));
612617

613618
let process_tx_task = process_tx_task(mock_stateful_transaction_validator_factory);
614619

crates/apollo_gateway/src/rpc_state_reader.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ impl MempoolStateReader for RpcStateReader {
112112
.await
113113
.map_err(|e| StateError::StateReadError(format!("JoinError: {e}")))??;
114114

115-
let block_header: BlockHeader =
116-
serde_json::from_value(get_block_with_tx_hashes_result).map_err(serde_err_to_state_err)?;
115+
let block_header: BlockHeader = serde_json::from_value(get_block_with_tx_hashes_result)
116+
.map_err(serde_err_to_state_err)?;
117117
let block_info = block_header.try_into()?;
118118
Ok(block_info)
119119
}

crates/apollo_gateway/src/stateful_transaction_validator.rs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use std::sync::Arc;
2+
13
use apollo_gateway_config::config::StatefulTransactionValidatorConfig;
24
use apollo_gateway_types::deprecated_gateway_error::{
35
KnownStarknetErrorCode,
@@ -7,6 +9,7 @@ use apollo_gateway_types::deprecated_gateway_error::{
79
use apollo_gateway_types::errors::GatewaySpecError;
810
use apollo_mempool_types::communication::SharedMempoolClient;
911
use apollo_proc_macros::sequencer_latency_histogram;
12+
use async_trait::async_trait;
1013
use blockifier::blockifier::stateful_validator::{
1114
StatefulValidator,
1215
StatefulValidatorTrait as BlockifierStatefulValidatorTrait,
@@ -46,12 +49,12 @@ type BlockifierStatefulValidator = StatefulValidator<
4649
StateReaderAndContractManager<Box<dyn GatewayStateReaderWithCompiledClasses>>,
4750
>;
4851

52+
#[async_trait]
4953
#[cfg_attr(test, mockall::automock)]
5054
pub trait StatefulTransactionValidatorFactoryTrait: Send + Sync {
51-
fn instantiate_validator(
55+
async fn instantiate_validator(
5256
&self,
53-
state_reader_factory: &dyn StateReaderFactory,
54-
runtime: tokio::runtime::Handle,
57+
state_reader_factory: Arc<dyn StateReaderFactory>,
5558
) -> StatefulTransactionValidatorResult<Box<dyn StatefulTransactionValidatorTrait>>;
5659
}
5760
pub struct StatefulTransactionValidatorFactory {
@@ -60,17 +63,18 @@ pub struct StatefulTransactionValidatorFactory {
6063
pub contract_class_manager: ContractClassManager,
6164
}
6265

66+
#[async_trait]
6367
impl StatefulTransactionValidatorFactoryTrait for StatefulTransactionValidatorFactory {
6468
// TODO(Ayelet): Move state_reader_factory and chain_info to the struct.
65-
fn instantiate_validator(
69+
async fn instantiate_validator(
6670
&self,
67-
state_reader_factory: &dyn StateReaderFactory,
68-
runtime: tokio::runtime::Handle,
71+
state_reader_factory: Arc<dyn StateReaderFactory>,
6972
) -> StatefulTransactionValidatorResult<Box<dyn StatefulTransactionValidatorTrait>> {
7073
// TODO(yael 6/5/2024): consider storing the block_info as part of the
7174
// StatefulTransactionValidator and update it only once a new block is created.
72-
let state_reader = runtime
73-
.block_on(state_reader_factory.get_state_reader_from_latest_block())
75+
let state_reader = state_reader_factory
76+
.get_state_reader_from_latest_block()
77+
.await
7478
.map_err(|err| GatewaySpecError::UnexpectedError {
7579
data: format!("Internal server error: {err}"),
7680
})
@@ -80,7 +84,7 @@ impl StatefulTransactionValidatorFactoryTrait for StatefulTransactionValidatorFa
8084
e,
8185
)
8286
})?;
83-
let latest_block_info = runtime.block_on(get_latest_block_info(&state_reader))?;
87+
let latest_block_info = get_latest_block_info(&state_reader).await?;
8488

8589
let state_reader_and_contract_manager = StateReaderAndContractManager {
8690
state_reader,

crates/apollo_gateway/src/stateful_transaction_validator_test.rs

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ use starknet_api::transaction::fields::{
4040
};
4141
use starknet_api::{declare_tx_args, deploy_account_tx_args, invoke_tx_args, nonce};
4242

43-
use crate::state_reader::{MockStateReaderFactory, StateReaderFactory};
4443
use crate::state_reader_test_utils::local_test_state_reader_factory;
4544
use crate::stateful_transaction_validator::{
4645
StatefulTransactionValidator,
@@ -156,7 +155,7 @@ async fn test_extract_state_nonce_and_run_validations(
156155
}
157156

158157
#[rstest]
159-
#[tokio::test(flavor = "multi_thread")]
158+
#[tokio::test]
160159
async fn test_instantiate_validator() {
161160
let stateful_validator_factory = StatefulTransactionValidatorFactory {
162161
config: StatefulTransactionValidatorConfig::default(),
@@ -166,19 +165,9 @@ async fn test_instantiate_validator() {
166165
let state_reader_factory =
167166
local_test_state_reader_factory(CairoVersion::Cairo1(RunnableCairo1::Casm), false);
168167

169-
let mut mock_state_reader_factory = MockStateReaderFactory::new();
170-
171-
// Make sure stateful_validator uses the latest block in the initial call.
172-
let latest_state_reader = state_reader_factory.get_state_reader_from_latest_block().await;
173-
mock_state_reader_factory
174-
.expect_get_state_reader_from_latest_block()
175-
.return_once(move || latest_state_reader);
168+
let validator =
169+
stateful_validator_factory.instantiate_validator(Arc::new(state_reader_factory)).await;
176170

177-
// TODO(Itamar): Remove using runtime when instantiate_validator is async.
178-
let validator = tokio::task::block_in_place(|| {
179-
stateful_validator_factory
180-
.instantiate_validator(&mock_state_reader_factory, tokio::runtime::Handle::current())
181-
});
182171
assert!(validator.is_ok());
183172
}
184173

0 commit comments

Comments
 (0)