MCPcopy
hub / github.com/mongodb/node-mongodb-native / readPreferenceServerSelector

Function readPreferenceServerSelector

src/sdam/server_selection.ts:383–415  ·  view source on GitHub ↗
(readPreference: ReadPreference)

Source from the content-addressed store, hash-verified

381 * @param readPreference - The read preference to select with
382 */
383export function readPreferenceServerSelector(readPreference: ReadPreference): ServerSelector {
384 if (!readPreference.isValid()) {
385 throw new MongoInvalidArgumentError('Invalid read preference specified');
386 }
387
388 return function readPreferenceServers(
389 topologyDescription: TopologyDescription,
390 servers: ServerDescription[],
391 deprioritized: DeprioritizedServers
392 ): ServerDescription[] {
393 switch (topologyDescription.type) {
394 case 'Single':
395 return latencyWindowReducer(topologyDescription, servers.filter(knownFilter));
396 case 'ReplicaSetNoPrimary':
397 case 'ReplicaSetWithPrimary':
398 return secondarySelector(readPreference, topologyDescription, servers, deprioritized);
399 case 'Sharded': {
400 const selectable = filterDeprioritized(servers, deprioritized);
401 return latencyWindowReducer(topologyDescription, selectable.filter(knownFilter));
402 }
403 case 'Unknown':
404 return [];
405 case 'LoadBalanced':
406 return servers.filter(loadBalancerFilter);
407 default: {
408 const _exhaustiveCheck: never = topologyDescription.type;
409 throw new MongoRuntimeError(
410 `unexpected topology type: ${topologyDescription.type} (this should never happen). Please file a bug in the Node driver Jira project.`
411 );
412 }
413 }
414 };
415}

Callers 6

endSessionsMethod · 0.90
_connectMethod · 0.90
selectServerMethod · 0.90

Calls 5

latencyWindowReducerFunction · 0.85
secondarySelectorFunction · 0.85
filterDeprioritizedFunction · 0.85
isValidMethod · 0.80
filterMethod · 0.45

Tested by

no test coverage detected