Skip to content

Commit fc1a775

Browse files
committed
refactor: errors before handshake should mark server unknown
1 parent 38ae86d commit fc1a775

File tree

1 file changed

+32
-5
lines changed

1 file changed

+32
-5
lines changed

lib/core/sdam/server.js

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,11 @@ class Server extends EventEmitter {
279279
}
280280

281281
this.s.pool.withConnection((err, conn, cb) => {
282-
if (err) return cb(err);
282+
if (err) {
283+
markServerUnknown(this, err);
284+
return cb(err);
285+
}
286+
283287
conn.command(ns, cmd, options, makeOperationHandler(this, options, cb));
284288
}, callback);
285289
}
@@ -299,7 +303,11 @@ class Server extends EventEmitter {
299303
}
300304

301305
this.s.pool.withConnection((err, conn, cb) => {
302-
if (err) return cb(err);
306+
if (err) {
307+
markServerUnknown(this, err);
308+
return cb(err);
309+
}
310+
303311
conn.query(ns, cmd, cursorState, options, makeOperationHandler(this, options, cb));
304312
}, callback);
305313
}
@@ -319,7 +327,11 @@ class Server extends EventEmitter {
319327
}
320328

321329
this.s.pool.withConnection((err, conn, cb) => {
322-
if (err) return cb(err);
330+
if (err) {
331+
markServerUnknown(this, err);
332+
return cb(err);
333+
}
334+
323335
conn.getMore(ns, cursorState, batchSize, options, makeOperationHandler(this, options, cb));
324336
}, callback);
325337
}
@@ -341,7 +353,11 @@ class Server extends EventEmitter {
341353
}
342354

343355
this.s.pool.withConnection((err, conn, cb) => {
344-
if (err) return cb(err);
356+
if (err) {
357+
markServerUnknown(this, err);
358+
return cb(err);
359+
}
360+
345361
conn.killCursors(ns, cursorState, makeOperationHandler(this, null, cb));
346362
}, callback);
347363
}
@@ -436,11 +452,22 @@ function executeWriteOperation(args, options, callback) {
436452
}
437453

438454
server.s.pool.withConnection((err, conn, cb) => {
439-
if (err) return cb(err);
455+
if (err) {
456+
markServerUnknown(server, err);
457+
return cb(err);
458+
}
459+
440460
conn[op](ns, ops, options, makeOperationHandler(server, options, cb));
441461
}, callback);
442462
}
443463

464+
function markServerUnknown(server, error) {
465+
server.emit(
466+
'descriptionReceived',
467+
new ServerDescription(server.description.address, null, { error })
468+
);
469+
}
470+
444471
function makeOperationHandler(server, options, callback) {
445472
return function handleOperationResult(err, result) {
446473
if (err) {

0 commit comments

Comments
 (0)