@@ -279,7 +279,11 @@ class Server extends EventEmitter {
279
279
}
280
280
281
281
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
+
283
287
conn . command ( ns , cmd , options , makeOperationHandler ( this , options , cb ) ) ;
284
288
} , callback ) ;
285
289
}
@@ -299,7 +303,11 @@ class Server extends EventEmitter {
299
303
}
300
304
301
305
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
+
303
311
conn . query ( ns , cmd , cursorState , options , makeOperationHandler ( this , options , cb ) ) ;
304
312
} , callback ) ;
305
313
}
@@ -319,7 +327,11 @@ class Server extends EventEmitter {
319
327
}
320
328
321
329
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
+
323
335
conn . getMore ( ns , cursorState , batchSize , options , makeOperationHandler ( this , options , cb ) ) ;
324
336
} , callback ) ;
325
337
}
@@ -341,7 +353,11 @@ class Server extends EventEmitter {
341
353
}
342
354
343
355
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
+
345
361
conn . killCursors ( ns , cursorState , makeOperationHandler ( this , null , cb ) ) ;
346
362
} , callback ) ;
347
363
}
@@ -436,11 +452,22 @@ function executeWriteOperation(args, options, callback) {
436
452
}
437
453
438
454
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
+
440
460
conn [ op ] ( ns , ops , options , makeOperationHandler ( server , options , cb ) ) ;
441
461
} , callback ) ;
442
462
}
443
463
464
+ function markServerUnknown ( server , error ) {
465
+ server . emit (
466
+ 'descriptionReceived' ,
467
+ new ServerDescription ( server . description . address , null , { error } )
468
+ ) ;
469
+ }
470
+
444
471
function makeOperationHandler ( server , options , callback ) {
445
472
return function handleOperationResult ( err , result ) {
446
473
if ( err ) {
0 commit comments