myxce/src
lei.chen 2165b1ab12 feat(failover): worker keeps retrying forever + apiserver re-joins on reconnect
component-failover-adoption Req 2 (partial): two of the three daemons now
self-heal after a controller restart without an operator restart.

- worker (controller_connector.c): checking_connection() previously gave up
  after 5 retries and called handle_disconnect() (which set running=false and
  exited the connector thread). It now retries indefinitely — the connector
  thread is dedicated to this loop so the unbounded retry/sleep cannot block
  the worker's other liveness duties. Verified live: killing the controller
  leaves all 3 workers alive and retrying; they re-join when it returns.

- apiserver (clib.go): xcecli_heartbeat is fire-and-forget — it best-effort
  reconnects the transport but never re-joins, so after a controller restart
  push notifications stop. StartHeartbeat now tracks heartbeat failure→success
  and, on recovery, calls xce_backend_rejoin (xcecli_join as HostRole_apiserver)
  to re-register and resume pushes. Verified live: "backend re-joined
  controller after reconnect" logged during a controller kill/restart.

Scheduler reconnect NOT included: the rejoin works but exposes a pre-existing
libxce race — xce_ctx_reconnect's endpoint_fini tears down the old endpoint
while a lib vtask/io thread is still processing it, a deterministic double-free
(bad-free in the loader, same freed address offset across runs). Root-cause in
libxce netio/endpoint lifecycle is a separate task (documented in
left_scheduler_work.md).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-14 02:35:05 +00:00
..
autoscaler fix: nix build environment fixes 2026-07-24 07:03:18 +00:00
configs fix(apiserver): carry exec_user on job submit so jobs don't run as nobody (bug-1500) 2026-08-04 07:38:43 +00:00
controller feat(apiserver): expose PEND reason end-to-end (scheduler → API) 2026-08-13 09:16:13 +00:00
docs fix(configs): add worker-builtin load indices missing from resources.yaml 2026-08-02 07:36:03 +00:00
frontend feat(failover): worker keeps retrying forever + apiserver re-joins on reconnect 2026-08-14 02:35:05 +00:00
include feat(raft-adapter-conformance): add term field to ReplConfigPushReply schema 2026-07-29 09:09:56 +00:00
lib fix(libxce): swallow nop reply so heartbeat can't poison shared wbuf (bug-1508) 2026-08-05 09:41:00 +00:00
nixSupport fix(nix): pin capnpc source to immutable commit, not mutable main ref 2026-07-24 08:25:38 +00:00
scheduler test(scheduler): G-8 dequeue routing — UPDATE_JOB_FIELDS → in-place, bulk → no damage 2026-08-14 02:08:49 +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 feat(failover): worker keeps retrying forever + apiserver re-joins on reconnect 2026-08-14 02:35:05 +00: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