@@ -17,8 +17,8 @@ import {
1717} from '../error' ;
1818import type { MongoClient } from '../mongo_client' ;
1919import { ReadPreference } from '../read_preference' ;
20- import type { ServerDescription } from '../sdam/server_description' ;
2120import {
21+ DeprioritizedServers ,
2222 sameServerSelector ,
2323 secondaryWritableServerSelector ,
2424 type ServerSelector
@@ -207,7 +207,8 @@ async function tryOperation<T extends AbstractOperation, TResult = ResultTypeFro
207207 session,
208208 operationName : operation . commandName ,
209209 timeoutContext,
210- signal : operation . options . signal
210+ signal : operation . options . signal ,
211+ deprioritizedServers : new DeprioritizedServers ( )
211212 } ) ;
212213
213214 const hasReadAspect = operation . hasAspect ( Aspect . READ_OPERATION ) ;
@@ -234,7 +235,7 @@ async function tryOperation<T extends AbstractOperation, TResult = ResultTypeFro
234235
235236 const maxTries = willRetry ? ( timeoutContext . csotEnabled ( ) ? Infinity : 2 ) : 1 ;
236237 let previousOperationError : MongoError | undefined ;
237- let previousServer : ServerDescription | undefined ;
238+ const deprioritizedServers = new DeprioritizedServers ( ) ;
238239
239240 for ( let tries = 0 ; tries < maxTries ; tries ++ ) {
240241 if ( previousOperationError ) {
@@ -270,7 +271,7 @@ async function tryOperation<T extends AbstractOperation, TResult = ResultTypeFro
270271 server = await topology . selectServer ( selector , {
271272 session,
272273 operationName : operation . commandName ,
273- previousServer ,
274+ deprioritizedServers ,
274275 signal : operation . options . signal
275276 } ) ;
276277
@@ -303,7 +304,7 @@ async function tryOperation<T extends AbstractOperation, TResult = ResultTypeFro
303304 ) {
304305 throw previousOperationError ;
305306 }
306- previousServer = server . description ;
307+ deprioritizedServers . add ( server . description ) ;
307308 previousOperationError = operationError ;
308309
309310 // Reset timeouts
0 commit comments