myxce/src
lei.chen ee7dee0ed4 fix(scheduler): stop re-dispatching running jobs (bug-1498) + resval double-free (bug-1497)
bug-1498 (re-dispatch): sched_job_is_ready() was a stub returning 1, so any
job lingering in the fcfs pendJobs queue was always elected. A dispatched job
was never marked non-PEND (the controller defers its schedStartJob notify to
the not-yet-implemented apply pump, controller/job.c), so fcfs_update_job
re-enqueued it on every job update and the election thread re-dispatched the
running job — the worker got conflicting signals and the job was SIGTERM'd.

- sched_job_is_ready: elect only PEND, non-suspended jobs
- sched_commit_decision (dispatch): mark the job JOB_STAT_RUN on dispatch so
  it leaves the PEND set and is no longer re-electable
- fcfs_update_job: dedup via ordq_peek before enqueue

bug-1497 (double-free): sched_update's resval paths transferred ownership of
rv->val to sharedInst/w->resvals but left the request pointer set, so
sched_pend_update_killer double-freed it -> use-after-free in
build_host_eval_ctx. Clear rv->val = NULL on transfer.

Tests: new scheduler/testsuite/test_redispatch.c (8 cases): sched_job_is_ready
PEND gating + dispatch-commit marks the job RUN. Full scheduler meson suite
green. Live-verified: a `sleep 60` job is elected exactly once, runs the full
duration and exits 0 (`completed successfully`); before the fix it was
re-dispatched at ~11s and killed (SIGTERM 143).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-04 01:20:38 +00:00
..
autoscaler fix: nix build environment fixes 2026-07-24 07:03:18 +00:00
configs fix(scheduler): put_resvals treats resource idx 0 as invalid → SEGV 2026-08-03 06:53:14 +00:00
controller fix(controller): trim config versions by ns mtime; unique test tmpdir 2026-08-01 03:34:55 +00:00
docs fix(configs): add worker-builtin load indices missing from resources.yaml 2026-08-02 07:36:03 +00:00
frontend fix(schedulerclient): parse apiserver OrderMap columnar rows (bug-1491) 2026-08-02 05:01:16 +00:00
include feat(raft-adapter-conformance): add term field to ReplConfigPushReply schema 2026-07-29 09:09:56 +00:00
lib feat(config-upgrade-snapshot): live config-upgrade soak infra + fix bug-1468/bug-1469 (task 8.6) 2026-07-25 15:48:20 +00:00
nixSupport fix(nix): pin capnpc source to immutable commit, not mutable main ref 2026-07-24 08:25:38 +00:00
scheduler fix(scheduler): stop re-dispatching running jobs (bug-1498) + resval double-free (bug-1497) 2026-08-04 01:20:38 +00:00
schema feat(raft-adapter-conformance): add term field to ReplConfigPushReply schema 2026-07-29 09:09:56 +00:00
tools fix: nix build environment fixes 2026-07-24 07:03:18 +00:00
worker merge 2026-07-23 12:35:10 +08:00
xceadmin wip(admin-config-tool): task 6.3 HA E2E test (blocked, flaky primary-push) 2026-07-31 08:09:36 +00:00
flake.lock fix librtti package leak issue 2026-07-27 15:31:50 +08:00
flake.nix chore(nix): drop redundant capnpc override from flake.nix overlay 2026-08-01 03:04:10 +00:00
meson.build feat(admin-config-tool): wire xceadmin into meson + nix build 2026-07-22 10:46:45 +00:00
meson.options Merge Go frontend (apiserver + xcecli) into meson build 2026-04-14 11:23:18 +08:00