add LIFO scheduling for database frontend pool workers

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk 2024-12-25 06:17:18 +00:00 committed by strawberry
parent 6458f4b195
commit 74eb30c106
3 changed files with 17 additions and 6 deletions

View file

@ -8,7 +8,7 @@ use std::{
},
};
use async_channel::{Receiver, RecvError, Sender};
use async_channel::{Receiver, RecvError, Sched, Sender};
use conduwuit::{
debug, debug_warn, defer, err, implement,
result::DebugInspect,
@ -65,9 +65,14 @@ const QUEUE_LIMIT: (usize, usize) = (1, 2048);
#[implement(Pool)]
pub(crate) async fn new(server: &Arc<Server>) -> Result<Arc<Self>> {
const CHAN_SCHED: (Sched, Sched) = (Sched::Fifo, Sched::Lifo);
let (total_workers, queue_sizes, topology) = configure(server);
let (senders, receivers) = queue_sizes.into_iter().map(async_channel::bounded).unzip();
let (senders, receivers) = queue_sizes
.into_iter()
.map(|cap| async_channel::bounded_with_sched(cap, CHAN_SCHED))
.unzip();
let pool = Arc::new(Self {
server: server.clone(),