improve Server::run
This commit is contained in:
@@ -43,25 +43,27 @@ impl Server {
|
|||||||
pub async fn run(&mut self, mut shutdown: oneshot::Receiver<()>) -> Result<()> {
|
pub async fn run(&mut self, mut shutdown: oneshot::Receiver<()>) -> Result<()> {
|
||||||
let shutdown = &mut shutdown;
|
let shutdown = &mut shutdown;
|
||||||
|
|
||||||
|
let result = tokio::select! {
|
||||||
|
biased;
|
||||||
|
v = self._run() => v,
|
||||||
|
_ = &mut *shutdown => Ok(()),
|
||||||
|
};
|
||||||
|
|
||||||
|
log::info!("Shutting down");
|
||||||
|
self.db.shutdown().await;
|
||||||
|
let _ = (&mut self.expiration_manager_handle).await;
|
||||||
|
|
||||||
|
result
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn _run(&mut self) -> Result<()> {
|
||||||
loop {
|
loop {
|
||||||
let permit = Arc::clone(&self.connection_limit)
|
let permit = Arc::clone(&self.connection_limit)
|
||||||
.acquire_owned()
|
.acquire_owned()
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let Some(socket) = ({
|
let socket = self.listener.accept().await?.0;
|
||||||
tokio::select! {
|
|
||||||
socket = self.listener.accept() => Some(socket?.0),
|
|
||||||
_ = &mut *shutdown => None,
|
|
||||||
}
|
|
||||||
}) else {
|
|
||||||
log::info!("Shutting down");
|
|
||||||
|
|
||||||
self.db.shutdown().await;
|
|
||||||
let _ = (&mut self.expiration_manager_handle).await;
|
|
||||||
|
|
||||||
return Ok(());
|
|
||||||
};
|
|
||||||
|
|
||||||
let addr = socket.peer_addr()?;
|
let addr = socket.peer_addr()?;
|
||||||
|
|
||||||
@@ -71,7 +73,7 @@ impl Server {
|
|||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
log::debug!("Spawned a new connection handler: {addr}");
|
log::debug!("Spawned a new connection handler: {addr}");
|
||||||
if let Err(e) = handler.run().await {
|
if let Err(e) = handler.run().await {
|
||||||
log::debug!("Handler::run error: {e:?}");
|
log::error!("Handler::run: {e:?}");
|
||||||
}
|
}
|
||||||
log::debug!("Connection handler ended: {addr}");
|
log::debug!("Connection handler ended: {addr}");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user