fc-evaluator: use LISTEN/NOTIFY for reactive wakeups

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Ibee7506a9a5ffa008c41fae8e9758db66a6a6964
This commit is contained in:
raf 2026-02-16 21:04:32 +03:00
commit edaf4313e9
Signed by: NotAShelf
GPG key ID: 29D95B64378DB4BF
2 changed files with 22 additions and 4 deletions

View file

@ -1,3 +1,5 @@
use std::sync::Arc;
use clap::Parser;
use fc_common::{Config, Database};
@ -29,8 +31,15 @@ async fn main() -> anyhow::Result<()> {
let pool = db.pool().clone();
let eval_config = config.evaluator;
let wakeup = Arc::new(tokio::sync::Notify::new());
let listener_handle = fc_common::pg_notify::spawn_listener(
db.pool(),
&[fc_common::pg_notify::CHANNEL_JOBSETS_CHANGED],
wakeup.clone(),
);
tokio::select! {
result = fc_evaluator::eval_loop::run(pool, eval_config) => {
result = fc_evaluator::eval_loop::run(pool, eval_config, wakeup) => {
if let Err(e) = result {
tracing::error!("Evaluator loop failed: {e}");
}
@ -40,6 +49,9 @@ async fn main() -> anyhow::Result<()> {
}
}
listener_handle.abort();
let _ = listener_handle.await;
tracing::info!("Evaluator shutting down, closing database pool");
db.close().await;