(topology: Topology)
| 946 | } |
| 947 | |
| 948 | function processWaitQueue(topology: Topology) { |
| 949 | if (topology.s.state === STATE_CLOSED) { |
| 950 | drainWaitQueue(topology.waitQueue, new MongoTopologyClosedError()); |
| 951 | return; |
| 952 | } |
| 953 | |
| 954 | const isSharded = topology.description.type === TopologyType.Sharded; |
| 955 | const serverDescriptions = Array.from(topology.description.servers.values()); |
| 956 | const membersToProcess = topology.waitQueue.length; |
| 957 | for (let i = 0; i < membersToProcess; ++i) { |
| 958 | const waitQueueMember = topology.waitQueue.shift(); |
| 959 | if (!waitQueueMember) { |
| 960 | continue; |
| 961 | } |
| 962 | |
| 963 | if (waitQueueMember.cancelled) { |
| 964 | continue; |
| 965 | } |
| 966 | |
| 967 | let selectedDescriptions; |
| 968 | try { |
| 969 | const serverSelector = waitQueueMember.serverSelector; |
| 970 | const deprioritizedServers = waitQueueMember.deprioritizedServers; |
| 971 | selectedDescriptions = serverSelector |
| 972 | ? serverSelector(topology.description, serverDescriptions, deprioritizedServers) |
| 973 | : serverDescriptions; |
| 974 | } catch (selectorError) { |
| 975 | if ( |
| 976 | topology.client.mongoLogger?.willLog( |
| 977 | MongoLoggableComponent.SERVER_SELECTION, |
| 978 | SeverityLevel.DEBUG |
| 979 | ) |
| 980 | ) { |
| 981 | topology.client.mongoLogger?.debug( |
| 982 | MongoLoggableComponent.SERVER_SELECTION, |
| 983 | new ServerSelectionFailedEvent( |
| 984 | waitQueueMember.serverSelector, |
| 985 | topology.description, |
| 986 | selectorError, |
| 987 | waitQueueMember.operationName |
| 988 | ) |
| 989 | ); |
| 990 | } |
| 991 | waitQueueMember.reject(selectorError); |
| 992 | continue; |
| 993 | } |
| 994 | |
| 995 | let selectedServer: Server | undefined; |
| 996 | if (selectedDescriptions.length === 0) { |
| 997 | if (!waitQueueMember.waitingLogged) { |
| 998 | if ( |
| 999 | topology.client.mongoLogger?.willLog( |
| 1000 | MongoLoggableComponent.SERVER_SELECTION, |
| 1001 | SeverityLevel.INFORMATIONAL |
| 1002 | ) |
| 1003 | ) { |
| 1004 | topology.client.mongoLogger?.info( |
| 1005 | MongoLoggableComponent.SERVER_SELECTION, |
no test coverage detected