rest-server: handle failure in worker task setup correctly
if setting up a new worker fails after it has been inserted into the WORKER_TASK_LIST, we need to clean it up instead of bubbling up the error right away, else we "leak" the worker task and it never finishes.. a worker task that never finishes will indefinitely block shutdown of the rest server process, including the "old" process when reloading the rest server. this issue was found in the wild on a system with lock contention on the file-based lock covering task index updating leading to lock acquiring timeouts. Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
This commit is contained in:
parent
6e600c74a8
commit
4e51ac3527
@ -923,7 +923,12 @@ impl WorkerTask {
|
||||
set_worker_count(hash.len());
|
||||
}
|
||||
|
||||
setup.update_active_workers(Some(&upid))?;
|
||||
let res = setup.update_active_workers(Some(&upid));
|
||||
if res.is_err() {
|
||||
// needed to undo the insertion into WORKER_TASK_LIST above
|
||||
worker.log_result(&res);
|
||||
res?
|
||||
}
|
||||
|
||||
Ok((worker, logger))
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user