Skip to content

Commit

Permalink
actually bind to more than 1 ip
Browse files Browse the repository at this point in the history
  • Loading branch information
jeromegn committed Apr 23, 2024
1 parent b1cf041 commit a92cc40
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 29 deletions.
4 changes: 2 additions & 2 deletions crates/corro-agent/src/agent/run_root.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ async fn run(agent: Agent, opts: AgentOptions, pconf: PerfConfig) -> eyre::Resul
let AgentOptions {
gossip_server_endpoint,
transport,
api_listener,
api_listeners,
tripwire,
lock_registry,
rx_bcast,
Expand Down Expand Up @@ -96,7 +96,7 @@ async fn run(agent: Agent, opts: AgentOptions, pconf: PerfConfig) -> eyre::Resul
&tripwire,
subs_bcast_cache,
&subs_manager,
api_listener,
api_listeners,
)
.await?;

Expand Down
11 changes: 7 additions & 4 deletions crates/corro-agent/src/agent/setup.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ pub struct AgentOptions {
pub lock_registry: LockRegistry,
pub gossip_server_endpoint: quinn::Endpoint,
pub transport: Transport,
pub api_listener: TcpListener,
pub api_listeners: Vec<TcpListener>,
pub rx_bcast: CorroReceiver<BroadcastInput>,
pub rx_apply: CorroReceiver<(ActorId, Version)>,
pub rx_clear_buf: CorroReceiver<(ActorId, RangeInclusive<Version>)>,
Expand Down Expand Up @@ -132,8 +132,11 @@ pub async fn setup(conf: Config, tripwire: Tripwire) -> eyre::Result<(Agent, Age

let transport = Transport::new(&conf.gossip, rtt_tx).await?;

let api_listener = TcpListener::bind(conf.api.bind_addr.as_slice()).await?;
let api_addr = api_listener.local_addr()?;
let mut api_listeners = Vec::with_capacity(conf.api.bind_addr.len());
for addr in conf.api.bind_addr.iter() {
api_listeners.push(TcpListener::bind(addr).await?);
}
let api_addr = api_listeners.first().unwrap().local_addr()?;

let clock = Arc::new(
uhlc::HLCBuilder::default()
Expand Down Expand Up @@ -166,7 +169,7 @@ pub async fn setup(conf: Config, tripwire: Tripwire) -> eyre::Result<(Agent, Age
let opts = AgentOptions {
gossip_server_endpoint,
transport,
api_listener,
api_listeners,
lock_registry,
rx_bcast,
rx_apply,
Expand Down
42 changes: 22 additions & 20 deletions crates/corro-agent/src/agent/util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -383,7 +383,7 @@ pub async fn setup_http_api_handler(
tripwire: &Tripwire,
subs_bcast_cache: BcastCache,
subs_manager: &SubsManager,
api_listener: TcpListener,
api_listeners: Vec<TcpListener>,
) -> eyre::Result<()> {
let api = Router::new()
// transactions
Expand Down Expand Up @@ -484,25 +484,27 @@ pub async fn setup_http_api_handler(
.layer(DefaultBodyLimit::disable())
.layer(TraceLayer::new_for_http());

let api_addr = api_listener.local_addr()?;
info!("Starting API listener on tcp/{api_addr}");
let mut incoming = AddrIncoming::from_listener(api_listener)?;

incoming.set_nodelay(true);
spawn_counted(
axum::Server::builder(incoming)
.executor(CountedExecutor)
.serve(
api.clone()
.into_make_service_with_connect_info::<SocketAddr>(),
)
.with_graceful_shutdown(
tripwire
.clone()
.inspect(move |_| info!("corrosion api http tripped {api_addr}")),
)
.inspect(|_| info!("corrosion api is done")),
);
for api_listener in api_listeners {
let api_addr = api_listener.local_addr()?;
info!("Starting API listener on tcp/{api_addr}");
let mut incoming = AddrIncoming::from_listener(api_listener)?;

incoming.set_nodelay(true);
spawn_counted(
axum::Server::builder(incoming)
.executor(CountedExecutor)
.serve(
api.clone()
.into_make_service_with_connect_info::<SocketAddr>(),
)
.with_graceful_shutdown(
tripwire
.clone()
.inspect(move |_| info!("corrosion api http tripped {api_addr}")),
)
.inspect(|_| info!("corrosion api is done")),
);
}

Ok(())
}
Expand Down
3 changes: 1 addition & 2 deletions crates/corrosion/src/command/agent.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,7 @@ pub async fn run(config: Config, config_path: &Utf8PathBuf) -> eyre::Result<()>
)?;

if !config.db.schema_paths.is_empty() {
let client =
corro_client::CorrosionApiClient::new(config.api.bind_addr.first().unwrap().clone());
let client = corro_client::CorrosionApiClient::new(*config.api.bind_addr.first().unwrap());
match client
.schema_from_paths(config.db.schema_paths.as_slice())
.await
Expand Down
2 changes: 1 addition & 1 deletion crates/corrosion/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -577,7 +577,7 @@ impl Cli {
Ok(if let Some(api_addr) = self.api_addr {
api_addr
} else {
self.config()?.api.bind_addr.first().unwrap().clone()
*self.config()?.api.bind_addr.first().unwrap()
})
}

Expand Down

0 comments on commit a92cc40

Please sign in to comment.