Skip to content

Commit a29020d

Browse files
authored
testkit: Implements ForcedRoutingTableUpdate (#796)
It also fix the GetRoutingTable request handler adding a default value where there is no routing table registered. The usage _refreshRoutingTable was given strange errors while iterate over servers. Removing the routing table and then `_freshRoutingTable` is being done as a working around to this issue.
1 parent ed7e750 commit a29020d

File tree

1 file changed

+31
-3
lines changed

1 file changed

+31
-3
lines changed

packages/testkit-backend/src/request-handlers.js

+31-3
Original file line numberDiff line numberDiff line change
@@ -307,17 +307,45 @@ export function GetRoutingTable (context, { driverId, database }, wire) {
307307
driver &&
308308
driver._getOrCreateConnectionProvider() &&
309309
driver._getOrCreateConnectionProvider()._routingTableRegistry &&
310-
driver._getOrCreateConnectionProvider()._routingTableRegistry.get(database)
310+
driver._getOrCreateConnectionProvider()._routingTableRegistry.get(database, () => {
311+
return {
312+
database,
313+
ttl: 0,
314+
readers: [],
315+
writers: [],
316+
routers: []
317+
}
318+
})
311319

312320
if (routingTable) {
313321
wire.writeResponse('RoutingTable', {
314322
database: routingTable.database,
315-
ttl: routingTable.ttl,
323+
ttl: Number(routingTable.ttl),
316324
readers: routingTable.readers.map(serverAddressToString),
317325
writers: routingTable.writers.map(serverAddressToString),
318326
routers: routingTable.routers.map(serverAddressToString)
319327
})
320328
} else {
321-
wire.writeError('Could not find routing table')
329+
wire.writeError('Driver does not support routing')
330+
}
331+
}
332+
333+
export function ForcedRoutingTableUpdate (context, { driverId, database, bookmarks }, wire) {
334+
const driver = context.getDriver(driverId)
335+
const provider = driver._getOrCreateConnectionProvider()
336+
337+
if (provider._freshRoutingTable) {
338+
// Removing database from the routing table registry
339+
provider._routingTableRegistry._remove(database)
340+
provider._freshRoutingTable ({
341+
accessMode: 'READ',
342+
database,
343+
bookmark: bookmarks,
344+
onDatabaseNameResolved: () => {}
345+
})
346+
.then(() => wire.writeResponse("Driver", { "id": driverId }))
347+
.catch(error => wire.writeError(error))
348+
} else {
349+
wire.writeError('Driver does not support routing')
322350
}
323351
}

0 commit comments

Comments
 (0)