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

Method update

src/sdam/topology_description.ts:184–307  ·  view source on GitHub ↗

* Returns a copy of this description updated with a given ServerDescription * @internal

(serverDescription: ServerDescription)

Source from the content-addressed store, hash-verified

182 * @internal
183 */
184 update(serverDescription: ServerDescription): TopologyDescription {
185 const address = serverDescription.address;
186
187 // potentially mutated values
188 let { type: topologyType, setName, maxSetVersion, maxElectionId, commonWireVersion } = this;
189
190 const serverType = serverDescription.type;
191 const serverDescriptions = new Map(this.servers);
192
193 // update common wire version
194 if (serverDescription.maxWireVersion !== 0) {
195 if (commonWireVersion === 0) {
196 commonWireVersion = serverDescription.maxWireVersion;
197 } else {
198 commonWireVersion = Math.min(commonWireVersion, serverDescription.maxWireVersion);
199 }
200 }
201
202 if (
203 typeof serverDescription.setName === 'string' &&
204 typeof setName === 'string' &&
205 serverDescription.setName !== setName
206 ) {
207 if (topologyType === TopologyType.Single) {
208 // "Single" Topology with setName mismatch is direct connection usage, mark unknown do not remove
209 serverDescription = new ServerDescription(address);
210 } else {
211 serverDescriptions.delete(address);
212 }
213 }
214
215 // update the actual server description
216 serverDescriptions.set(address, serverDescription);
217
218 if (topologyType === TopologyType.Single) {
219 // once we are defined as single, that never changes
220 return new TopologyDescription(
221 TopologyType.Single,
222 serverDescriptions,
223 setName,
224 maxSetVersion,
225 maxElectionId,
226 commonWireVersion,
227 { heartbeatFrequencyMS: this.heartbeatFrequencyMS, localThresholdMS: this.localThresholdMS }
228 );
229 }
230
231 if (topologyType === TopologyType.Unknown) {
232 if (serverType === ServerType.Standalone && this.servers.size !== 1) {
233 serverDescriptions.delete(address);
234 } else {
235 topologyType = topologyTypeForServerType(serverType);
236 }
237 }
238
239 if (topologyType === TopologyType.Sharded) {
240 if (!MONGOS_OR_UNKNOWN.has(serverType)) {
241 serverDescriptions.delete(address);

Callers 1

serverUpdateHandlerMethod · 0.45

Calls 9

updateRsFromPrimaryFunction · 0.85
checkHasPrimaryFunction · 0.85
setMethod · 0.80
minMethod · 0.45
deleteMethod · 0.45
hasMethod · 0.45

Tested by

no test coverage detected