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 <flokli@flokli.de> Tested-by: BuildkiteCI Reviewed-by: Connor Brewster <cbrewster@hey.com>
This commit is contained in:
parent
f6c759de58
commit
830fdda8d4
4 changed files with 31 additions and 19 deletions
|
|
@ -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<String>,
|
||||
/// 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<dyn std::error::Error>> {
|
||||
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<dyn std::error::Error>> {
|
|||
)
|
||||
.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<dyn std::error::Error>> {
|
|||
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 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue