Releases: mongodb/node-mongodb-native
v3.5.7
The MongoDB Node.js team is pleased to announce version 3.5.7 of the driver
Release Highlights
Warning: Accessing non-existent property 'count' of module exports inside circular dependency
Work earlier this year left some dead code in our operations code, resulting in this warning message reported by multiple users. While we still have a few cycles in our codebase yet, this will quiet Node.js 14's circular dependency warnings.
Sessions are only acquired when operations are executed
Drivers use an implicit session for all operations where an explicit session is not provided. A subtle bug was introduced when session support was implemented where implicit sessions were created and assigned to operations even if they were about to sit in a queue waiting for execution. This results in the driver creating many sessions rather than reusing pooled ones. The fix is to ensure a session is only checked out of the pool when the operation is about to be written to a server.
Thanks very much to all the community members who contributed to this release!
Release Notes
Bug
- [NODE-2536] - Circular dependency in Node.js 14 nightly
- [NODE-2552] - Server session creation grows unbounded with every operation call
Improvement
v3.6.0-beta.0
chore(release): 3.6.0-beta.0
v3.5.6
The MongoDB Node.js team is pleased to announce version 3.5.6 of the driver
Release Highlights
Regression in map
when cursor used as a stream
@dobesv helped identify a regression where a map function would be applied twice
if defined on a cursor, and that cursor was used to stream data.
TypeError: Cannot read property 'code' of undefined
User @linus-hologram originally reported an issue with a TypeError when the lambda
passed to the withTransaction
helper rejected with a null
value. @vkarpov15
submitted the fix.
readPreferenceTags
interpreted as an array
A bug was fixed where readPreferenceTags
with a single value in the connection
string was not properly interpreted as an array of tags. This prevented the
Use Analytics Nodes to Isolate Workload guidance from working
correctly.
Cannot set property 'isDirty' of null
User @sean-daley reported seeing this in an AWS Lambda environment, but has proven to
be somewhat of a heisenbug. We are rolling out a fix here that ensures sessions
(implicit or not) are not used after they have been explicitly ended.
Thanks very much to all the community members who contributed to this release!
Release Notes
Bug
- [NODE-2503] - Cursor ReadStream applies map function twice
- [NODE-2515] - TypeError when transaction is rejected with empty reason
- [NODE-2541] - readPreferenceTags are not interpreted as an array
- [NODE-2545] - Cannot set property 'isDirty' of null
- [NODE-2549] - Unknown topology should return empty array for server selection with read preference
v3.5.5
The MongoDB Node.js team is pleased to announce version 3.5.5 of the driver
Release Highlights
Regression in hasNext
when using a cursor with a limit
@peterbroadhurst helped point out a regression introduced in v3.5.4 where using hasNext
on a cusor with a limit would not return the full set of results.
Ignored topology updates cause servers to fall out of latency window
A change introduced across all MongoDB drivers, and in particular v3.5.0 of the Node.js
driver, attempted to prevent needless duplicate topologyDescriptionChanged
topology events
by introducing a ServerDescription
equality operator. Since equality does not take the
lastUpdateTime
and lastWriteDate
fields of an ismaster into account, the driver could
eventually consider servers non-suitable for server selection, since they would fall out
of the latency window.
All updates are considered viable for topology updates now, and only event emission is
gated by ServerDescription
equality.
Memory leaks with Node.js v12+
The legacy topology types (in particular if you were connected to a replic set) used a
custom Timeout
class to wrap a timer. Unfortunately, the class depended on an undocumented,
private variable _called
, which was removed in Node.js v12. This would lead to the driver
thinking the timeout never occurred, and therefore never releasing the object for garbage
collection. We recommend users of the legacy topology types immediately update to this
version of the driver, or use the Unified Topology which is unaffected by this bug.
TypeError: Cannot read property 'Symbol(cancelled)' of undefined
@erfanium and @Paic helped us identify an issue in rare failover events where multiple
requests to process the server selection queue would result in an attempted property
access of an undefined
variable.
promiseLibrary
not respected by newly introduced maybePromise
helper
@TobyEalden pointed out that an internal refactor to use a helper to optionally
return a Promise
for top level API methods was not, in fact, using a custom
promise library if one was provided!
Thanks very much to all the community members who contributed to this release!
Release Notes
Bug
- [NODE-2460] - Memory Leak with ReplSet and NodeJS v12
- [NODE-2472] - TypeError on server available with useUnifiedTopology: true
- [NODE-2474] - Server_Description update with lastUpdateTime / lastWriteDate fields is ignored in topology
- [NODE-2480] - TypeError after reconnecting
- [NODE-2483] - Regression using hasNext on cursor with limit
- [NODE-2490] - promiseLibrary option is not honoured
v3.5.4
The MongoDB Node.js team is pleased to announce version 3.5.4 of the driver
Release Highlights
Regression in hasNext
when piping a cursor
Pierre Mallet and @Sintendo helped identify a regression with our cursors which did not
properly rewind a cursor when hasNext
was called before the cursor was piped.
Regression in server selection queue processing
A change introduced in v3.5.3 converted the server selection loop from a loop with timers
to a queue of callbacks. A subtle bug was introduced to the code to process the quere where
the upper bound of a for loop was using a dynamically decreasing length, leading to some
operations being ignored, and ultimately timing out. Many thanks to Frederic Maillasson,
@paulrobinson, and @adityapatadia for helping uncover this issue
Only ensure minimum connection pool size if a size is specified
User @millerick submitted a PR short circuiting the background task for ensuring a minimum
pool size if no minimum size was set.
Release Notes
Bug
- [NODE-2454] - Cursor.hasNext() seems to consume first document when the cursor is piped in a writable stream
- [NODE-2464] - max election ID comparison uses invalid comparison for tracking
- [NODE-2466] - Driver does not seem to properly recover from a long disconnection with primary server
- [NODE-2467] - MongoServerSelectionError when using useUnifiedTopology: true
Improvement
- [NODE-2459] - Do not run minimum connection size task if there is no minimum pool size
v3.5.3
The MongoDB Node.js team is pleased to announce version 3.5.3 of the driver
Release Highlights
This patch release fixes one issue with command error handling during network errors, and one minor issue with multiple incoming wire messages not being properly processed.
Release Notes
Bug
- [NODE-2435] - Unified topology does not transition server to Unknown on non-timeout operation error
- [NODE-2437] - Multiple incoming message packets are not processed correctly
Improvement
v3.5.2
The MongoDB Node.js team is pleased to announce version 3.5.2 of the driver
Release Highlights
This patch release corrects a regression introduced in the 4.2 timeframe which would
effectively disable retryable operations for connection to MongoDB 4.2+. Additionally,
the server selection loop has been converted to a queue of callbacks to improve
readability, as well as performance in certain scenarios.
Release Notes
Bug
- [NODE-2408] - retryWrites seems not to work as expected in failover test
Improvement
- [NODE-2398] - Use a queue for server selection
v3.5.1
The MongoDB Node.js team is pleased to announce version 3.5.1 of the driver
Release Highlights
This patch release fixes a few regressions introduced with new connection pool, primarily
around the ability to use custom TLS certificates.
Release Notes
Bug
v3.5.0
The MongoDB Node.js team is pleased to announce version 3.5.0 of the driver
Release Highlights
CMAP-compliant Connection Pool
This release introduces a modern replacement for the driver's connection pool, available only with the
unified topology. A major effort was made in early 2019 to fully specifiy connection pools for MongoDB
drivers (see: CMAP specification), and this release brings the Node.js driver in line with that
specification.
Traceability
The new pool supports monitoring for all aspects of its behavior. This allows deep introspection into
the operation of the connection pool, as well as an ability to profile the lifetime of an operation
when used in conjunction with command monitoring.
Stream-first Connection Design
The Connection
class was completely rewritten for the new pool adopting a stream-first mentality. All
wire message processing and compression is handled in a duplex stream called the MessageStream
, and
that stream is connected bidirectionally to the underlaying TCP socket. The result is a connection which
gains the general benefit of streams: better performance, less memory pressure, backpressure support. It
also opens the possiblity of supporting non-TCP/UDP streams as a transport for the driver.
waitQueueTimeoutMS
The new connection pool has a concept of a "wait queue", which allows operation requests to buffer waiting
for a connection to execute against. There is no timeout by default, but users can now specify a new value
waitQueueTimeoutMS
in their connection string or MongoClient
options to proactively cancel operations
that have waited too long.
Remember that the new connection pool is only available for the "Unified Topology", so remember to pass
useUnifiedTopology: true
to your MongoClient
constructor to use it!
Dedicated monitoring connection
Both the legacy and unified SDAM implementations have until now executed monitoring checks as priority
messages in the legacy Pool implementation. This means that monitoring (ismaster
) operations were
prioritized over other queued operations, but also means that monitoring could be indefinitely blocked,
in particular during failover or black hole scenarios. The default socket timeout is null
(read: Infinity),
so if the pool was completely saturated with operations, there may be no ability to execute a monitoring
check and determine that the connection to a server was no longer valid. This version of the driver
introduces a new Monitor
class which manages its own dedicated monitoring connection to each known
node.
Server selection errors
In v3.3.0 of the driver we introduced a new MongoTimeoutError
for all errors covered by the server
selection loop, leading to a spike in bug reports with a title similar to Server selection timed out after 30000ms
.
Even though the error type itself had an attached reason
field, we still feel it was easy to miss why
the selection had failed. As a result we have introduced a new type MongoServerSelectionError
which
will use the originating error (reason
) for its message, better informing users what caused a
selection error, while still also conveying it is an error in server selection.
Release Notes
New Feature
- [NODE-1742] - Implement Connection Monitoring and Pooling spec
- [NODE-2386] - Use a dedicated monitoring thread
Bug
- [NODE-2400] - Synchronous errors are swallowed by executeOperation
- [NODE-2417] - Server descriptions with me mismatch from primary response should be removed
- [NODE-2418] - client platform not sent in metadata for CMAP connections
Improvement
- [NODE-1619] - Remove wasteful empty Buffer allocations in `Connection`
- [NODE-2049] - Add "connectionError" as a valid "reason" for a ConnectionCheckOutFailedEvent when connection set up fails
- [NODE-2397] - Make server selection errors more informative
- [NODE-2402] - Integrate CMAP connection pool into unified topology
- [NODE-2419] - Improve traceability of CMAP events
- [NODE-2033] - Ignore ConnectionReadyEvent in CMAP pool creation test
v3.4.1
The MongoDB Node.js team is pleased to announce version 3.4.1 of the driver
Release Highlights
This is a patch release addressing two regressions introduced in bulk writes and SCRAM authentication.