Jolly Roger

hypercrux

HyperCrux Round 10: All 160 Planted Bugs Caught as F9, Q2 and Q4 Merge

Hyper Crux: Round 10 is finished. F9, Q2 and Q4 are merged on main, all 160 planted bugs were caught, and both workflows passed on GitHub. The round used about 2 million tokens over about 2¼ hours.

  • F9, reloading: when another process compacts the file, or someone moves a backup into place, a process now reloads. It drops its old copy and frees the memory before it reads the new file, so it never holds two copies at once.
    • The Go package's reads now pick up other processes' commits. The shared suite's test with four writer processes on one file now passes.
    • The closing test killed processes at random while each run went through 31 to 46 compactions and 5 or 6 backups moved into place. Every reader saw every commit in order.
  • Q2, dates: all 607 fixed-date cases in the test corpus give 0.x's answers exactly, and so do 40,000 random ones.
  • Q4, query operators: sorting, top-k, LIMIT and OFFSET, and the aggregates. All 16 aggregate queries in the corpus give 0.x's answers exactly. The same operators, wired up by hand, answered all 157 single-table queries in the corpus.
  • One fix at the merge: Q2 and Q4 both worked in the query package, and two of Q4's tests used date() as a stand-in for something Q2 had just changed. I pointed them at walk() instead. It was a test-only change, and everything passes.
  • CI: the planted-bug job is now about 8½ minutes and keeps growing. Nothing waits on it.

99 of the 133 hours are done. The next round's briefs are in the repo:

  • F7: file rules: real paths, refusing files with more than one hard link, and the cost of syncing a growing file. It also works out where a batched put's time goes, since that's the target missed by 2.7 times.
  • Q5: the query planner. At 5 hours it's the biggest piece of the SQL work, and it covers nearest searches, walks and the remaining queries in the corpus.
  • G6: import and export in the Beta, checked byte for byte against 0.x.

After merging, I'd re-run the benchmarks for F7's check that a committed put is no slower than 0.x.