merge: sync Rongsong's scheduler-framework into chatbot
Full merge of origin/scheduler-framework (scheduler-core restructure,
failover-adoption, WAL_JOB_DISPATCH, apiserver backend health/heartbeat,
build-time versioning, bug-1673/1676/1678/1679/1680).
Conflict resolution:
- scheduler: adopt Rongsong's scheduler-core architecture (driver loop,
queue project/picker fields, resource bug-1569 fix)
- worker/controller_connector.c: keep Rongsong's reconnect/rejoin
structure, PORT our bug-1509 resend_job_status onto the rejoin success
path (his reconnect didn't re-report job state)
- apiserver backend: take Rongsong's health/heartbeat (supersedes our
e505066 circuit breaker)
- group.c: keep our bug-1513 comment
- misc: take theirs for additive fixes (go_build versioning,
test_group.c, persist.c RUSAGE_UPDATE, FilterRows bug-1680)
NOTE: our scheduler fixes (bug-1494 family dispatch-fail requeue,
PEND-reason classification) are NOT in Rongsong's branch — needs
verification/porting onto scheduler-core (separate follow-up).
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
commit
4e894d2184
395 changed files with 88517 additions and 5742 deletions
|
|
@ -276,6 +276,25 @@ static int xcesched_push_workers(cluster_t* c)
|
|||
workers.workers = (xce_worker_t**)wlist.data;
|
||||
workers.count = workers.n_total;
|
||||
|
||||
/* bug-1568 instrumentation: this is the FULL initial worker sync sent
|
||||
* once, at on_scheduler_join() -- distinct from sched_worker_change()'s
|
||||
* per-event incremental push (this file, above), which only fires
|
||||
* AFTER a scheduler is already connected. A scheduler that connects
|
||||
* before this controller's own resource_sync has completed its first
|
||||
* poll cycle would see 0 resvals here even though this push path
|
||||
* itself is working correctly. */
|
||||
if (workers.n_total > 0) {
|
||||
int total_resvals = 0;
|
||||
|
||||
for (i = 0; i < workers.n_total; i++) {
|
||||
xce_worker_t* w = workers.workers[i];
|
||||
|
||||
total_resvals += (w != NULL) ? w->nresvals_to_sched : 0;
|
||||
}
|
||||
TRACE("%s initial sync: %d worker(s), %d total resval(s)", __func__,
|
||||
workers.n_total, total_resvals);
|
||||
}
|
||||
|
||||
rc = xce_push_data_req(c->sched.ep, c->myhost, &data, check_controller, c,
|
||||
100);
|
||||
|
||||
|
|
@ -533,6 +552,14 @@ static int sched_worker_change(int type, int situation, void* data,
|
|||
if (c->sched.ep != NULL) {
|
||||
switch (situation) {
|
||||
case HOOK_AFTER_EVENT:
|
||||
/* bug-1568 instrumentation: the controller-side count actually
|
||||
* being pushed to the scheduler right now -- compare against
|
||||
* core_build_worker()'s "WORKERS_PUSH carries N resval(s)"
|
||||
* TRACE (scheduler/src/core_events.c) in the scheduler's own
|
||||
* log for the same worker/timestamp to confirm the wire push
|
||||
* itself is not where a resource value gets lost. */
|
||||
TRACE("%s worker %s pushing %d resval(s) to scheduler", __func__,
|
||||
w->host.name, resvalist.count);
|
||||
xlist_init(&wlist, 2);
|
||||
xlist_store(&wlist, w);
|
||||
rc = xcesched_push_workerlist(c, &wlist);
|
||||
|
|
@ -544,11 +571,8 @@ static int sched_worker_change(int type, int situation, void* data,
|
|||
}
|
||||
mylock_unlock(&(c->sched.lock));
|
||||
|
||||
#if 0
|
||||
/*FIXME*/
|
||||
free_name_val_list(&(w->host.resvals_to_sched),
|
||||
&(w->host.nresvals_to_sched));
|
||||
#endif
|
||||
w->host.nresvals_to_sched = 0;
|
||||
w->host.resvals_to_sched = NULL;
|
||||
xlist_fini(&resvalist);
|
||||
|
||||
return rc;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue