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,
LIMITandOFFSET, 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 atwalk()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.