Skip to content

Commit 2751ece

Browse files
apollo_storage: add open_storage_with_metric_and_server fn (#10781)
1 parent 491b44a commit 2751ece

File tree

1 file changed

+30
-0
lines changed
  • crates/apollo_storage/src

1 file changed

+30
-0
lines changed

crates/apollo_storage/src/lib.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ use mmap_file::{
132132
Reader,
133133
Writer,
134134
};
135+
use serde::de::DeserializeOwned;
135136
use serde::{Deserialize, Serialize};
136137
use starknet_api::block::{BlockHash, BlockNumber, BlockSignature, StarknetVersion};
137138
use starknet_api::core::{ClassHash, CompiledClassHash, ContractAddress, Nonce};
@@ -163,6 +164,12 @@ use crate::header::StorageBlockHeader;
163164
use crate::metrics::{register_metrics, STORAGE_COMMIT_LATENCY};
164165
use crate::mmap_file::MMapFileStats;
165166
use crate::state::data::IndexedDeprecatedContractClass;
167+
use crate::storage_reader_server::{
168+
create_storage_reader_server,
169+
ServerConfig,
170+
StorageReaderServer,
171+
StorageReaderServerHandler,
172+
};
166173
use crate::version::{VersionStorageReader, VersionStorageWriter};
167174

168175
// For more details on the storage version, see the module documentation.
@@ -186,6 +193,24 @@ pub fn open_storage_with_metric(
186193
open_storage_internal(storage_config, Some(open_readers_metric))
187194
}
188195

196+
/// Same as [`open_storage_with_metric`], but also creates a storage reader server.
197+
pub fn open_storage_with_metric_and_server<RequestHandler, Request, Response>(
198+
storage_config: StorageConfig,
199+
open_readers_metric: &'static MetricGauge,
200+
storage_reader_server_config: ServerConfig,
201+
) -> StorageResult<StorageWithServer<RequestHandler, Request, Response>>
202+
where
203+
RequestHandler: StorageReaderServerHandler<Request, Response>,
204+
Request: Serialize + DeserializeOwned + Send + 'static,
205+
Response: Serialize + DeserializeOwned + Send + 'static,
206+
{
207+
let (reader, writer) =
208+
open_storage_internal(storage_config, Some(open_readers_metric)).expect("");
209+
let storage_reader_server =
210+
create_storage_reader_server(reader.clone(), storage_reader_server_config);
211+
Ok((reader, writer, storage_reader_server))
212+
}
213+
189214
fn open_storage_internal(
190215
storage_config: StorageConfig,
191216
open_readers_metric: Option<&'static MetricGauge>,
@@ -699,6 +724,11 @@ pub enum StorageError {
699724
/// A type alias that maps to std::result::Result<T, StorageError>.
700725
pub type StorageResult<V> = std::result::Result<V, StorageError>;
701726

727+
/// A type alias for the return type of storage operations that include an optional storage reader
728+
/// server.
729+
pub type StorageWithServer<RequestHandler, Request, Response> =
730+
(StorageReader, StorageWriter, Option<StorageReaderServer<RequestHandler, Request, Response>>);
731+
702732
/// A struct for the configuration of the storage.
703733
#[allow(missing_docs)]
704734
#[derive(Serialize, Debug, Default, Deserialize, Clone, PartialEq, Validate)]

0 commit comments

Comments
 (0)