Skip to content

Commit ad7ec10

Browse files
committed
Add support for the GetRoutingTable message
1 parent d77a6e4 commit ad7ec10

File tree

4 files changed

+36
-9
lines changed

4 files changed

+36
-9
lines changed

bolt-connection/src/rediscovery/routing-table.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,21 @@ const MIN_ROUTERS = 1
3737
* The routing table object used to determine the role of the servers in the driver.
3838
*/
3939
export default class RoutingTable {
40-
constructor ({ database, routers, readers, writers, expirationTime } = {}) {
40+
constructor ({
41+
database,
42+
routers,
43+
readers,
44+
writers,
45+
expirationTime,
46+
ttl
47+
} = {}) {
4148
this.database = database
4249
this.databaseName = database || 'default database'
4350
this.routers = routers || []
4451
this.readers = readers || []
4552
this.writers = writers || []
4653
this.expirationTime = expirationTime || int(0)
54+
this.ttl = ttl
4755
}
4856

4957
/**
@@ -139,6 +147,7 @@ export function createValidRoutingTable (
139147
routerAddress,
140148
rawRoutingTable
141149
) {
150+
const ttl = rawRoutingTable.ttl
142151
const expirationTime = calculateExpirationTime(rawRoutingTable, routerAddress)
143152
const { routers, readers, writers } = parseServers(
144153
rawRoutingTable,
@@ -153,7 +162,8 @@ export function createValidRoutingTable (
153162
routers,
154163
readers,
155164
writers,
156-
expirationTime
165+
expirationTime,
166+
ttl
157167
})
158168
}
159169

test/internal/routing-table.test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,8 @@ describe('#unit RoutingTable', () => {
258258
readers: readers.map(r => ServerAddress.fromUrl(r)),
259259
routers: routers.map(r => ServerAddress.fromUrl(r)),
260260
writers: writers.map(w => ServerAddress.fromUrl(w)),
261-
expirationTime: calculateExpirationTime(currentTime, ttl)
261+
expirationTime: calculateExpirationTime(currentTime, ttl),
262+
ttl
262263
})
263264
)
264265
}))

testkit-backend/src/request-handlers.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,3 +270,25 @@ export function ResolverResolutionCompleted (
270270
const request = context.getResolverRequest(requestId)
271271
request.resolve(addresses)
272272
}
273+
274+
export function GetRoutingTable (context, { driverId, database }, wire) {
275+
const serverAddressToString = serverAddress => serverAddress.asHostPort()
276+
const driver = context.getDriver(driverId)
277+
const routingTable =
278+
driver &&
279+
driver._getOrCreateConnectionProvider() &&
280+
driver._getOrCreateConnectionProvider()._routingTableRegistry &&
281+
driver._getOrCreateConnectionProvider()._routingTableRegistry.get(database)
282+
283+
if (routingTable) {
284+
wire.writeResponse('RoutingTable', {
285+
database: routingTable.database,
286+
ttl: routingTable.ttl,
287+
readers: routingTable.readers.map(serverAddressToString),
288+
writers: routingTable.writers.map(serverAddressToString),
289+
routers: routingTable.routers.map(serverAddressToString)
290+
})
291+
} else {
292+
wire.writeError('Could not find routing table')
293+
}
294+
}

testkit-backend/src/skipped-tests.js

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,6 @@ const skippedTests = [
8484
ifEndsWith(
8585
'test_should_fail_when_reading_from_unexpectedly_interrupting_reader_using_session_run'
8686
)
87-
),
88-
skip(
89-
'Needs to implement GetRoutingTable tk protocol message',
90-
ifStartsWith(
91-
'stub.configuration_hints.test_connection_recv_timeout_seconds.TestRoutingConnectionRecvTimeout'
92-
)
9387
)
9488
]
9589

0 commit comments

Comments
 (0)