No description
Find a file
Rongsong Shen faedc6fc49
fix(deploy-ha): guard against double-launching a live HA deploy
start.sh/start-worker.sh/start-scheduler.sh/start-apiserver.sh had no
check for an already-running instance, so re-running start-all.sh (or
a generated per-component script) against a still-live deploy silently
spawned a full duplicate process set under the identical --myname/
--peers/ports. Combined with SO_REUSEPORT on every listening socket
(src/lib/netio.c), the duplicate's bind()/listen() succeeded instead
of failing loudly, so two live controllers per node ended up voting
into the same Raft group with independently diverged term/log state --
a split-brain that surfaced as non-converging elections, a bouncing
redirect chain, and ctrlstatus reporting an unknown primary for 40+
seconds on a freshly deployed cluster.

Each generated launcher now writes a pidfile under $TOP/run/ and
refuses to start if a live process already owns it, verified via
/proc/<pid>/cmdline identity match (not just liveness) to avoid a
PID-reuse false positive. start-all.sh preflights all expected
pidfiles before launching anything, failing fast and loud instead of
partially duplicating some nodes. Each script's final invocation now
uses exec so the pidfile records the daemon's own PID directly, which
also collapses the previous wrapper+child two-process-per-component
layout into one process. cleanup.sh clears stale pidfiles for hygiene.

Verified live in-sandbox: normal start-all.sh still elects a primary
and starts all 6 components; a second start-all.sh run against the
same live deploy now refuses cleanly with all 6 already-running
components identified, process count unchanged.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AgYRU3zDTqNGV5Jk8aiKLg
2026-08-27 07:59:24 +00:00
.claude chore(xce-test-rc-file): pass --norc from existing xce_test automation 2026-08-27 02:24:56 +00:00
.kiro test(scheduler-sim-eager-reconciliation): task 3.3 full regression confirmation 2026-08-27 06:13:12 +00:00
.wolf chore(wolf): checkpoint buglog.json (1057 bugs) 2026-08-26 14:30:13 +00:00
docs/superpowers/plans update documents 2026-08-10 17:51:51 +08:00
raft chore: checkpoint all prior work for clean state 2026-06-04 13:04:16 +00:00
reports chore(specs): add scheduler-sim-eager-reconciliation spec, weekly report, cross-spec sequencing notes 2026-08-24 12:56:35 +00:00
scripts fix(gitea-sync): unwrap buglog.json's {version,bugs} wrapper before iterating (bug-1677) 2026-08-24 14:23:31 +00:00
src fix(deploy-ha): guard against double-launching a live HA deploy 2026-08-27 07:59:24 +00:00
.clang-format reformat code and job array 2025-11-07 16:14:27 +08:00
.gitignore chore: gitignore generated capnp-c codegen output 2026-08-24 13:05:49 +00:00
.mcp.json checkpoint: bug-851 root cause + raft TLA+ conformance spec family 2026-06-21 14:02:15 +00:00
.opencode.json checkpoint: bug-851 root cause + raft TLA+ conformance spec family 2026-06-21 14:02:15 +00:00
CLAUDE.md update documents 2026-08-10 17:51:51 +08:00
README.md save works 2026-03-03 16:49:26 +08:00

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.