Revision history for MongoDB::Fast
{{$NEXT}}
0.2.2 2026-06-11
- Fix stalled-socket hang: the per-operation timer now covers the socket
write as well as the response wait, so a half-dead peer that blocks
on write no longer hangs forever beneath the caller's timeout guard.
- Add t/08-request-id-unique.rakutest: 8-thread hammer test proving
Wire's atomic requestID counter mints no duplicates (160k ids).
- Add xt/concurrent-correctness.rakutest: 300 concurrent point queries
on one connection verify every response is routed to the correct caller
(regression test for the FIFO desync / DarkRecon listener hang).
0.2.1 2026-06-10
- Fix requestID uniqueness at the right layer: Wire::request-id is now an
atomicint incremented with ++⚛, so concurrent build-op-msg calls on a
shared Wire can never mint the same ID. Connection no longer needs its
own counter; it reads the ID Wire already stamped into the message.
0.2.0 2026-06-10
- Rewrite !send-recv as a fully pipelined multiplexer: requests are keyed
by their wire requestID (MsgHeader bytes 4-7) and the background reader
routes each response to the matching vow via the responseTo header field.
Many requests may now be outstanding on one connection simultaneously,
eliminating head-of-line blocking at the client level.
- Fix TOCTOU in !send-recv: liveness check and vow registration are now
atomic under $!lock, and the socket is captured at registration time so
a concurrent !disconnect cannot inject a Nil-socket write later.
- Fix !execute-with-retry: remove 'timeout' from the connection-error regex
so a legitimate slow-query timeout no longer triggers disconnect/reconnect
and potentially duplicated non-idempotent writes.
- Fix write-failure vow leak: a CATCH block in the send start{} ensures the
%!pending slot is always reclaimed if the socket write throws.
- Add xt/head-of-line.rakutest to prove pipelining speedup.
0.1.5 2026-04-23
- Raise default max-reconnect-attempts from 5 to 15 for better resilience
during longer MongoDB restarts
- Reconnection test verified with real MongoDB stop/start cycle:
12/12 passing including live reconnect
0.1.4 2026-04-23
- Fix blocking reconnect: !disconnect now flushes the vow channel and
resets the op-serializer so no stale vows survive a disconnect
- Fix !send-recv: enforce the :$timeout parameter via Promise.anyof so
half-open TCP sockets time out instead of blocking forever
- Fix !start-reader: wrap vow.keep in try to handle the race where a
timed-out vow is still in the channel when a response arrives
- Rewrite t/06-reconnection.rakutest with a real stop/start MongoDB cycle
0.1.3 2026-04-04
- Fix reconnect on connection reset: guard socket write against Nil socket
so "Connection lost" is thrown instead of an unrecognised method-on-Nil error
- Broaden connection-error pattern to include 'reset' and 'lost' so all
OS-level reset messages correctly trigger the auto-reconnect path
0.1.2 2026-04-04
- Fix start-reader: add CATCH fallback so unhandled connection resets on
older MoarVM versions don't crash the process as unhandled rejections
- Fix README clone URL (fastmongo → Zer0-Tolerance/MongoDB-Fast)
0.1.1 2026-03-27
- Fix reconnect: background reader was not restarted after reconnection,
causing all post-reconnect operations to hang indefinitely
0.1.0 2026-03-22
- Initial release
- Async/await API using native Raku Promises
- Single connection with persistent background reader
- Connection pooling (MongoDB::Fast::Connection::Pool)
- Auto-reconnect with exponential backoff
- Full CRUD: insert-one, insert-many, find, find-one,
update-one, update-many, replace-one, delete-one, delete-many
- Aggregation pipeline support
- Index creation (single, compound, unique)
- Cursor with lazy pagination (.next / .all)
- count-documents, drop (collection + database)
- BSON encode/decode: strings, integers (32/64-bit), floats,
booleans, null, arrays, nested documents, ObjectID, Binary
- Unicode string support
- OP_MSG wire protocol with document sequences for bulk inserts