forked from lei.chen/myxce
No description
Adds --max-wal-records (mirrors the existing --wal-sync-ms pattern: main.c argp option -> myconf_t -> persist_config_set_max_wal_records()) so a deployment can force the WAL-record-count checkpoint trigger to fire on a job count a soak can actually reach, instead of the production default of 10000. Adds a new `--force-snapshot` soak mode (run-ha-soak.sh): submits enough jobs to cross the configured threshold, kills a non-primary node, wipes its data dir (a genuine empty rejoin), restarts it, and asserts the cluster reconverges with zero walcompare divergence and zero job loss. Fails loud (not a false PASS) if the restarted node's log shows no actual snapshot install, so the round can't silently report success without exercising the real scenario. INVESTIGATION FINDING (not yet resolved, this commit does not close 5.10a or ha-entity-snapshots 7.1): live-tested with temporary diagnostic logging (since reverted). schedule_checkpoint() correctly fires once wal_record_count reaches the configured threshold (confirmed: "wal_record_count=100 max=100" logged), but the delaymgr- scheduled checkpoint_task_fn never executes afterward -- no checkpoint ever completes, no snapshot file is ever written, in a live multi-node deployment. This is a separate, deeper issue in the delaymgr scheduling path (or its wiring for this specific call shape), not a bug in this commit's CLI plumbing or soak scaffolding -- both are built, tested, and confirmed working up to the point where the async checkpoint should run. Needs its own dedicated investigation (likely src/lib delaymgr, not persist.c) before --force-snapshot can produce a PASS. This also has production implications beyond the test scenario: if confirmed, WAL checkpoints may never fire automatically today, meaning WAL segments are never trimmed via this path in a live deployment. controller_unit_test: test_ha_startup 34/0, test_ha_core_safety 28/0, test_persist_checkpoint 5/0, test_walcompare 17/0 (no regression). Soak --selftest 17/17. |
||
|---|---|---|
| .claude | ||
| .kiro | ||
| .wolf | ||
| docs/superpowers/plans | ||
| ha/data | ||
| raft | ||
| src | ||
| .clang-format | ||
| .gitignore | ||
| .mcp.json | ||
| .opencode.json | ||
| CLAUDE.md | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| uninstall-code-review-graph.sh | ||
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.