@@ -202,19 +202,20 @@ async fn main() -> anyhow::Result<()> {
202202 // Dispatcher is the sole serialization path for all modes. Message = cap 1
203203 // (each message dispatches alone, FIFO). Thread / Lane = configured cap;
204204 // grouping decides whether senders share a buffer or get their own lane.
205- let ( slack_cap, slack_grouping) = match slack_cfg. message_processing_mode {
205+ let ( slack_cap, slack_grouping, slack_idle ) = match slack_cfg. message_processing_mode {
206206 config:: MessageProcessingMode :: Message =>
207- ( 1 , dispatch:: BatchGrouping :: Thread ) ,
207+ ( 1 , dispatch:: BatchGrouping :: Thread , dispatch :: PER_MESSAGE_CONSUMER_IDLE_TIMEOUT ) ,
208208 config:: MessageProcessingMode :: Thread =>
209- ( slack_cfg. max_buffered_messages , dispatch:: BatchGrouping :: Thread ) ,
209+ ( slack_cfg. max_buffered_messages , dispatch:: BatchGrouping :: Thread , dispatch :: DEFAULT_CONSUMER_IDLE_TIMEOUT ) ,
210210 config:: MessageProcessingMode :: Lane =>
211- ( slack_cfg. max_buffered_messages , dispatch:: BatchGrouping :: Lane ) ,
211+ ( slack_cfg. max_buffered_messages , dispatch:: BatchGrouping :: Lane , dispatch :: DEFAULT_CONSUMER_IDLE_TIMEOUT ) ,
212212 } ;
213- let slack_dispatcher = Arc :: new ( dispatch:: Dispatcher :: new (
213+ let slack_dispatcher = Arc :: new ( dispatch:: Dispatcher :: with_idle_timeout (
214214 router. clone ( ) ,
215215 slack_cap,
216216 slack_cfg. max_batch_tokens ,
217217 slack_grouping,
218+ slack_idle,
218219 ) ) ;
219220 dispatchers. lock ( ) . unwrap ( ) . push ( slack_dispatcher. clone ( ) ) ;
220221 Some ( tokio:: spawn ( async move {
@@ -247,19 +248,20 @@ async fn main() -> anyhow::Result<()> {
247248 let router = router. clone ( ) ;
248249 let shutdown_rx = shutdown_rx. clone ( ) ;
249250 info ! ( url = %gw_cfg. url, "starting gateway adapter" ) ;
250- let ( gw_cap, gw_grouping) = match gw_cfg. message_processing_mode {
251+ let ( gw_cap, gw_grouping, gw_idle ) = match gw_cfg. message_processing_mode {
251252 config:: MessageProcessingMode :: Message =>
252- ( 1 , dispatch:: BatchGrouping :: Thread ) ,
253+ ( 1 , dispatch:: BatchGrouping :: Thread , dispatch :: PER_MESSAGE_CONSUMER_IDLE_TIMEOUT ) ,
253254 config:: MessageProcessingMode :: Thread =>
254- ( gw_cfg. max_buffered_messages , dispatch:: BatchGrouping :: Thread ) ,
255+ ( gw_cfg. max_buffered_messages , dispatch:: BatchGrouping :: Thread , dispatch :: DEFAULT_CONSUMER_IDLE_TIMEOUT ) ,
255256 config:: MessageProcessingMode :: Lane =>
256- ( gw_cfg. max_buffered_messages , dispatch:: BatchGrouping :: Lane ) ,
257+ ( gw_cfg. max_buffered_messages , dispatch:: BatchGrouping :: Lane , dispatch :: DEFAULT_CONSUMER_IDLE_TIMEOUT ) ,
257258 } ;
258- let gw_dispatcher = Arc :: new ( dispatch:: Dispatcher :: new (
259+ let gw_dispatcher = Arc :: new ( dispatch:: Dispatcher :: with_idle_timeout (
259260 router. clone ( ) ,
260261 gw_cap,
261262 gw_cfg. max_batch_tokens ,
262263 gw_grouping,
264+ gw_idle,
263265 ) ) ;
264266 dispatchers. lock ( ) . unwrap ( ) . push ( gw_dispatcher. clone ( ) ) ;
265267 let params = gateway:: GatewayParams {
@@ -346,19 +348,20 @@ async fn main() -> anyhow::Result<()> {
346348 "starting discord adapter"
347349 ) ;
348350
349- let ( discord_cap, discord_grouping) = match discord_cfg. message_processing_mode {
351+ let ( discord_cap, discord_grouping, discord_idle ) = match discord_cfg. message_processing_mode {
350352 config:: MessageProcessingMode :: Message =>
351- ( 1 , dispatch:: BatchGrouping :: Thread ) ,
353+ ( 1 , dispatch:: BatchGrouping :: Thread , dispatch :: PER_MESSAGE_CONSUMER_IDLE_TIMEOUT ) ,
352354 config:: MessageProcessingMode :: Thread =>
353- ( discord_cfg. max_buffered_messages , dispatch:: BatchGrouping :: Thread ) ,
355+ ( discord_cfg. max_buffered_messages , dispatch:: BatchGrouping :: Thread , dispatch :: DEFAULT_CONSUMER_IDLE_TIMEOUT ) ,
354356 config:: MessageProcessingMode :: Lane =>
355- ( discord_cfg. max_buffered_messages , dispatch:: BatchGrouping :: Lane ) ,
357+ ( discord_cfg. max_buffered_messages , dispatch:: BatchGrouping :: Lane , dispatch :: DEFAULT_CONSUMER_IDLE_TIMEOUT ) ,
356358 } ;
357- let discord_dispatcher = Arc :: new ( dispatch:: Dispatcher :: new (
359+ let discord_dispatcher = Arc :: new ( dispatch:: Dispatcher :: with_idle_timeout (
358360 router. clone ( ) ,
359361 discord_cap,
360362 discord_cfg. max_batch_tokens ,
361363 discord_grouping,
364+ discord_idle,
362365 ) ) ;
363366 dispatchers. lock ( ) . unwrap ( ) . push ( discord_dispatcher. clone ( ) ) ;
364367
0 commit comments