feat(xce-build): add non-ASAN debug + release profiles; root-cause bug-1286 with the debug build
/xce-build now takes a build PROFILE: asan (default, debug+ASAN -> xce.build, backward-compatible), debug (non-ASAN -O0 -g3 -fno-inline -fno-omit-frame-pointer -> build.dbg, for gdb/cores), release (-O3 -> build.release). Each profile uses its own default build dir so variants don't clobber each other; arg2 may still be a legacy build_dir. asan runs the unit suites; debug/release are build-only (the suites are ASAN-oriented and the meson test harness is overlay-fs fragile, bug-924) and print how to run a suite directly. Why: bug-1282/bug-1286 are heisenbugs ASAN perturbs away (no SIGSEGV) and that gdb-on-release turns into a hang/timeout. The non-ASAN -O0 -g3 build reproduces them AND yields a symbolized backtrace under gdb. It immediately paid off: the debug profile ROOT-CAUSED bug-1286 (the round-4 segfault) — myreq_handler (cluster.c:251) does `c = ep->owner` then `ha_dispatch_gate(&c->ha,…)`; on chaotic restart a walCatchupEntry (op 37) vtask runs with ep->owner==NULL, so &c->ha = 0x3ff0 -> deref crash at ha.c:3194. Fix is a NULL-guard in myreq_handler (+ owner-lifecycle). 7.2 now has one remaining blocker (bug-1286, root-caused); bug-1282 deadlock is fixed. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019dbTHR9CsEYK9RsqmQpQpC
This commit is contained in:
parent
e90bf835f9
commit
02e9275706
5 changed files with 208 additions and 25 deletions
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
name: xce-build
|
||||
description: "Build XCE components with tests. Usage: /xce-build [component] [build_dir]. Components: all (default), lib, controller, scheduler, worker, apiserver, xcecli"
|
||||
description: "Build XCE components with tests. Usage: /xce-build [component] [profile] [build_dir]. Components: all (default), lib, controller, scheduler, worker, apiserver, xcecli. Profiles: asan (default), debug (non-ASAN -O0 -g3 for gdb/cores), release."
|
||||
context: fork
|
||||
disable-model-invocation: false
|
||||
allowed-tools: Bash(*)
|
||||
|
|
@ -8,10 +8,19 @@ allowed-tools: Bash(*)
|
|||
|
||||
## build xce source code
|
||||
|
||||
Args: `[component] [profile|build_dir] [build_dir]`
|
||||
|
||||
- **component** — `all` (default), `lib`, `controller`, `scheduler`, `worker`, `apiserver`, `xcecli`
|
||||
- **profile** — `asan` (default: debug + AddressSanitizer → `xce.build`), `debug` (non-ASAN `-O0 -g3 -fno-inline -fno-omit-frame-pointer` → `build.dbg`), `release` (`-O3`, no sanitizer → `build.release`). Each profile uses its own default build dir so the variants never clobber each other. Arg 2 may also be a legacy explicit build_dir (anything that isn't a profile keyword); arg 3 overrides the build dir.
|
||||
- Use the **`debug`** profile to root-cause heisenbug crashes that ASAN perturbs away and that gdb-on-release turns into a hang/timeout — the non-ASAN `-O0 -g3` build reproduces them and gives a fully symbolized backtrace under gdb (how bug-1282/bug-1286 were cracked).
|
||||
|
||||
Examples: `/xce-build controller` (ASAN), `/xce-build controller debug` (gdb/core build), `/xce-build all release`.
|
||||
|
||||
```bash
|
||||
COMPONENT="$0"
|
||||
BUILD_DIR="$1"
|
||||
PROFILE="$1"
|
||||
BUILD_DIR="$2"
|
||||
|
||||
cd src && \
|
||||
nix develop --command bash tools/xce-build.sh ${COMPONENT:+$COMPONENT} ${BUILD_DIR:+$BUILD_DIR}
|
||||
nix develop --command bash tools/xce-build.sh ${COMPONENT:+$COMPONENT} ${PROFILE:+$PROFILE} ${BUILD_DIR:+$BUILD_DIR}
|
||||
```
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue