in src/internal/Router.ts [335:361]
async _chooseConnection(affinityHint: AffinityHint) {
const cacheId = affinityHint.cacheId;
if (!this._distributionMap.has(cacheId)) {
Logger.logDebug('Distribution map does not have info for the cache ' + cacheId);
Logger.logDebug('Node has been chosen randomly');
// We are not awaiting here in order to not increase latency of requests
this._getCachePartitions(cacheId);
return this._getRandomConnection();
}
const cacheAffinityMap = this._distributionMap.get(cacheId);
// node id in cache affinity map is represented by byte array, so we have to convert it to string in order to use
// as connections map key
const nodeId: string = "" + await this._determineNodeId(cacheAffinityMap,
affinityHint.key,
affinityHint.keyType);
if (nodeId in this._connections) {
Logger.logDebug('Node has been chosen by affinity');
return this._connections[nodeId];
}
Logger.logDebug('Node has been chosen randomly');
return this._getRandomConnection();
}