1- use cb_common:: constants:: COMMIT_BOOST_VERSION ;
1+ use std:: time:: Duration ;
2+
3+ use cb_common:: {
4+ constants:: COMMIT_BOOST_VERSION ,
5+ pbs:: { BUILDER_API_PATH , GET_STATUS_PATH } ,
6+ } ;
27use cb_metrics:: provider:: MetricsProvider ;
3- use eyre:: { Context , Result } ;
8+ use eyre:: { bail , Context , Result } ;
49use prometheus:: core:: Collector ;
510use tokio:: net:: TcpListener ;
611use tracing:: info;
12+ use url:: Url ;
713
814use crate :: {
915 api:: BuilderApi ,
@@ -16,15 +22,30 @@ pub struct PbsService;
1622
1723impl PbsService {
1824 pub async fn run < S : BuilderApiState , A : BuilderApi < S > > ( state : PbsState < S > ) -> Result < ( ) > {
19- let address = state. config . endpoint ;
25+ let addr = state. config . endpoint ;
2026 let events_subs =
2127 state. config . event_publisher . as_ref ( ) . map ( |e| e. n_subscribers ( ) ) . unwrap_or_default ( ) ;
22- info ! ( version = COMMIT_BOOST_VERSION , ?address , events_subs, chain =? state. config. chain, "starting PBS service" ) ;
28+ info ! ( version = COMMIT_BOOST_VERSION , ?addr , events_subs, chain =? state. config. chain, "starting PBS service" ) ;
2329
2430 let app = create_app_router :: < S , A > ( state) ;
25- let listener = TcpListener :: bind ( address) . await ?;
31+ let listener = TcpListener :: bind ( addr) . await ?;
32+
33+ let task =
34+ tokio:: spawn (
35+ async move { axum:: serve ( listener, app) . await . wrap_err ( "PBS server exited" ) } ,
36+ ) ;
37+
38+ // wait for the server to start
39+ tokio:: time:: sleep ( Duration :: from_millis ( 250 ) ) . await ;
40+ let local_url =
41+ Url :: parse ( & format ! ( "http://{}{}{}" , addr, BUILDER_API_PATH , GET_STATUS_PATH ) ) ?;
42+
43+ let status = reqwest:: get ( local_url) . await ?;
44+ if !status. status ( ) . is_success ( ) {
45+ bail ! ( "PBS server failed to start. Are the relays properly configured?" ) ;
46+ }
2647
27- axum :: serve ( listener , app ) . await . wrap_err ( "PBS server exited" )
48+ task . await ?
2849 }
2950
3051 pub fn register_metric ( c : Box < dyn Collector > ) {
0 commit comments