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
