fix(worker): dbus_workers_update() starves workers after first DONE/EXITED (bug-1589)
Every early-exit branch in the worker_list scan either re-tested the same node forever (bare `continue`) or returned out of the whole function on the first DONE/EXITED worker, so job array elements past the head of the list never got their on_job_start report. Capture `next` before touching each node and always advance to it. Affects xcecd_virtual and real xcecd alike (same DBUS_MANAGER-gated function). Also records a roadmap follow-up (xcecd_virtual concurrent-job support, MXJ > 1) discovered while investigating this bug.
This commit is contained in:
parent
da99cb46a4
commit
70fe9e463b
4 changed files with 394 additions and 3 deletions
|
|
@ -58,3 +58,22 @@ test('worker xcecd_startup_order test', xcecd_startup_order_test,
|
|||
suite: 'worker',
|
||||
timeout: 60,
|
||||
env: ['ASAN_OPTIONS=detect_leaks=0'])
|
||||
|
||||
# bug-1589: dbus_workers_update() (xcecd_dbus_manager.c) worker-list
|
||||
# traversal regression test -- see test_dbus_workers_update.c's header
|
||||
# comment for the full root-cause trace. Same -DDBUS_MANAGER
|
||||
# -DVIRTUAL_CLUSTER flag pair the real `xcecd_virtual` executable uses
|
||||
# (worker/meson.build); DBUS_MANAGER has no effect on xcecd_dbus_manager.c
|
||||
# itself (no #ifdef DBUS_MANAGER branches there) but is included to match
|
||||
# production's exact build flags.
|
||||
dbus_workers_update_test = executable('dbus_workers_update_test',
|
||||
'test_dbus_workers_update.c',
|
||||
c_args: ['-DDBUS_MANAGER', '-DVIRTUAL_CLUSTER'],
|
||||
include_directories: [worker_test_incdir],
|
||||
dependencies: worker_test_deps,
|
||||
install: false)
|
||||
|
||||
test('worker dbus_workers_update test', dbus_workers_update_test,
|
||||
suite: 'worker',
|
||||
timeout: 60,
|
||||
env: ['ASAN_OPTIONS=detect_leaks=0'])
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue