fix: preserve admin-set host state across worker re-registration in makeWorker_
When a worker re-joins and already exists in workermgr, makeWorker_() now overrides the existing slot instead of returning EEXIST. Admin-set flags (LOCKEDU, CLOSED, HIDDEN, CLOSED_BY_ADMIN) survive the override. Add XCE_WORKER_CLOSED_BY_ADMIN flag to distinguish admin-closed hosts from workload-closed ones. worker_ctrl sets/clears it alongside CLOSED. Refactor worker_init/worker_destroy into copy_worker/kill_worker helpers shared by both fresh creation and override paths. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
d47b3375e7
commit
febb4a6c4d
6 changed files with 111 additions and 57 deletions
|
|
@ -616,13 +616,13 @@ int worker_ctrl(cluster_t* c, xce_hostctrl_t* ctrl)
|
|||
if (!(w->host.status & XCE_WORKER_CLOSED)) {
|
||||
goto clean;
|
||||
}
|
||||
w->host.status &= ~XCE_WORKER_CLOSED;
|
||||
w->host.status &= ~(XCE_WORKER_CLOSED | XCE_WORKER_CLOSED_BY_ADMIN);
|
||||
break;
|
||||
case HOST_CLOSE:
|
||||
if (w->host.status & XCE_WORKER_CLOSED) {
|
||||
goto clean;
|
||||
}
|
||||
w->host.status |= XCE_WORKER_CLOSED;
|
||||
w->host.status |= (XCE_WORKER_CLOSED | XCE_WORKER_CLOSED_BY_ADMIN);
|
||||
break;
|
||||
default:
|
||||
rc = -1;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue