Skip to content

Commit 546b32e

Browse files
authored
chore: add signal entrypoint (#162)
* add signal entrypoint * fixes
1 parent 1b1fc5d commit 546b32e

File tree

8 files changed

+67
-13
lines changed

8 files changed

+67
-13
lines changed

Cargo.lock

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

bin/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ tokio.workspace = true
1818
tree_hash.workspace = true
1919
tree_hash_derive.workspace = true
2020

21+
# telemetry
22+
tracing.workspace = true
23+
2124
# misc
2225
clap.workspace = true
2326
eyre.workspace = true

bin/pbs.rs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1-
use cb_common::{config::load_pbs_config, utils::initialize_pbs_tracing_log};
1+
use cb_common::{
2+
config::load_pbs_config,
3+
utils::{initialize_pbs_tracing_log, wait_for_signal},
4+
};
25
use cb_pbs::{DefaultBuilderApi, PbsService, PbsState};
36
use eyre::Result;
7+
use tracing::{error, info};
48

59
#[tokio::main]
610
async fn main() -> Result<()> {
@@ -13,7 +17,21 @@ async fn main() -> Result<()> {
1317

1418
let pbs_config = load_pbs_config()?;
1519
let _guard = initialize_pbs_tracing_log();
20+
1621
let state = PbsState::new(pbs_config);
1722
PbsService::init_metrics()?;
18-
PbsService::run::<_, DefaultBuilderApi>(state).await
23+
let server = PbsService::run::<_, DefaultBuilderApi>(state);
24+
25+
tokio::select! {
26+
maybe_err = server => {
27+
if let Err(err) = maybe_err {
28+
error!(%err, "PBS service unexpectedly stopped");
29+
}
30+
},
31+
_ = wait_for_signal() => {
32+
info!("shutting down");
33+
}
34+
}
35+
36+
Ok(())
1937
}

bin/signer.rs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
use cb_common::{
22
config::{StartSignerConfig, SIGNER_MODULE_NAME},
3-
utils::initialize_tracing_log,
3+
utils::{initialize_tracing_log, wait_for_signal},
44
};
55
use cb_signer::service::SigningService;
66
use eyre::Result;
7+
use tracing::{error, info};
78

89
#[tokio::main]
910
async fn main() -> Result<()> {
@@ -16,5 +17,18 @@ async fn main() -> Result<()> {
1617

1718
let config = StartSignerConfig::load_from_env()?;
1819
let _guard = initialize_tracing_log(SIGNER_MODULE_NAME);
19-
SigningService::run(config).await
20+
let server = SigningService::run(config);
21+
22+
tokio::select! {
23+
maybe_err = server => {
24+
if let Err(err) = maybe_err {
25+
error!(%err, "signing server unexpectedly stopped");
26+
}
27+
},
28+
_ = wait_for_signal() => {
29+
info!("shutting down");
30+
}
31+
}
32+
33+
Ok(())
2034
}

bin/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ pub mod prelude {
2121
get_header, get_status, register_validator, submit_block, BuilderApi, BuilderApiState,
2222
DefaultBuilderApi, PbsService, PbsState,
2323
};
24-
// The TreeHash derive macro requires tree_hash:: as import
24+
// The TreeHash derive macro requires tree_hash as import
2525
pub mod tree_hash {
2626
pub use tree_hash::*;
2727
}

crates/common/src/utils.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,3 +246,24 @@ pub fn get_user_agent_with_version(req_headers: &HeaderMap) -> eyre::Result<Head
246246
let ua = get_user_agent(req_headers);
247247
Ok(HeaderValue::from_str(&format!("commit-boost/{HEADER_VERSION_VALUE} {}", ua))?)
248248
}
249+
250+
#[cfg(unix)]
251+
pub async fn wait_for_signal() -> eyre::Result<()> {
252+
use tokio::signal::unix::{signal, SignalKind};
253+
254+
let mut sigint = signal(SignalKind::interrupt())?;
255+
let mut sigterm = signal(SignalKind::terminate())?;
256+
257+
tokio::select! {
258+
_ = sigint.recv() => {}
259+
_ = sigterm.recv() => {}
260+
}
261+
262+
Ok(())
263+
}
264+
265+
#[cfg(windows)]
266+
pub async fn wait_for_signal() -> eyre::Result<()> {
267+
tokio::signal::ctrl_c().await?;
268+
Ok(())
269+
}

crates/pbs/src/service.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ impl PbsService {
2121
let address = SocketAddr::from(([0, 0, 0, 0], state.config.pbs_config.port));
2222
let events_subs =
2323
state.config.event_publisher.as_ref().map(|e| e.n_subscribers()).unwrap_or_default();
24-
info!(version = COMMIT_BOOST_VERSION, ?address, events_subs, chain =? state.config.chain, "Starting PBS service");
24+
info!(version = COMMIT_BOOST_VERSION, ?address, events_subs, chain =? state.config.chain, "starting PBS service");
2525

2626
let app = create_app_router::<S, A>(state);
27-
let listener = TcpListener::bind(address).await.expect("failed tcp binding");
27+
let listener = TcpListener::bind(address).await?;
2828

2929
axum::serve(listener, app).await.wrap_err("PBS server exited")
3030
}

crates/signer/src/service.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use cb_common::{
2222
constants::COMMIT_BOOST_VERSION,
2323
types::{Jwt, ModuleId},
2424
};
25-
use eyre::{Result, WrapErr};
25+
use eyre::{Context, Result};
2626
use headers::{authorization::Bearer, Authorization};
2727
use tokio::{net::TcpListener, sync::RwLock};
2828
use tracing::{debug, error, info, warn};
@@ -71,12 +71,9 @@ impl SigningService {
7171
.route_layer(middleware::from_fn_with_state(state.clone(), jwt_auth));
7272

7373
let address = SocketAddr::from(([0, 0, 0, 0], config.server_port));
74-
let listener = TcpListener::bind(address).await.wrap_err("failed tcp binding")?;
74+
let listener = TcpListener::bind(address).await?;
7575

76-
if let Err(err) = axum::serve(listener, app).await {
77-
error!(%err, "Signing server exited")
78-
}
79-
Ok(())
76+
axum::serve(listener, app).await.wrap_err("signer server exited")
8077
}
8178
}
8279

0 commit comments

Comments
 (0)