Say no like mongod: an operator-fidelity sweep, and a Rust server that clears every gauge
Summary: Say no like mongod: an operator-fidelity sweep, and a Rust server that clears every gauge (v0.6.0b0).
The single largest theme in this release is learning to fail correctly.
Roughly sixty slices went through the query, update, and aggregation
operators asking one question of each: when the argument is wrong, does
SecantusDB raise the same error, with the same code, that mongod
raises? Very often it did not — $all silently mis-matched a bad
argument, $rename could corrupt a document, $concat quietly coerced
non-strings, $bucket dropped out-of-range documents on the floor, and
a long tail of operators leaked a raw Python exception to the wire.
Those are now mongod-shaped errors with mongod's codes. Alongside the
rejections, numeric fidelity got the same treatment: whole-number
doubles are accepted where mongod accepts them, $toInt and $convert
enforce int32/int64 overflow bounds, $mod matches on floats and bools,
and $substrBytes is genuinely byte-based — including refusing a range
that would split a UTF-8 character.
The Rust server crossed its headline milestone: it now clears all
thirteen driver-conformance gauges, the same unmodified upstream suites
the Python server runs. Getting there took both correctness work
(MONGODB-X509 authentication, $project error fidelity, full $min/$max
ordering) and a sustained performance push — writers no longer queue
behind each other, reads no longer queue behind writers, oplog bookkeeping
came off the write path, and four separate paths (scanning, filtering,
projection, and the wire reply) now work over raw BSON instead of
decoding whole documents just to re-encode them.
New surface landed too. $median and $percentile ship on both servers
without a t-digest; $sum / $avg / $max / $min work as expression
operators, not just accumulators; $toLong joins the conversion family;
$jsonSchema grew mongod's full keyword surface; and expanded
change-stream events now match mongod field-for-field. The SQL server
kept its own pace with binary COPY, composite records end to end,
binary and scrollable server-side cursors, DO blocks, savepoint
rollback that reverts DDL, type modifiers on the wire, and
idle_in_transaction_session_timeout. The admin console caught up with
all three servers, the benchmark pages gained charts, and new concurrency
stress suites found and fixed real races.