fix(scheduler): bug-1513 — rejoin crash root-caused to 3 rejoin re-push bugs, not a lib race
The "libxce reconnect heap corruption" (ASAN bad-free, free(): invalid pointer) was NOT a libxce bug — xce_ctx_reconnect is fine. The crashes are in the scheduler's rejoin state re-sync path (config/dataset re-push), fixed with the reconnect/rejoin feature now integrated: 1. group.c makeGroup refresh: FREEUP(m->u.name) raw-freed shared interned xstrings (makeString is a global refcounted table); the correct release is dereference(), matching group_killer. → dereference(). 2. limit.c limit_update_config: after key_add returns -EEXIST (rejoin re-push — limit name already present) it called kill_limit(limit), but xkvmgr_add's vclear already freed the limit via the kvmgr datakiller (=kill_limit). → skip on -EEXIST (idempotent re-push). 3. handler.c/scheduler.c: the config push was applied inline on the vcpu thread (sched_init_config adds queues/plugin queues) while job updates flow through pend_updates on the main loop — concurrent rejoin re-push let fcfs_update_job see a NULL j->queue (SIGSEGV). Route the config push through pend_updates (XCE_SCHED_OP_UPDATE_CONFIG, killer case already existed) and process config requests FIRST in sched_update via a staging queue so jobs always see their queues/resources. Verified: 295 lib unit tests pass under ASAN (incl. 2 new group-refresh regression tests), scheduler survives 3 consecutive controller restarts (each rejoin ok), full job lifecycle (submit→dispatch→DONE) on the cluster. Also fixed stale build deps (libxce_deps missing librtti_dep, scheduler_deps missing ssl_dep/c_capnproto_dep, unity include path). Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
2044dedb2f
commit
7f8c07ba85
10 changed files with 253 additions and 27 deletions
|
|
@ -122,7 +122,7 @@ tinylog_dep = dependency('tinylog')
|
|||
unity_dep = dependency('unity')
|
||||
ssl_dep = dependency('openssl')
|
||||
|
||||
libxce_deps = [c_capnproto_dep, ssl_dep, tinylog_dep, thread_dep]
|
||||
libxce_deps = [c_capnproto_dep, ssl_dep, tinylog_dep, thread_dep, librtti_dep]
|
||||
|
||||
#libxce_shared = shared_library('xce',
|
||||
# libxce_src,
|
||||
|
|
@ -193,7 +193,12 @@ libxce_test_src = ['testsuite/test.c',
|
|||
libxce_test_deps = [libxce_deps, librtti_dep, unity_dep, libxce_dep]
|
||||
libxce_test = executable('xcelib_test',
|
||||
libxce_test_src,
|
||||
include_directories: [incdir, build_inc],
|
||||
# unity.pc's Cflags only adds -I${includedir}/unity, so
|
||||
# <unity.h> resolves but <unity/unity.h> (used by several
|
||||
# suites) does not — add the parent includedir as well.
|
||||
include_directories: [incdir, build_inc,
|
||||
include_directories(
|
||||
unity_dep.get_variable('includedir'))],
|
||||
dependencies: libxce_test_deps,
|
||||
c_args: ['-DXCE_TESTING'],
|
||||
install: true)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue