No description
XCE_CORE_EVENT_JOBS_PUSH's duplicate-jobid handling (sched_add_job() EEXIST) assumed a redelivery is always a harmless no-op -- true for bug-1714's array-push TOCTOU race (both copies start identically PEND), but not for a scheduler reconnect's full resync (on_scheduler_join() -> xcesched_push_jobs(), sched.c), which re-sends every currently-committed job through this same path regardless of how far its state has moved on since this scheduler last saw it. Live-reproduced on a real 3-node HA cluster + worker: the scheduler's outbound xcecli connection repeatedly failed over under a 50-element array-job load; each reconnect's resync redelivered jobs that had already finished (PEND/RUN -> DONE) while disconnected -- confirmed via ctrl-1.log's existing bug-1731 "c->sched.ep is NULL, notify SKIPPED" diagnostic firing for the same jobids during the gap, making the resync that job's only remaining chance to reach the scheduler. Discarding it unconditionally permanently froze the tracked job at its stale state: controller shows DONE, scheduler stuck at RUN/PEND forever. Fix: on EEXIST, look up the existing tracked job and merge in the redelivery's state if different (same terminal-transition accounts/allocs cleanup XCE_CORE_EVENT_JOB_STATE_CHANGE/JOB_UPDATE already do), instead of silently dropping it. Only state is merged; broader field reconciliation is out of scope, same as the existing allocs/accounts scope note this code path already carries. Bundled a requested logging fix at the same site (raw jobid -> fmt_jobid()). Verified live end to end: rebuilt scheduler, reran the same load against the same cluster (reconnect storm still occurred, proving the fix doesn't depend on suppressing it), both test arrays now show consistent DONE state matching the controller exactly. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019QxaSzHRB7pmYFp4cVnwkA |
||
|---|---|---|
| .claude | ||
| .kiro | ||
| .wolf | ||
| docs/superpowers/plans | ||
| raft | ||
| reports | ||
| scripts | ||
| src | ||
| .clang-format | ||
| .gitignore | ||
| .mcp.json | ||
| .opencode.json | ||
| CHANGES.md | ||
| CLAUDE.md | ||
| README.md | ||
1. commit 规则
- 每个人 fork 自己的 branch, 从自己的 branch 做 PR,review 完再 commit
2. code format
2.1. C
推荐使用 clang-format,公共配置放在源码里面 xce/.clang-format
(理论上直接使用源码里面 xce/.clang-format 文件格式不会变)
2.1.1. vscode 可以在配置中加上如下内容
"C_Cpp.clang_format_style": "WebKit",
"C_Cpp.clang_format_fallbackStyle": "WebKit",
2.1.2. vim & emacs
clang-format -style="{BasedOnStyle: webkit}" -i XX.c
2.2. golang
使用默认 gofmt
3. build environment and build (example of ubuntu)
3.1 build environment
- Install nix package management tool
sh <(curl -L https://nixos.org/nix/install) --daemon
- Edit /etc/nix/nix.conf to make sure
experimental-features = nix-command flakes
sandbox = true
sandbox-fallback = false
substituters = https://mirrors.ustc.edu.cn/nix-channels/store https://cache.nixos.org https://cache.nixos.org/
trusted-users = root <your account>
make sure that you have restarted nix-daemon service after you have changed /etc/nix/nix.conf
- Install socat and config ssh (for clone by ssh protocol)
nix profile add nixpkgs#socat
.ssh/config
Host gitea.shenrs.eu
HostName gitea.shenrs.eu
IdentityFile ~/.ssh/id_ed25519
ProxyCommand socat - openssl-connect:gitea.shenrs.eu:2022,snihost=gitea.shenrs.eu,verify=0
3.2 checkout source code
3.3 build (for package and release)
cd xce/src
# for build debug version
nix build --option sandbox false .#xcecore_debug
# for normal build
nix build --option sandbox false .#xcecore
You can find the generated binaries at =result= directory
3.4 build (for daily develop)
cd xce/src
nix develop
# using meson to generated build configuration (debug and address sanitize)
meson setup build --buildtype=debug -Db_sanitize=address
# run meson to build
meson compile -C build
# The generated files will be in build/
3.5 build AppImage package
cd xce/src
nix bundle --bundler github:ralismark/nix-appimage --option sandbox false .#xce
This will create all in one AppImage file which contains everything for package delivery.
4. misc
4.1. Windows remap ctrl and alt key
create a reg file, e.g. remapkey.reg
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,05,00,00,00,38,00,1d,00,1d,00,38,00,38,e0,1d,e0,1d,e0,38,e0,00,00,00,00
then double click remapkey.reg to import it. Restart OS.