Repository navigation
fix(oracle-gaps): supervise the check on win32; log each CLI run in the e2e driver - #79
KyleAMathews wants to merge 4 commits into
Conversation
… the e2e driver Test-side only: GAP_RUN_LOG names a file the driver appends one line to per CLI run (runCli and runClisAtOnce): its duration, status, signal, and whether the driver's 300 s kill timeout ended it. Measures where the daemon history's time goes on Windows (about 900 s sits outside any finished check). Diagnostic job daemon-history-runs prints the summary; remove before merge. Co-authored-by: Isaac <no-reply@databricks.com>
|
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: true
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
…ed path On win32 the check runs as a supervised child too: the child is not detached, the supervisor watches its exit and writes the done line, and a stop ends the child's tree with taskkill /T /F (signalTree). An out-of-memory abort or a crash on win32 therefore ends with one done error line on both streams and exit 3, as on POSIX (it wrote none before: a silent failure). The in-process unsupervised path (its stop line, its startLog, and the ORACLE_GAPS_TEST_STOP handler outside the supervisor) is removed, since every check is supervised now. The abort witness is the CLI's own hook, ORACLE_GAPS_TEST_ABORT_AT=check, which aborts the check's process after the session has begun (where a V8 out-of-memory abort would strike) instead of a test's kill in a worker thread: process.abort() on win32, a SIGABRT to itself on POSIX (process.abort prints a native backtrace, which is no line of the stream). The fixture's test that killed its own process is removed from the model. win32's done line names the exit code, since no signal can end a win32 process. Law: a check run ends with one done line on both streams and an exit code the supervisor names (register P10; #74). Reach: the 'every outcome class' history's abort run, on both platforms. RED: the test-side commit's Windows run (2b11e2b), where an abort gives no done line. GREEN (POSIX, local): 'every outcome class' and 'an edit sequence through the daemon' pass (fixed seed 20261105). Mutant: no supervisor on win32 (the abort run has no done line). Limits: taskkill /T reaches the tree only while the child lives (a grandchild orphaned earlier is not reached; a Job Object would be the fix); the win32 abort line names the exit code, not a signal. Co-authored-by: Isaac <no-reply@databricks.com>
commit: |
…n win32 The first win32 run of the supervised check (run 43612786521) failed the greppable-stream law: the note named the log as out\stream.log, where the Windows paths rule spells it out/stream.log. Co-authored-by: Isaac <no-reply@databricks.com>
…tory in forward slashes Co-authored-by: Isaac <no-reply@databricks.com>
Draft. Stacked on #57 (
feat/gap-cli-stream-log); retarget tomainonce #57 merges.What this changes
taskkill /T /F(signalTree). The in-process unsupervised path is removed. A win32 out-of-memory abort or crash therefore ends with one done line on both streams and exit 3, as on POSIX (Windows: an unsupervised gap run can leave child processes running (no process tree kill) #74; register P10).ORACLE_GAPS_TEST_ABORT_AT=checkaborts the check's process after the session has begun. On win32 it callsprocess.abort(); on POSIX it sends SIGABRT to itself, becauseprocess.abort()prints a native backtrace, which is no line of the stream. The fixture's worker-thread kill is removed from the model.GAP_RUN_LOGmakes the e2e driver append one line per CLI run (its duration, status, signal, and whether the driver's kill timeout ended it).Evidence
Open
warmstop on win32 wrote no done line in run 43612786521 (the supervisor's stop path on win32). Not yet diagnosed.first linesstill show a raw scratch path (the scratch names are not applied to every spelling); not yet fixed.daemon-history-runsCI job are diagnostics; remove before merge.taskkill /Treaches the tree only while the child lives; an orphan a test started earlier is not reached (a Job Object would be the fix).This pull request and its description were written by Isaac.