in lib/internal/Router.js [349:382]
async _determineNodeId(cacheAffinityMap, key, keyType) {
const partitionMap = cacheAffinityMap.partitionMapping;
if (partitionMap.size == 0) {
return null;
}
const keyAffinityMap = cacheAffinityMap.keyConfig;
const affinityKeyInfo = await this._affinityKeyInfo(key, keyType);
let affinityKey = affinityKeyInfo.key;
let affinityKeyTypeCode = affinityKeyInfo.typeCode;
if ('typeId' in affinityKeyInfo && keyAffinityMap.has(affinityKeyInfo.typeId)) {
const affinityKeyTypeId = keyAffinityMap.get(affinityKeyInfo.typeId);
if (affinityKey instanceof BinaryObject &&
affinityKey._fields.has(affinityKeyTypeId)) {
const field = affinityKey._fields.get(affinityKeyTypeId);
affinityKey = await field.getValue();
affinityKeyTypeCode = field.typeCode;
}
}
const keyHash = await BinaryUtils.hashCode(affinityKey, this._communicator, affinityKeyTypeCode);
const partition = PartitionAwarenessUtils.RendezvousAffinityFunction.calcPartition(keyHash, partitionMap.size);
Logger.logDebug('Partition = ' + partition);
const nodeId = partitionMap.get(partition);
Logger.logDebug('Node ID = ' + nodeId);
return nodeId;
}