From 830fdda8d47895dbbe145faaebfba27a1ad32289 Mon Sep 17 00:00:00 2001 From: Florian Klink Date: Sun, 30 Jun 2024 22:29:11 +0300 Subject: feat(tvix/store): use tokio-listener for tvix-store daemon command This allows binding on unix sockets, as well as systemd socket activation. Change-Id: Icf648c4fd0895468c52607deb6397b8b5928102b Reviewed-on: https://cl.tvl.fyi/c/depot/+/11901 Autosubmit: flokli Tested-by: BuildkiteCI Reviewed-by: Connor Brewster --- tvix/store/src/bin/tvix-store.rs | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) (limited to 'tvix/store/src/bin/tvix-store.rs') diff --git a/tvix/store/src/bin/tvix-store.rs b/tvix/store/src/bin/tvix-store.rs index 657ce06720ee..04b4c7a6aab0 100644 --- a/tvix/store/src/bin/tvix-store.rs +++ b/tvix/store/src/bin/tvix-store.rs @@ -9,9 +9,6 @@ use serde::Deserialize; use serde::Serialize; use std::path::PathBuf; use std::sync::Arc; -use tokio_listener::Listener; -use tokio_listener::SystemOptions; -use tokio_listener::UserOptions; use tonic::transport::Server; use tower::ServiceBuilder; use tower_http::trace::{DefaultMakeSpan, TraceLayer}; @@ -66,8 +63,9 @@ struct Cli { enum Commands { /// Runs the tvix-store daemon. Daemon { - #[arg(long, short = 'l')] - listen_address: Option, + /// The address to listen on. + #[clap(flatten)] + listen_args: tokio_listener::ListenerAddressLFlag, #[arg( long, @@ -198,7 +196,7 @@ fn default_threads() -> usize { async fn run_cli(cli: Cli) -> Result<(), Box> { match cli.command { Commands::Daemon { - listen_address, + listen_args, blob_service_addr, directory_service_addr, path_info_service_addr, @@ -212,11 +210,6 @@ async fn run_cli(cli: Cli) -> Result<(), Box> { ) .await?; - let listen_address = listen_address - .unwrap_or_else(|| "[::]:8000".to_string()) - .parse() - .unwrap(); - let mut server = Server::builder().layer( ServiceBuilder::new() .layer( @@ -251,15 +244,21 @@ async fn run_cli(cli: Cli) -> Result<(), Box> { router = router.add_service(reflection_svc); } - info!(listen_address=%listen_address, "starting daemon"); + let listen_address = &listen_args.listen_address.unwrap_or_else(|| { + "[::]:8000" + .parse() + .expect("invalid fallback listen address") + }); - let listener = Listener::bind( - &listen_address, - &SystemOptions::default(), - &UserOptions::default(), + let listener = tokio_listener::Listener::bind( + listen_address, + &Default::default(), + &listen_args.listener_options, ) .await?; + info!(listen_address=%listen_address, "starting daemon"); + router.serve_with_incoming(listener).await?; } Commands::Import { -- cgit 1.4.1