diff --git a/lib/core/sdam/topology.js b/lib/core/sdam/topology.js index f7d0fa2174..2bd7f9c656 100644 --- a/lib/core/sdam/topology.js +++ b/lib/core/sdam/topology.js @@ -291,7 +291,15 @@ class Topology extends EventEmitter { * Close this topology */ close(options, callback) { - if (typeof options === 'function') (callback = options), (options = {}); + if (typeof options === 'function') { + callback = options; + options = {}; + } + + if (typeof options === 'boolean') { + options = { force: options }; + } + options = options || {}; // clear all existing monitor timers @@ -332,7 +340,7 @@ class Topology extends EventEmitter { // destroy all child servers let destroyed = 0; servers.forEach(server => - destroyServer(server, this, () => { + destroyServer(server, this, options, () => { destroyed++; if (destroyed === servers.size) { // emit an event for close @@ -736,10 +744,11 @@ function isWriteCommand(command) { * * @param {Server} server */ -function destroyServer(server, topology, callback) { +function destroyServer(server, topology, options, callback) { + options = options || {}; LOCAL_SERVER_EVENTS.forEach(event => server.removeAllListeners(event)); - server.destroy(() => { + server.destroy(options, () => { topology.emit( 'serverClosed', new monitoring.ServerClosedEvent(topology.s.id, server.description.address)