Refactor analyze recovery and worker busy status
The analyze recovery scan has been refactored to iterate through user directories and enqueue pending analysis jobs more efficiently. The `WorkerBusy` status has been introduced as an `Arc<AtomicBool>` to track whether the analyze worker is currently processing a job. This `WorkerBusy` flag is used in the `analyze::worker::run` function and managed by a `BusyGuard` RAII struct, ensuring the flag is correctly set and unset even in case of panics. The `handle_my_cases` and `handle_case_detail` handlers in `user_web.rs` now utilize the `WorkerBusy` flag to accurately display the "analyzing" status and to trigger a self-heal of orphaned analysis inputs when the worker is idle. Additionally, the `WorkerBusy` type is now exported from `server/src/lib.rs` to be accessible by other modules. The test cases have been updated to include the `WorkerBusy` parameter when spawning the analyze worker.
This commit is contained in:
@@ -81,10 +81,13 @@ async fn main() {
|
||||
|
||||
// Analyze pipeline: channel + worker + recovery scan.
|
||||
let (analyze_tx, analyze_rx) = analyze::channel();
|
||||
let worker_busy: doctate_server::WorkerBusy =
|
||||
std::sync::Arc::new(std::sync::atomic::AtomicBool::new(false));
|
||||
tokio::spawn(analyze::worker::run(
|
||||
analyze_rx,
|
||||
config.clone(),
|
||||
http_client.clone(),
|
||||
worker_busy.clone(),
|
||||
));
|
||||
{
|
||||
let tx = analyze_tx.clone();
|
||||
@@ -99,6 +102,7 @@ async fn main() {
|
||||
transcribe_tx,
|
||||
analyze_tx,
|
||||
session_store: doctate_server::web_session::new_store(),
|
||||
worker_busy,
|
||||
};
|
||||
|
||||
let addr = format!("0.0.0.0:{}", config.server_port);
|
||||
|
||||
Reference in New Issue
Block a user