diff --git a/lib/connection.js b/lib/connection.js index 785796c1f50..a8e418f49a9 100644 --- a/lib/connection.js +++ b/lib/connection.js @@ -643,11 +643,14 @@ Connection.prototype.openUri = function(uri, options, callback) { if (options.useUnifiedTopology) { if (type === 'Single') { const server = Array.from(db.s.topology.s.servers.values())[0]; - server.s.pool.on('reconnect', () => { + server.s.pool.on('close', () => { + _this.readyState = STATES.disconnected; + }); + server.s.topology.on('serverHeartbeatSucceeded', () => { _handleReconnect(); }); - server.s.pool.on('reconnectFailed', () => { - _this.emit('reconnectFailed'); + server.s.pool.on('reconnect', () => { + _handleReconnect(); }); server.s.pool.on('timeout', () => { _this.emit('timeout'); diff --git a/test/connection.test.js b/test/connection.test.js index 6a4a61a4697..16b05ac3305 100644 --- a/test/connection.test.js +++ b/test/connection.test.js @@ -189,7 +189,7 @@ describe('connections:', function() { let numReconnected = 0; let numReconnect = 0; let numClose = 0; - const conn = mongoose.createConnection('mongodb://localhost:27000/mongoosetest', { + const conn = mongoose.createConnection('mongodb://localhost:27000/mongoosetest?heartbeatfrequencyms=1000', { useNewUrlParser: true, useUnifiedTopology: true }); @@ -260,7 +260,7 @@ describe('connections:', function() { reconnectTries: 3, reconnectInterval: 100, useNewUrlParser: true, - useUnifiedTopology: true + useUnifiedTopology: false // reconnectFailed doesn't get emitted with 'useUnifiedTopology' }); conn.on('connected', function() {