Skip to content

Commit 5b83234

Browse files
apollo_storage,apollo_rpc: migrate hyper to 1.x PART 10
1 parent fca648f commit 5b83234

File tree

6 files changed

+66
-60
lines changed

6 files changed

+66
-60
lines changed

Cargo.lock

Lines changed: 21 additions & 21 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,8 @@ async-stream = "0.3.3"
219219
async-trait = "0.1.79"
220220
asynchronous-codec = "0.7.0"
221221
axum_08 = { package = "axum", version = "0.8" }
222+
# TODO(victork): finalise migration to hyper 1.x
223+
tower_05 = { package = "tower", version = "0.5" }
222224
base64 = "0.13.0"
223225
bench_tools.path = "crates/bench_tools"
224226
bitvec = "1.0.1"

crates/apollo_rpc/Cargo.toml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@ serde_json = { workspace = true, features = ["arbitrary_precision"] }
3030
starknet-types-core.workspace = true
3131
starknet_api.workspace = true
3232
tokio = { workspace = true, features = ["full", "sync"] }
33-
# tower 0.4 is required for jsonrpsee 0.24 http middleware compatibility (jsonrpsee expects tower 0.4 types)
34-
tower = { version = "0.4.13", features = ["full"] }
3533
tower_05 = { workspace = true, features = ["full"] }
3634
tracing.workspace = true
3735
validator = { workspace = true, features = ["derive"] }

crates/apollo_rpc/src/lib.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ use apollo_storage::state::StateStorageReader;
3333
use apollo_storage::{StorageReader, StorageScope, StorageTxn};
3434
use jsonrpsee::core::RpcResult;
3535
use jsonrpsee::server::middleware::rpc::RpcServiceBuilder;
36-
use jsonrpsee::server::{Server, ServerHandle};
36+
use jsonrpsee::server::{Server, ServerConfig, ServerHandle};
3737
use jsonrpsee::types::error::ErrorCode::InternalError;
3838
use jsonrpsee::types::error::INTERNAL_ERROR_MSG;
3939
use jsonrpsee::types::ErrorObjectOwned;
@@ -244,9 +244,12 @@ pub async fn run_server(
244244
);
245245
let addr;
246246
let handle;
247-
let server_builder = Server::builder()
247+
let server_config = ServerConfig::builder()
248248
.max_request_body_size(SERVER_MAX_BODY_SIZE)
249-
.set_http_middleware(tower::ServiceBuilder::new().filter_async(proxy_rpc_request));
249+
.build();
250+
let server_builder = Server::builder()
251+
.set_config(server_config)
252+
.set_http_middleware(tower_05::ServiceBuilder::new().filter_async(proxy_rpc_request));
250253

251254
let server_address = SocketAddr::new(config.ip, config.port);
252255

crates/apollo_rpc/src/middleware.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use jsonrpsee::core::http_helpers::read_body;
22
use jsonrpsee::server::HttpRequest;
33
use regex::Regex;
4-
use tower::BoxError;
4+
use tower_05::BoxError;
55
use tracing::debug;
66

77
use crate::version_config::{VERSION_0_8, VERSION_PATTERN};

crates/apollo_rpc/src/rpc_metrics/mod.rs

Lines changed: 36 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,9 @@
22
mod rpc_metrics_test;
33

44
use std::collections::HashSet;
5-
use std::future::Future;
6-
use std::pin::Pin;
7-
use std::task::{Context, Poll};
85
use std::time::Instant;
96

10-
use jsonrpsee::server::middleware::rpc::RpcServiceT;
7+
use jsonrpsee::server::middleware::rpc::{Batch, Notification, RpcServiceT};
118
use jsonrpsee::server::MethodResponse;
129
use jsonrpsee::types::Request;
1310
use jsonrpsee::Methods;
@@ -83,42 +80,48 @@ pub(crate) struct MetricLoggerService<S> {
8380
logger: MetricLogger,
8481
}
8582

86-
impl<'a, S> RpcServiceT<'a> for MetricLoggerService<S>
83+
impl<S> RpcServiceT for MetricLoggerService<S>
8784
where
88-
S: RpcServiceT<'a> + Send + Sync + Clone + 'static,
85+
S: RpcServiceT<MethodResponse = MethodResponse, BatchResponse = MethodResponse, NotificationResponse = MethodResponse>
86+
+ Send
87+
+ Sync
88+
+ Clone
89+
+ 'static,
8990
{
90-
type Future = MetricResponseFuture<S::Future>;
91-
92-
fn call(&self, request: Request<'a>) -> Self::Future {
91+
type MethodResponse = MethodResponse;
92+
type BatchResponse = MethodResponse;
93+
type NotificationResponse = MethodResponse;
94+
95+
fn call<'a>(
96+
&self,
97+
request: Request<'a>,
98+
) -> impl std::future::Future<Output = Self::MethodResponse> + Send + 'a {
9399
let method_name = request.method_name().to_string();
94-
MetricResponseFuture {
95-
fut: Box::pin(self.service.call(request)),
96-
method_name,
97-
logger: self.logger.clone(),
98-
started_at: Instant::now(),
100+
let logger = self.logger.clone();
101+
let service = self.service.clone();
102+
let started_at = Instant::now();
103+
104+
async move {
105+
let response = service.call(request).await;
106+
logger.on_result(&method_name, response.is_success(), started_at);
107+
response
99108
}
100109
}
101-
}
102-
103-
/// Response future that records metrics when the response is ready.
104-
pub(crate) struct MetricResponseFuture<F> {
105-
fut: Pin<Box<F>>,
106-
method_name: String,
107-
logger: MetricLogger,
108-
started_at: Instant,
109-
}
110110

111-
impl<F: Future<Output = MethodResponse>> Future for MetricResponseFuture<F> {
112-
type Output = MethodResponse;
113-
114-
fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
115-
let res = self.fut.as_mut().poll(cx);
116-
117-
if let Poll::Ready(ref response) = res {
118-
self.logger.on_result(&self.method_name, response.is_success(), self.started_at);
119-
}
111+
fn batch<'a>(
112+
&self,
113+
batch: Batch<'a>,
114+
) -> impl std::future::Future<Output = Self::BatchResponse> + Send + 'a {
115+
let service = self.service.clone();
116+
async move { service.batch(batch).await }
117+
}
120118

121-
res
119+
fn notification<'a>(
120+
&self,
121+
n: Notification<'a>,
122+
) -> impl std::future::Future<Output = Self::NotificationResponse> + Send + 'a {
123+
let service = self.service.clone();
124+
async move { service.notification(n).await }
122125
}
123126
}
124127

0 commit comments

Comments
 (0)