Skip to content

Commit 74ab95c

Browse files
apollo_state_sync: add storage_reader_server to the state sync
1 parent e0ddd78 commit 74ab95c

File tree

3 files changed

+46
-12
lines changed

3 files changed

+46
-12
lines changed

crates/apollo_state_sync/src/lib.rs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,13 @@ use apollo_starknet_client::reader::{StarknetFeederGatewayClient, StarknetReader
1212
use apollo_state_sync_config::config::StateSyncConfig;
1313
use apollo_state_sync_types::communication::{StateSyncRequest, StateSyncResponse};
1414
use apollo_state_sync_types::errors::StateSyncError;
15-
use apollo_state_sync_types::state_sync_types::{StateSyncResult, SyncBlock};
15+
use apollo_state_sync_types::state_sync_types::{
16+
StateSyncResult,
17+
StateSyncStorageReaderServerHandler,
18+
StateSyncStorageRequest,
19+
StateSyncStorageResponse,
20+
SyncBlock,
21+
};
1622
use apollo_storage::body::BodyStorageReader;
1723
use apollo_storage::db::TransactionKind;
1824
use apollo_storage::header::HeaderStorageReader;
@@ -30,6 +36,11 @@ use starknet_types_core::felt::Felt;
3036
use crate::runner::StateSyncRunner;
3137

3238
const BUFFER_SIZE: usize = 100000;
39+
type StateSyncStorageReaderServer = StorageReaderServer<
40+
StateSyncStorageReaderServerHandler,
41+
StateSyncStorageRequest,
42+
StateSyncStorageResponse,
43+
>;
3344

3445
pub fn create_state_sync_and_runner(
3546
config: StateSyncConfig,
@@ -46,6 +57,10 @@ pub struct StateSync {
4657
storage_reader: StorageReader,
4758
new_block_sender: Sender<SyncBlock>,
4859
starknet_client: Option<Arc<dyn StarknetReader + Send + Sync>>,
60+
// TODO(Nadin): Remove #[allow(dead_code)].
61+
/// Optional storage reader server for handling remote storage reader queries.
62+
#[allow(dead_code)]
63+
storage_reader_server: Option<StateSyncStorageReaderServer>,
4964
}
5065

5166
impl StateSync {
@@ -69,7 +84,12 @@ impl StateSync {
6984
);
7085
starknet_client
7186
});
72-
Self { storage_reader, new_block_sender, starknet_client }
87+
Self {
88+
storage_reader,
89+
new_block_sender,
90+
starknet_client,
91+
storage_reader_server: config.storage_reader_server,
92+
}
7393
}
7494
}
7595

crates/apollo_state_sync/src/runner/mod.rs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,16 @@ pub struct StateSyncResources {
101101
}
102102

103103
impl StateSyncResources {
104-
pub fn new(storage_config: &StorageConfig) -> Self {
105-
let (storage_reader, storage_writer) =
106-
open_storage_with_metric(storage_config.clone(), &SYNC_STORAGE_OPEN_READ_TRANSACTIONS)
107-
.expect("StateSyncRunner failed opening storage");
104+
pub fn new(
105+
storage_config: &StorageConfig,
106+
storage_reader_server_config: Option<StateSyncStorageReaderServer>,
107+
) -> Self {
108+
let (storage_reader, storage_writer) = open_storage_with_metric_and_server(
109+
storage_config.clone(),
110+
&SYNC_STORAGE_OPEN_READ_TRANSACTIONS,
111+
storage_reader_server_config,
112+
)
113+
.expect("StateSyncRunner failed opening storage");
108114
let shared_highest_block = Arc::new(RwLock::new(None));
109115
let pending_data = Arc::new(RwLock::new(PendingData {
110116
// The pending data might change later to DeprecatedPendingBlock, depending on the
@@ -133,7 +139,7 @@ impl StateSyncRunner {
133139
network_config,
134140
revert_config,
135141
rpc_config,
136-
storage_reader_server_config: _,
142+
storage_reader_server_config,
137143
} = config;
138144

139145
let StateSyncResources {
@@ -142,7 +148,7 @@ impl StateSyncRunner {
142148
shared_highest_block,
143149
pending_data,
144150
pending_classes,
145-
} = StateSyncResources::new(&storage_config);
151+
} = StateSyncResources::new(&storage_config, storage_reader_server_config);
146152

147153
let register_metrics_future = register_metrics(storage_reader.clone()).boxed();
148154

crates/apollo_state_sync/src/test.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,12 @@ use crate::StateSync;
2424

2525
fn setup() -> (StateSync, StorageWriter) {
2626
let ((storage_reader, storage_writer), _) = get_test_storage();
27-
let state_sync =
28-
StateSync { storage_reader, new_block_sender: channel(0).0, starknet_client: None };
27+
let state_sync = StateSync {
28+
storage_reader,
29+
new_block_sender: channel(0).0,
30+
starknet_client: None,
31+
storage_reader_server: None,
32+
};
2933
(state_sync, storage_writer)
3034
}
3135

@@ -125,8 +129,12 @@ async fn test_get_block_hash_fallback_to_starknet_client() {
125129
let starknet_client: Option<Arc<dyn StarknetReader + Send + Sync>> =
126130
Some(Arc::new(starknet_client));
127131
let ((storage_reader, _storage_writer), _) = get_test_storage();
128-
let mut state_sync =
129-
StateSync { storage_reader, new_block_sender: channel(0).0, starknet_client };
132+
let mut state_sync = StateSync {
133+
storage_reader,
134+
new_block_sender: channel(0).0,
135+
starknet_client,
136+
storage_reader_server: None,
137+
};
130138

131139
// The block is not in storage, so it should fall back to starknet_client
132140
let response = state_sync.handle_request(StateSyncRequest::GetBlockHash(block_number)).await;

0 commit comments

Comments
 (0)