@@ -130,7 +130,14 @@ export default class RoutingConnectionProvider extends PooledConnectionProvider
130
130
* See {@link ConnectionProvider} for more information about this method and
131
131
* its arguments.
132
132
*/
133
- async acquireConnection ( { accessMode, database, bookmarks, impersonatedUser, onDatabaseNameResolved } = { } ) {
133
+ async acquireConnection ( {
134
+ accessMode,
135
+ database,
136
+ bookmarks,
137
+ impersonatedUser,
138
+ onDatabaseNameResolved,
139
+ onRoutingTableRefresh
140
+ } = { } ) {
134
141
let name
135
142
let address
136
143
const context = { database : database || DEFAULT_DB_NAME }
@@ -146,14 +153,15 @@ export default class RoutingConnectionProvider extends PooledConnectionProvider
146
153
const routingTable = await this . _freshRoutingTable ( {
147
154
accessMode,
148
155
database : context . database ,
149
- bookmarks : bookmarks ,
156
+ bookmarks,
150
157
impersonatedUser,
151
158
onDatabaseNameResolved : ( databaseName ) => {
152
159
context . database = context . database || databaseName
153
160
if ( onDatabaseNameResolved ) {
154
161
onDatabaseNameResolved ( databaseName )
155
162
}
156
- }
163
+ } ,
164
+ onRoutingTableRefresh
157
165
} )
158
166
159
167
// select a target server based on specified access mode
@@ -301,7 +309,14 @@ export default class RoutingConnectionProvider extends PooledConnectionProvider
301
309
return this . _connectionPool . acquire ( address )
302
310
}
303
311
304
- _freshRoutingTable ( { accessMode, database, bookmarks, impersonatedUser, onDatabaseNameResolved } = { } ) {
312
+ _freshRoutingTable ( {
313
+ accessMode,
314
+ database,
315
+ bookmarks,
316
+ impersonatedUser,
317
+ onDatabaseNameResolved,
318
+ onRoutingTableRefresh
319
+ } = { } ) {
305
320
const currentRoutingTable = this . _routingTableRegistry . get (
306
321
database ,
307
322
( ) => new RoutingTable ( { database } )
@@ -313,10 +328,22 @@ export default class RoutingConnectionProvider extends PooledConnectionProvider
313
328
this . _log . info (
314
329
`Routing table is stale for database: "${ database } " and access mode: "${ accessMode } ": ${ currentRoutingTable } `
315
330
)
316
- return this . _refreshRoutingTable ( currentRoutingTable , bookmarks , impersonatedUser , onDatabaseNameResolved )
331
+ return this . _refreshRoutingTable (
332
+ currentRoutingTable ,
333
+ bookmarks ,
334
+ impersonatedUser ,
335
+ onDatabaseNameResolved ,
336
+ onRoutingTableRefresh
337
+ )
317
338
}
318
339
319
- _refreshRoutingTable ( currentRoutingTable , bookmarks , impersonatedUser , onDatabaseNameResolved ) {
340
+ _refreshRoutingTable (
341
+ currentRoutingTable ,
342
+ bookmarks ,
343
+ impersonatedUser ,
344
+ onDatabaseNameResolved ,
345
+ onRoutingTableRefresh
346
+ ) {
320
347
const knownRouters = currentRoutingTable . routers
321
348
322
349
if ( this . _useSeedRouter ) {
@@ -325,15 +352,17 @@ export default class RoutingConnectionProvider extends PooledConnectionProvider
325
352
currentRoutingTable ,
326
353
bookmarks ,
327
354
impersonatedUser ,
328
- onDatabaseNameResolved
355
+ onDatabaseNameResolved ,
356
+ onRoutingTableRefresh
329
357
)
330
358
}
331
359
return this . _fetchRoutingTableFromKnownRoutersFallbackToSeedRouter (
332
360
knownRouters ,
333
361
currentRoutingTable ,
334
362
bookmarks ,
335
363
impersonatedUser ,
336
- onDatabaseNameResolved
364
+ onDatabaseNameResolved ,
365
+ onRoutingTableRefresh
337
366
)
338
367
}
339
368
@@ -342,7 +371,8 @@ export default class RoutingConnectionProvider extends PooledConnectionProvider
342
371
currentRoutingTable ,
343
372
bookmarks ,
344
373
impersonatedUser ,
345
- onDatabaseNameResolved
374
+ onDatabaseNameResolved ,
375
+ onRoutingTableRefresh
346
376
) {
347
377
// we start with seed router, no routers were probed before
348
378
const seenRouters = [ ]
@@ -372,7 +402,8 @@ export default class RoutingConnectionProvider extends PooledConnectionProvider
372
402
currentRoutingTable ,
373
403
newRoutingTable ,
374
404
onDatabaseNameResolved ,
375
- error
405
+ error ,
406
+ onRoutingTableRefresh
376
407
)
377
408
}
378
409
@@ -381,7 +412,8 @@ export default class RoutingConnectionProvider extends PooledConnectionProvider
381
412
currentRoutingTable ,
382
413
bookmarks ,
383
414
impersonatedUser ,
384
- onDatabaseNameResolved
415
+ onDatabaseNameResolved ,
416
+ onRoutingTableRefresh
385
417
) {
386
418
let [ newRoutingTable , error ] = await this . _fetchRoutingTableUsingKnownRouters (
387
419
knownRouters ,
@@ -405,7 +437,8 @@ export default class RoutingConnectionProvider extends PooledConnectionProvider
405
437
currentRoutingTable ,
406
438
newRoutingTable ,
407
439
onDatabaseNameResolved ,
408
- error
440
+ error ,
441
+ onRoutingTableRefresh
409
442
)
410
443
}
411
444
@@ -563,7 +596,13 @@ export default class RoutingConnectionProvider extends PooledConnectionProvider
563
596
return [ null , error ]
564
597
}
565
598
566
- async _applyRoutingTableIfPossible ( currentRoutingTable , newRoutingTable , onDatabaseNameResolved , error ) {
599
+ async _applyRoutingTableIfPossible (
600
+ currentRoutingTable ,
601
+ newRoutingTable ,
602
+ onDatabaseNameResolved ,
603
+ error ,
604
+ onRoutingTableRefresh
605
+ ) {
567
606
if ( ! newRoutingTable ) {
568
607
// none of routing servers returned valid routing table, throw exception
569
608
throw newError (
@@ -579,19 +618,22 @@ export default class RoutingConnectionProvider extends PooledConnectionProvider
579
618
this . _useSeedRouter = true
580
619
}
581
620
582
- await this . _updateRoutingTable ( newRoutingTable , onDatabaseNameResolved )
621
+ await this . _updateRoutingTable ( newRoutingTable , onDatabaseNameResolved , onRoutingTableRefresh )
583
622
584
623
return newRoutingTable
585
624
}
586
625
587
- async _updateRoutingTable ( newRoutingTable , onDatabaseNameResolved ) {
626
+ async _updateRoutingTable ( newRoutingTable , onDatabaseNameResolved , onRoutingTableRefresh ) {
588
627
// close old connections to servers not present in the new routing table
589
628
await this . _connectionPool . keepAll ( newRoutingTable . allServers ( ) )
590
629
this . _routingTableRegistry . removeExpired ( )
591
630
this . _routingTableRegistry . register (
592
631
newRoutingTable
593
632
)
594
633
634
+ if ( typeof onRoutingTableRefresh === 'function' ) {
635
+ onRoutingTableRefresh ( )
636
+ }
595
637
onDatabaseNameResolved ( newRoutingTable . database )
596
638
597
639
this . _log . info ( `Updated routing table ${ newRoutingTable } ` )
0 commit comments