v0.13.0 - Correctness for MongoDB 8.0 and Crystal 1.21
This release improves the rough edges in the codebase before continuing with the roadmap.
Added
- insert: Client-generated
_idandinsertedIdson insert results.insertManyis one retryable command. - gridfs:
session:on all methods. Stream#closewaits for the background fiber. - testing: Honest UTF runner (results, errors, events, outcomes). Local
scripts/mongo-rs.shandLOCAL_TESTING.md.
Changed
- cursors / change streams: Pin session and server. Tailable streams stay open on an empty getMore.
findhonorslimit.getMorecan retry. - sessions / transactions: One implicit session for a whole bulk. Empty commit is reset. Cluster time and txn numbers are locked.
- sdam / selection:
Time.instantfor selection, monitor cooldown, and session idle.serverSelectionTryOnceworks (defaultfalse). StaletopologyVersionerrors do not mark the server Unknown. - uri / tls / pool: Case-insensitive URI bools, typed
loadBalanced,maxIdleTimeMS, hostname TLS flags. - crystal:
Sync::Mutex,Time.instant, nospawn(same_thread:) - testing: Live UTF is 362 examples, 0 failures, about 5.5 minutes (was ~25). Unknown work is
pending, not a fake pass.
Fixed
- GridFS chunk math, index names, and optional metadata. Counts return
Int64. Timeout units. Tag-set match.list*can use a secondary. - Monitor close, APM request ids, APM callbacks without the list lock, client close ends sessions first.