Comparing version 6.11.0-dev.20241207.sha.ea8a33f1 to 6.11.0-dev.20241210.sha.37613f1a
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.MongoWriteConcernError = exports.MongoServerSelectionError = exports.MongoSystemError = exports.MongoMissingDependencyError = exports.MongoMissingCredentialsError = exports.MongoCompatibilityError = exports.MongoInvalidArgumentError = exports.MongoParseError = exports.MongoNetworkTimeoutError = exports.MongoNetworkError = exports.MongoTopologyClosedError = exports.MongoCursorExhaustedError = exports.MongoServerClosedError = exports.MongoCursorInUseError = exports.MongoOperationTimeoutError = exports.MongoUnexpectedServerResponseError = exports.MongoGridFSChunkError = exports.MongoGridFSStreamError = exports.MongoTailableCursorError = exports.MongoChangeStreamError = exports.MongoClientBulkWriteExecutionError = exports.MongoClientBulkWriteCursorError = exports.MongoClientBulkWriteError = exports.MongoGCPError = exports.MongoAzureError = exports.MongoOIDCError = exports.MongoAWSError = exports.MongoKerberosError = exports.MongoExpiredSessionError = exports.MongoTransactionError = exports.MongoNotConnectedError = exports.MongoDecompressionError = exports.MongoBatchReExecutionError = exports.MongoRuntimeError = exports.MongoAPIError = exports.MongoDriverError = exports.MongoServerError = exports.MongoError = exports.MongoErrorLabel = exports.GET_MORE_RESUMABLE_CODES = exports.MONGODB_ERROR_CODES = exports.NODE_IS_RECOVERING_ERROR_MESSAGE = exports.LEGACY_NOT_PRIMARY_OR_SECONDARY_ERROR_MESSAGE = exports.LEGACY_NOT_WRITABLE_PRIMARY_ERROR_MESSAGE = void 0; | ||
exports.MongoWriteConcernError = exports.MongoServerSelectionError = exports.MongoSystemError = exports.MongoMissingDependencyError = exports.MongoMissingCredentialsError = exports.MongoCompatibilityError = exports.MongoInvalidArgumentError = exports.MongoParseError = exports.MongoNetworkTimeoutError = exports.MongoNetworkError = exports.MongoTopologyClosedError = exports.MongoCursorExhaustedError = exports.MongoServerClosedError = exports.MongoCursorInUseError = exports.MongoOperationTimeoutError = exports.MongoUnexpectedServerResponseError = exports.MongoGridFSChunkError = exports.MongoGridFSStreamError = exports.MongoTailableCursorError = exports.MongoChangeStreamError = exports.MongoClientBulkWriteExecutionError = exports.MongoClientBulkWriteCursorError = exports.MongoClientBulkWriteError = exports.MongoGCPError = exports.MongoAzureError = exports.MongoOIDCError = exports.MongoAWSError = exports.MongoKerberosError = exports.MongoExpiredSessionError = exports.MongoTransactionError = exports.MongoNotConnectedError = exports.MongoDecompressionError = exports.MongoBatchReExecutionError = exports.MongoStalePrimaryError = exports.MongoRuntimeError = exports.MongoAPIError = exports.MongoDriverError = exports.MongoServerError = exports.MongoError = exports.MongoErrorLabel = exports.GET_MORE_RESUMABLE_CODES = exports.MONGODB_ERROR_CODES = exports.NODE_IS_RECOVERING_ERROR_MESSAGE = exports.LEGACY_NOT_PRIMARY_OR_SECONDARY_ERROR_MESSAGE = exports.LEGACY_NOT_WRITABLE_PRIMARY_ERROR_MESSAGE = void 0; | ||
exports.isNetworkErrorBeforeHandshake = isNetworkErrorBeforeHandshake; | ||
@@ -284,2 +284,28 @@ exports.needsRetryableWriteLabel = needsRetryableWriteLabel; | ||
/** | ||
* An error generated when a primary server is marked stale, never directly thrown | ||
* | ||
* @public | ||
* @category Error | ||
*/ | ||
class MongoStalePrimaryError extends MongoRuntimeError { | ||
/** | ||
* **Do not use this constructor!** | ||
* | ||
* Meant for internal use only. | ||
* | ||
* @remarks | ||
* This class is only meant to be constructed within the driver. This constructor is | ||
* not subject to semantic versioning compatibility guarantees and may change at any time. | ||
* | ||
* @public | ||
**/ | ||
constructor(serverDescription, maxSetVersion, maxElectionId, options) { | ||
super(`primary marked stale due to electionId/setVersion mismatch: server setVersion: ${serverDescription.setVersion}, server electionId: ${serverDescription.electionId}, topology setVersion: ${maxSetVersion}, topology electionId: ${maxElectionId}`, options); | ||
} | ||
get name() { | ||
return 'MongoStalePrimaryError'; | ||
} | ||
} | ||
exports.MongoStalePrimaryError = MongoStalePrimaryError; | ||
/** | ||
* An error generated when a batch command is re-executed after one of the commands in the batch | ||
@@ -286,0 +312,0 @@ * has failed |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.MongoServerError = exports.MongoServerClosedError = exports.MongoRuntimeError = exports.MongoParseError = exports.MongoOperationTimeoutError = exports.MongoOIDCError = exports.MongoNotConnectedError = exports.MongoNetworkTimeoutError = exports.MongoNetworkError = exports.MongoMissingDependencyError = exports.MongoMissingCredentialsError = exports.MongoKerberosError = exports.MongoInvalidArgumentError = exports.MongoGridFSStreamError = exports.MongoGridFSChunkError = exports.MongoGCPError = exports.MongoExpiredSessionError = exports.MongoError = exports.MongoDriverError = exports.MongoDecompressionError = exports.MongoCursorInUseError = exports.MongoCursorExhaustedError = exports.MongoCompatibilityError = exports.MongoClientBulkWriteExecutionError = exports.MongoClientBulkWriteError = exports.MongoClientBulkWriteCursorError = exports.MongoChangeStreamError = exports.MongoBatchReExecutionError = exports.MongoAzureError = exports.MongoAWSError = exports.MongoAPIError = exports.ChangeStreamCursor = exports.ClientEncryption = exports.MongoBulkWriteError = exports.UUID = exports.Timestamp = exports.ObjectId = exports.MinKey = exports.MaxKey = exports.Long = exports.Int32 = exports.Double = exports.Decimal128 = exports.DBRef = exports.Code = exports.BSONType = exports.BSONSymbol = exports.BSONRegExp = exports.Binary = exports.BSON = void 0; | ||
exports.ConnectionCheckedOutEvent = exports.ConnectionCheckedInEvent = exports.CommandSucceededEvent = exports.CommandStartedEvent = exports.CommandFailedEvent = exports.WriteConcern = exports.ReadPreference = exports.ReadConcern = exports.TopologyType = exports.ServerType = exports.ReadPreferenceMode = exports.ReadConcernLevel = exports.ProfilingLevel = exports.ReturnDocument = exports.ServerApiVersion = exports.ExplainVerbosity = exports.MongoErrorLabel = exports.CursorTimeoutMode = exports.CURSOR_FLAGS = exports.Compressor = exports.AuthMechanism = exports.GSSAPICanonicalizationValue = exports.AutoEncryptionLoggerLevel = exports.BatchType = exports.UnorderedBulkOperation = exports.OrderedBulkOperation = exports.MongoClient = exports.ListIndexesCursor = exports.ListCollectionsCursor = exports.GridFSBucketWriteStream = exports.GridFSBucketReadStream = exports.GridFSBucket = exports.FindCursor = exports.ExplainableCursor = exports.Db = exports.Collection = exports.ClientSession = exports.ChangeStream = exports.CancellationToken = exports.AggregationCursor = exports.Admin = exports.AbstractCursor = exports.configureExplicitResourceManagement = exports.MongoWriteConcernError = exports.MongoUnexpectedServerResponseError = exports.MongoTransactionError = exports.MongoTopologyClosedError = exports.MongoTailableCursorError = exports.MongoSystemError = exports.MongoServerSelectionError = void 0; | ||
exports.MongoClientAuthProviders = exports.MongoCryptKMSRequestNetworkTimeoutError = exports.MongoCryptInvalidArgumentError = exports.MongoCryptError = exports.MongoCryptCreateEncryptedCollectionError = exports.MongoCryptCreateDataKeyError = exports.MongoCryptAzureKMSRequestError = exports.SrvPollingEvent = exports.WaitingForSuitableServerEvent = exports.ServerSelectionSucceededEvent = exports.ServerSelectionStartedEvent = exports.ServerSelectionFailedEvent = exports.ServerSelectionEvent = exports.TopologyOpeningEvent = exports.TopologyDescriptionChangedEvent = exports.TopologyClosedEvent = exports.ServerOpeningEvent = exports.ServerHeartbeatSucceededEvent = exports.ServerHeartbeatStartedEvent = exports.ServerHeartbeatFailedEvent = exports.ServerDescriptionChangedEvent = exports.ServerClosedEvent = exports.ConnectionReadyEvent = exports.ConnectionPoolReadyEvent = exports.ConnectionPoolMonitoringEvent = exports.ConnectionPoolCreatedEvent = exports.ConnectionPoolClosedEvent = exports.ConnectionPoolClearedEvent = exports.ConnectionCreatedEvent = exports.ConnectionClosedEvent = exports.ConnectionCheckOutStartedEvent = exports.ConnectionCheckOutFailedEvent = void 0; | ||
exports.ConnectionCheckedInEvent = exports.CommandSucceededEvent = exports.CommandStartedEvent = exports.CommandFailedEvent = exports.WriteConcern = exports.ReadPreference = exports.ReadConcern = exports.TopologyType = exports.ServerType = exports.ReadPreferenceMode = exports.ReadConcernLevel = exports.ProfilingLevel = exports.ReturnDocument = exports.ServerApiVersion = exports.ExplainVerbosity = exports.MongoErrorLabel = exports.CursorTimeoutMode = exports.CURSOR_FLAGS = exports.Compressor = exports.AuthMechanism = exports.GSSAPICanonicalizationValue = exports.AutoEncryptionLoggerLevel = exports.BatchType = exports.UnorderedBulkOperation = exports.OrderedBulkOperation = exports.MongoClient = exports.ListIndexesCursor = exports.ListCollectionsCursor = exports.GridFSBucketWriteStream = exports.GridFSBucketReadStream = exports.GridFSBucket = exports.FindCursor = exports.ExplainableCursor = exports.Db = exports.Collection = exports.ClientSession = exports.ChangeStream = exports.CancellationToken = exports.AggregationCursor = exports.Admin = exports.AbstractCursor = exports.configureExplicitResourceManagement = exports.MongoWriteConcernError = exports.MongoUnexpectedServerResponseError = exports.MongoTransactionError = exports.MongoTopologyClosedError = exports.MongoTailableCursorError = exports.MongoSystemError = exports.MongoStalePrimaryError = exports.MongoServerSelectionError = void 0; | ||
exports.MongoClientAuthProviders = exports.MongoCryptKMSRequestNetworkTimeoutError = exports.MongoCryptInvalidArgumentError = exports.MongoCryptError = exports.MongoCryptCreateEncryptedCollectionError = exports.MongoCryptCreateDataKeyError = exports.MongoCryptAzureKMSRequestError = exports.SrvPollingEvent = exports.WaitingForSuitableServerEvent = exports.ServerSelectionSucceededEvent = exports.ServerSelectionStartedEvent = exports.ServerSelectionFailedEvent = exports.ServerSelectionEvent = exports.TopologyOpeningEvent = exports.TopologyDescriptionChangedEvent = exports.TopologyClosedEvent = exports.ServerOpeningEvent = exports.ServerHeartbeatSucceededEvent = exports.ServerHeartbeatStartedEvent = exports.ServerHeartbeatFailedEvent = exports.ServerDescriptionChangedEvent = exports.ServerClosedEvent = exports.ConnectionReadyEvent = exports.ConnectionPoolReadyEvent = exports.ConnectionPoolMonitoringEvent = exports.ConnectionPoolCreatedEvent = exports.ConnectionPoolClosedEvent = exports.ConnectionPoolClearedEvent = exports.ConnectionCreatedEvent = exports.ConnectionClosedEvent = exports.ConnectionCheckOutStartedEvent = exports.ConnectionCheckOutFailedEvent = exports.ConnectionCheckedOutEvent = void 0; | ||
const admin_1 = require("./admin"); | ||
@@ -100,2 +100,3 @@ Object.defineProperty(exports, "Admin", { enumerable: true, get: function () { return admin_1.Admin; } }); | ||
Object.defineProperty(exports, "MongoServerSelectionError", { enumerable: true, get: function () { return error_1.MongoServerSelectionError; } }); | ||
Object.defineProperty(exports, "MongoStalePrimaryError", { enumerable: true, get: function () { return error_1.MongoStalePrimaryError; } }); | ||
Object.defineProperty(exports, "MongoSystemError", { enumerable: true, get: function () { return error_1.MongoSystemError; } }); | ||
@@ -102,0 +103,0 @@ Object.defineProperty(exports, "MongoTailableCursorError", { enumerable: true, get: function () { return error_1.MongoTailableCursorError; } }); |
@@ -56,3 +56,6 @@ "use strict"; | ||
this.lastWriteDate = hello?.lastWrite?.lastWriteDate ?? 0; | ||
// NOTE: This actually builds the stack string instead of holding onto the getter and all its | ||
// associated references. This is done to prevent a memory leak. | ||
this.error = options.error ?? null; | ||
this.error?.stack; | ||
// TODO(NODE-2674): Preserve int64 sent from MongoDB | ||
@@ -59,0 +62,0 @@ this.topologyVersion = this.error?.topologyVersion ?? hello?.topologyVersion ?? null; |
@@ -287,3 +287,5 @@ "use strict"; | ||
// replace serverDescription with a default ServerDescription of type "Unknown" | ||
serverDescriptions.set(serverDescription.address, new server_description_1.ServerDescription(serverDescription.address)); | ||
serverDescriptions.set(serverDescription.address, new server_description_1.ServerDescription(serverDescription.address, undefined, { | ||
error: new error_1.MongoStalePrimaryError(serverDescription, maxSetVersion, maxElectionId) | ||
})); | ||
return [checkHasPrimary(serverDescriptions), setName, maxSetVersion, maxElectionId]; | ||
@@ -299,3 +301,5 @@ } | ||
// this primary is stale, we must remove it | ||
serverDescriptions.set(serverDescription.address, new server_description_1.ServerDescription(serverDescription.address)); | ||
serverDescriptions.set(serverDescription.address, new server_description_1.ServerDescription(serverDescription.address, undefined, { | ||
error: new error_1.MongoStalePrimaryError(serverDescription, maxSetVersion, maxElectionId) | ||
})); | ||
return [checkHasPrimary(serverDescriptions), setName, maxSetVersion, maxElectionId]; | ||
@@ -315,3 +319,5 @@ } | ||
// Reset old primary's type to Unknown. | ||
serverDescriptions.set(address, new server_description_1.ServerDescription(server.address)); | ||
serverDescriptions.set(address, new server_description_1.ServerDescription(server.address, undefined, { | ||
error: new error_1.MongoStalePrimaryError(serverDescription, maxSetVersion, maxElectionId) | ||
})); | ||
// There can only be one primary | ||
@@ -318,0 +324,0 @@ break; |
{ | ||
"name": "mongodb", | ||
"version": "6.11.0-dev.20241207.sha.ea8a33f1", | ||
"version": "6.11.0-dev.20241210.sha.37613f1a", | ||
"description": "The official MongoDB driver for Node.js", | ||
@@ -5,0 +5,0 @@ "main": "lib/index.js", |
@@ -1,2 +0,2 @@ | ||
import type { Document } from './bson'; | ||
import type { Document, ObjectId } from './bson'; | ||
import { | ||
@@ -7,3 +7,3 @@ type ClientBulkWriteError, | ||
import type { ServerType } from './sdam/common'; | ||
import type { TopologyVersion } from './sdam/server_description'; | ||
import type { ServerDescription, TopologyVersion } from './sdam/server_description'; | ||
import type { TopologyDescription } from './sdam/topology_description'; | ||
@@ -345,2 +345,37 @@ | ||
/** | ||
* An error generated when a primary server is marked stale, never directly thrown | ||
* | ||
* @public | ||
* @category Error | ||
*/ | ||
export class MongoStalePrimaryError extends MongoRuntimeError { | ||
/** | ||
* **Do not use this constructor!** | ||
* | ||
* Meant for internal use only. | ||
* | ||
* @remarks | ||
* This class is only meant to be constructed within the driver. This constructor is | ||
* not subject to semantic versioning compatibility guarantees and may change at any time. | ||
* | ||
* @public | ||
**/ | ||
constructor( | ||
serverDescription: ServerDescription, | ||
maxSetVersion: number | null, | ||
maxElectionId: ObjectId | null, | ||
options?: { cause?: Error } | ||
) { | ||
super( | ||
`primary marked stale due to electionId/setVersion mismatch: server setVersion: ${serverDescription.setVersion}, server electionId: ${serverDescription.electionId}, topology setVersion: ${maxSetVersion}, topology electionId: ${maxElectionId}`, | ||
options | ||
); | ||
} | ||
override get name(): string { | ||
return 'MongoStalePrimaryError'; | ||
} | ||
} | ||
/** | ||
* An error generated when a batch command is re-executed after one of the commands in the batch | ||
@@ -347,0 +382,0 @@ * has failed |
@@ -80,2 +80,3 @@ import { Admin } from './admin'; | ||
MongoServerSelectionError, | ||
MongoStalePrimaryError, | ||
MongoSystemError, | ||
@@ -82,0 +83,0 @@ MongoTailableCursorError, |
@@ -115,3 +115,6 @@ import { type Document, Long, type ObjectId } from '../bson'; | ||
this.lastWriteDate = hello?.lastWrite?.lastWriteDate ?? 0; | ||
// NOTE: This actually builds the stack string instead of holding onto the getter and all its | ||
// associated references. This is done to prevent a memory leak. | ||
this.error = options.error ?? null; | ||
this.error?.stack; | ||
// TODO(NODE-2674): Preserve int64 sent from MongoDB | ||
@@ -118,0 +121,0 @@ this.topologyVersion = this.error?.topologyVersion ?? hello?.topologyVersion ?? null; |
import { EJSON, type ObjectId } from '../bson'; | ||
import * as WIRE_CONSTANTS from '../cmap/wire_protocol/constants'; | ||
import { type MongoError, MongoRuntimeError } from '../error'; | ||
import { type MongoError, MongoRuntimeError, MongoStalePrimaryError } from '../error'; | ||
import { compareObjectId, shuffle } from '../utils'; | ||
@@ -403,3 +403,5 @@ import { ServerType, TopologyType } from './common'; | ||
serverDescription.address, | ||
new ServerDescription(serverDescription.address) | ||
new ServerDescription(serverDescription.address, undefined, { | ||
error: new MongoStalePrimaryError(serverDescription, maxSetVersion, maxElectionId) | ||
}) | ||
); | ||
@@ -420,3 +422,5 @@ | ||
serverDescription.address, | ||
new ServerDescription(serverDescription.address) | ||
new ServerDescription(serverDescription.address, undefined, { | ||
error: new MongoStalePrimaryError(serverDescription, maxSetVersion, maxElectionId) | ||
}) | ||
); | ||
@@ -443,3 +447,8 @@ | ||
// Reset old primary's type to Unknown. | ||
serverDescriptions.set(address, new ServerDescription(server.address)); | ||
serverDescriptions.set( | ||
address, | ||
new ServerDescription(server.address, undefined, { | ||
error: new MongoStalePrimaryError(serverDescription, maxSetVersion, maxElectionId) | ||
}) | ||
); | ||
@@ -446,0 +455,0 @@ // There can only be one primary |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
3741064
77973