From d32a6f0771dde5a478d63c6339b2a30001bf2b09 Mon Sep 17 00:00:00 2001 From: Neal Beeken Date: Wed, 20 Nov 2024 18:16:35 -0500 Subject: [PATCH 1/8] wip --- src/cmap/connect.ts | 10 +++++++++- test/benchmarks/driverBench/index.js | 4 ---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/cmap/connect.ts b/src/cmap/connect.ts index 938b524e082..8c549d42bd2 100644 --- a/src/cmap/connect.ts +++ b/src/cmap/connect.ts @@ -387,10 +387,18 @@ export async function makeSocket(options: MakeConnectionOptions): Promise resolve(socket)) .once('error', error => reject(connectionFailureError('error', error))) - .once('timeout', () => reject(connectionFailureError('timeout'))) + .once('timeout', () => { + const end = performance.now(); + return reject( + new MongoNetworkTimeoutError( + `socket.connect() timed out! connectTimeoutMS=${connectTimeoutMS}ms, socket.setTimeout fired after ${end - start}ms.` + ) + ); + }) .once('close', () => reject(connectionFailureError('close'))); if (options.cancellationToken != null) { diff --git a/test/benchmarks/driverBench/index.js b/test/benchmarks/driverBench/index.js index 8bdc35c7f8d..3f83779f9d3 100644 --- a/test/benchmarks/driverBench/index.js +++ b/test/benchmarks/driverBench/index.js @@ -59,10 +59,6 @@ benchmarkRunner ]); const multiBench = average(Object.values(microBench.multiBench)); - // ldjsonMultiFileUpload and ldjsonMultiFileExport cause connection errors. - // While we investigate, we will use the last known good values: - // https://spruce.mongodb.com/task/mongo_node_driver_next_performance_tests_run_spec_benchmark_tests_node_server_4bc3e500b6f0e8ab01f052c4a1bfb782d6a29b4e_f168e1328f821bbda265e024cc91ae54_24_11_18_15_37_24/logs?execution=0 - const parallelBench = average([ microBench.parallel.ldjsonMultiFileUpload, microBench.parallel.ldjsonMultiFileExport, From 0b952f6582f86172e38e0d630fdf68214d559337 Mon Sep 17 00:00:00 2001 From: Neal Beeken Date: Thu, 21 Nov 2024 16:29:55 -0500 Subject: [PATCH 2/8] chore: test isolation and info --- src/cmap/connect.ts | 7 +++---- test/benchmarks/driverBench/index.js | 18 +++++++++--------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/cmap/connect.ts b/src/cmap/connect.ts index 8c549d42bd2..e36829b72e8 100644 --- a/src/cmap/connect.ts +++ b/src/cmap/connect.ts @@ -386,16 +386,15 @@ export async function makeSocket(options: MakeConnectionOptions): Promise resolve(socket)) .once('error', error => reject(connectionFailureError('error', error))) .once('timeout', () => { - const end = performance.now(); - return reject( + reject( new MongoNetworkTimeoutError( - `socket.connect() timed out! connectTimeoutMS=${connectTimeoutMS}ms, socket.setTimeout fired after ${end - start}ms.` + `Socket '${connectEvent}' timed out after ${(performance.now() - start) | 0}ms (connectTimeoutMS: ${connectTimeoutMS})` ) ); }) diff --git a/test/benchmarks/driverBench/index.js b/test/benchmarks/driverBench/index.js index 3f83779f9d3..cf7a64daa06 100644 --- a/test/benchmarks/driverBench/index.js +++ b/test/benchmarks/driverBench/index.js @@ -67,18 +67,18 @@ benchmarkRunner ]); const readBench = average([ - microBench.singleBench.findOne, - microBench.multiBench.findManyAndEmptyCursor, - microBench.multiBench.gridFsDownload, + // microBench.singleBench.findOne, + // microBench.multiBench.findManyAndEmptyCursor, + // microBench.multiBench.gridFsDownload, microBench.parallel.gridfsMultiFileDownload, microBench.parallel.ldjsonMultiFileExport ]); const writeBench = average([ - microBench.singleBench.smallDocInsertOne, - microBench.singleBench.largeDocInsertOne, - microBench.multiBench.smallDocBulkInsert, - microBench.multiBench.largeDocBulkInsert, - microBench.multiBench.gridFsUpload, + // microBench.singleBench.smallDocInsertOne, + // microBench.singleBench.largeDocInsertOne, + // microBench.multiBench.smallDocBulkInsert, + // microBench.multiBench.largeDocBulkInsert, + // microBench.multiBench.gridFsUpload, microBench.parallel.ldjsonMultiFileUpload, microBench.parallel.gridfsMultiFileUpload ]); @@ -121,6 +121,6 @@ benchmarkRunner return writeFile('results.json', results); }) .catch(err => { - console.error('failure: ', err.name, err.message); + console.error('failure: ', err.name, err.message, err.stack); process.exit(1); }); From 0c36b124447b6701e3251094f5bd4aead04588a4 Mon Sep 17 00:00:00 2001 From: Neal Beeken Date: Mon, 25 Nov 2024 11:54:53 -0500 Subject: [PATCH 3/8] chore: prepare for BSON fix --- src/cmap/connect.ts | 58 ++++++++++++---------------- test/benchmarks/driverBench/index.js | 24 +++++------- 2 files changed, 35 insertions(+), 47 deletions(-) diff --git a/src/cmap/connect.ts b/src/cmap/connect.ts index e36829b72e8..9efe2461070 100644 --- a/src/cmap/connect.ts +++ b/src/cmap/connect.ts @@ -390,7 +390,9 @@ export async function makeSocket(options: MakeConnectionOptions): Promise resolve(socket)) - .once('error', error => reject(connectionFailureError('error', error))) + .once('error', cause => + reject(new MongoNetworkError(MongoError.buildErrorMessage(cause), { cause })) + ) .once('timeout', () => { reject( new MongoNetworkTimeoutError( @@ -398,10 +400,21 @@ export async function makeSocket(options: MakeConnectionOptions): Promise reject(connectionFailureError('close'))); + .once('close', () => + reject( + new MongoNetworkError( + `Socket closed after ${(performance.now() - start) | 0} during connection establishment` + ) + ) + ); if (options.cancellationToken != null) { - cancellationHandler = () => reject(connectionFailureError('cancel')); + cancellationHandler = () => + reject( + new MongoNetworkError( + `Socket connection establishment was cancelled after ${(performance.now() - start) | 0}` + ) + ); options.cancellationToken.once('cancel', cancellationHandler); } } @@ -454,9 +467,11 @@ async function makeSocks5Connection(options: MakeConnectionOptions): Promise `- arch: ${os.arch()}`, `- os: ${process.platform} (${os.release()})`, `- ram: ${platform.ram}`, - `- node: ${process.version}`, - `- driver: ${MONGODB_DRIVER_VERSION} (${MONGODB_DRIVER_REVISION}): ${MONGODB_DRIVER_PATH}`, - ` - options ${util.inspect(MONGODB_CLIENT_OPTIONS)}`, - `- bson: ${MONGODB_BSON_VERSION} (${MONGODB_BSON_REVISION}): (${MONGODB_BSON_PATH})\n` + `- node: ${process.version}\n` ].join('\n'); console.log(systemInfo()); @@ -67,18 +63,18 @@ benchmarkRunner ]); const readBench = average([ - // microBench.singleBench.findOne, - // microBench.multiBench.findManyAndEmptyCursor, - // microBench.multiBench.gridFsDownload, + microBench.singleBench.findOne, + microBench.multiBench.findManyAndEmptyCursor, + microBench.multiBench.gridFsDownload, microBench.parallel.gridfsMultiFileDownload, microBench.parallel.ldjsonMultiFileExport ]); const writeBench = average([ - // microBench.singleBench.smallDocInsertOne, - // microBench.singleBench.largeDocInsertOne, - // microBench.multiBench.smallDocBulkInsert, - // microBench.multiBench.largeDocBulkInsert, - // microBench.multiBench.gridFsUpload, + microBench.singleBench.smallDocInsertOne, + microBench.singleBench.largeDocInsertOne, + microBench.multiBench.smallDocBulkInsert, + microBench.multiBench.largeDocBulkInsert, + microBench.multiBench.gridFsUpload, microBench.parallel.ldjsonMultiFileUpload, microBench.parallel.gridfsMultiFileUpload ]); @@ -121,6 +117,6 @@ benchmarkRunner return writeFile('results.json', results); }) .catch(err => { - console.error('failure: ', err.name, err.message, err.stack); + console.error('failure: ', err.name, err.message); process.exit(1); }); From 2fa2d0073abd4f6656fec17ee0d0239ed21228ec Mon Sep 17 00:00:00 2001 From: Neal Beeken Date: Wed, 27 Nov 2024 12:48:43 -0500 Subject: [PATCH 4/8] chore: fix how I test bson main --- .evergreen/install-dependencies.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/.evergreen/install-dependencies.sh b/.evergreen/install-dependencies.sh index ef56c295fb7..23c4410e59d 100644 --- a/.evergreen/install-dependencies.sh +++ b/.evergreen/install-dependencies.sh @@ -19,5 +19,6 @@ fi source $DRIVERS_TOOLS/.evergreen/install-node.sh npm install "${NPM_OPTIONS}" +npm install mongodb/js-bson#main source $DRIVERS_TOOLS/.evergreen/init-node-and-npm-env.sh From f8786f7249fa3542be149f235d3dbd3452119145 Mon Sep 17 00:00:00 2001 From: Neal Beeken Date: Tue, 3 Dec 2024 16:14:52 -0500 Subject: [PATCH 5/8] fix: bump bson --- .evergreen/install-dependencies.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/.evergreen/install-dependencies.sh b/.evergreen/install-dependencies.sh index 23c4410e59d..ef56c295fb7 100644 --- a/.evergreen/install-dependencies.sh +++ b/.evergreen/install-dependencies.sh @@ -19,6 +19,5 @@ fi source $DRIVERS_TOOLS/.evergreen/install-node.sh npm install "${NPM_OPTIONS}" -npm install mongodb/js-bson#main source $DRIVERS_TOOLS/.evergreen/init-node-and-npm-env.sh From 5aaaccaf46381951be132129faea9e1289a17a0f Mon Sep 17 00:00:00 2001 From: Neal Beeken Date: Wed, 4 Dec 2024 10:27:28 -0500 Subject: [PATCH 6/8] chore: undo src changes --- src/cmap/connect.ts | 67 +++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 33 deletions(-) diff --git a/src/cmap/connect.ts b/src/cmap/connect.ts index 9efe2461070..938b524e082 100644 --- a/src/cmap/connect.ts +++ b/src/cmap/connect.ts @@ -386,35 +386,15 @@ export async function makeSocket(options: MakeConnectionOptions): Promise resolve(socket)) - .once('error', cause => - reject(new MongoNetworkError(MongoError.buildErrorMessage(cause), { cause })) - ) - .once('timeout', () => { - reject( - new MongoNetworkTimeoutError( - `Socket '${connectEvent}' timed out after ${(performance.now() - start) | 0}ms (connectTimeoutMS: ${connectTimeoutMS})` - ) - ); - }) - .once('close', () => - reject( - new MongoNetworkError( - `Socket closed after ${(performance.now() - start) | 0} during connection establishment` - ) - ) - ); + .once('error', error => reject(connectionFailureError('error', error))) + .once('timeout', () => reject(connectionFailureError('timeout'))) + .once('close', () => reject(connectionFailureError('close'))); if (options.cancellationToken != null) { - cancellationHandler = () => - reject( - new MongoNetworkError( - `Socket connection establishment was cancelled after ${(performance.now() - start) | 0}` - ) - ); + cancellationHandler = () => reject(connectionFailureError('cancel')); options.cancellationToken.once('cancel', cancellationHandler); } } @@ -467,11 +447,9 @@ async function makeSocks5Connection(options: MakeConnectionOptions): Promise Date: Wed, 4 Dec 2024 10:35:29 -0500 Subject: [PATCH 7/8] chore: keep src changes --- src/cmap/connect.ts | 67 ++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/src/cmap/connect.ts b/src/cmap/connect.ts index 938b524e082..9efe2461070 100644 --- a/src/cmap/connect.ts +++ b/src/cmap/connect.ts @@ -386,15 +386,35 @@ export async function makeSocket(options: MakeConnectionOptions): Promise resolve(socket)) - .once('error', error => reject(connectionFailureError('error', error))) - .once('timeout', () => reject(connectionFailureError('timeout'))) - .once('close', () => reject(connectionFailureError('close'))); + .once('error', cause => + reject(new MongoNetworkError(MongoError.buildErrorMessage(cause), { cause })) + ) + .once('timeout', () => { + reject( + new MongoNetworkTimeoutError( + `Socket '${connectEvent}' timed out after ${(performance.now() - start) | 0}ms (connectTimeoutMS: ${connectTimeoutMS})` + ) + ); + }) + .once('close', () => + reject( + new MongoNetworkError( + `Socket closed after ${(performance.now() - start) | 0} during connection establishment` + ) + ) + ); if (options.cancellationToken != null) { - cancellationHandler = () => reject(connectionFailureError('cancel')); + cancellationHandler = () => + reject( + new MongoNetworkError( + `Socket connection establishment was cancelled after ${(performance.now() - start) | 0}` + ) + ); options.cancellationToken.once('cancel', cancellationHandler); } } @@ -447,9 +467,11 @@ async function makeSocks5Connection(options: MakeConnectionOptions): Promise Date: Thu, 5 Dec 2024 10:38:09 -0500 Subject: [PATCH 8/8] chore: fix comment --- test/benchmarks/driverBench/index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/benchmarks/driverBench/index.js b/test/benchmarks/driverBench/index.js index c0cae554df4..3f83779f9d3 100644 --- a/test/benchmarks/driverBench/index.js +++ b/test/benchmarks/driverBench/index.js @@ -2,6 +2,7 @@ const MongoBench = require('../mongoBench'); const os = require('node:os'); +const util = require('node:util'); const process = require('node:process'); const Runner = MongoBench.Runner; @@ -32,7 +33,10 @@ const systemInfo = () => `- arch: ${os.arch()}`, `- os: ${process.platform} (${os.release()})`, `- ram: ${platform.ram}`, - `- node: ${process.version}\n` + `- node: ${process.version}`, + `- driver: ${MONGODB_DRIVER_VERSION} (${MONGODB_DRIVER_REVISION}): ${MONGODB_DRIVER_PATH}`, + ` - options ${util.inspect(MONGODB_CLIENT_OPTIONS)}`, + `- bson: ${MONGODB_BSON_VERSION} (${MONGODB_BSON_REVISION}): (${MONGODB_BSON_PATH})\n` ].join('\n'); console.log(systemInfo());