From 409ff064a647575df494a0d108641d485742dea5 Mon Sep 17 00:00:00 2001 From: Anemy Date: Wed, 16 Dec 2020 02:26:32 -0500 Subject: [PATCH 1/2] read preference fix without tons of package lock changes --- lib/instance-detail-helper.js | 42 +++--- lib/native-client.js | 6 +- package-lock.json | 162 ++++++++++++++++----- package.json | 8 +- test/instance-detail-helper-mocked.test.js | 38 +++++ 5 files changed, 196 insertions(+), 60 deletions(-) diff --git a/lib/instance-detail-helper.js b/lib/instance-detail-helper.js index dc8b229f..3d3f8d7d 100644 --- a/lib/instance-detail-helper.js +++ b/lib/instance-detail-helper.js @@ -20,6 +20,13 @@ const { const debug = require('debug')('mongodb-data-service:instance-detail-helper'); +function getReadPreferenceOptions(db) { + // `db.command` does not use the read preference set on the + // connection, so here we explicitly to specify it in the options. + const readPreference = db.s ? db.s.readPreference : ReadPreference.PRIMARY; + return { readPreference }; +} + /** * aggregates stats across all found databases * @param {Object} results async.auto results @@ -78,7 +85,7 @@ function getBuildInfo(results, done) { }; const adminDb = db.databaseName === 'admin' ? db : db.admin(); - adminDb.command(spec, {}, function(err, res) { + adminDb.command(spec, getReadPreferenceOptions(db), function(err, res) { if (err) { // buildInfo doesn't require any privileges to run, so if it fails, // something really went wrong and we should return the error. @@ -98,7 +105,7 @@ function getCmdLineOpts(results, done) { }; const adminDb = db.databaseName === 'admin' ? db : db.admin(); - adminDb.command(spec, {}, function(err, res) { + adminDb.command(spec, getReadPreferenceOptions(db), function(err, res) { if (err) { debug('getCmdLineOpts failed!', err); return done(null, { errmsg: err.message }); @@ -213,7 +220,7 @@ function getHostInfo(results, done) { }; const adminDb = db.databaseName === 'admin' ? db : db.admin(); - adminDb.command(spec, {}, function(err, res) { + adminDb.command(spec, getReadPreferenceOptions(db), function(err, res) { if (err) { if (isNotAuthorized(err)) { // if the error is that the user is not authorized, silently ignore it @@ -253,12 +260,14 @@ function listDatabases(results, done) { listDatabases: 1 }; + const options = getReadPreferenceOptions(db); + const adminDb = db.databaseName === 'admin' ? db : db.admin(); - adminDb.command(spec, {}, function(err, res) { + adminDb.command(spec, options, function(err, res) { if (err) { if (isNotAuthorized(err)) { // eslint-disable-next-line no-shadow - adminDb.command({connectionStatus: 1, showPrivileges: 1}, {}, function(err, res) { + adminDb.command({connectionStatus: 1, showPrivileges: 1}, options, function(err, res) { if (err) { done(err); return; @@ -343,7 +352,7 @@ function getDatabase(client, db, name, done) { dbStats: 1 }; - const options = {}; + const options = getReadPreferenceOptions(db); debug('running dbStats for `%s`...', name); client.db(name).command(spec, options, function(err, res) { if (err) { @@ -376,8 +385,15 @@ function getDatabases(results, done) { function getUserInfo(results, done) { const db = results.db; + const options = getReadPreferenceOptions(db); + // get the user privileges - db.command({ connectionStatus: 1, showPrivileges: true }, {}, function( + db.command({ + connectionStatus: 1, + showPrivileges: true + }, + options, + function( err, res ) { @@ -394,7 +410,7 @@ function getUserInfo(results, done) { } const user = res.authInfo.authenticatedUsers[0]; - db.command({ usersInfo: user, showPrivileges: true }, {}, function( + db.command({ usersInfo: user, showPrivileges: true }, options, function( _err, _res ) { @@ -491,15 +507,7 @@ function getDatabaseCollections(db, done) { const spec = {}; - /** - * @note: Durran: For some reason the listCollections call does not take into - * account the read preference that was set on the db instance - it only looks - * in the passed options: https://github.com/mongodb/node-mongodb-native/blob/2.2/lib/db.js#L671 - */ - const rp = db.s ? db.s.readPreference : ReadPreference.PRIMARY; - const options = { readPreference: rp }; - - db.listCollections(spec, options).toArray(function(err, res) { + db.listCollections(spec, getReadPreferenceOptions(db)).toArray(function(err, res) { if (err) { if (isNotAuthorized(err) || isMongosLocalException(err)) { // if the error is that the user is not authorized, silently ignore it diff --git a/lib/native-client.js b/lib/native-client.js index 235ff202..3c53d039 100644 --- a/lib/native-client.js +++ b/lib/native-client.js @@ -267,7 +267,11 @@ class NativeClient extends EventEmitter { * @param {Function} callback - The callback. */ listDatabases(callback) { - this.database.admin().command({ listDatabases: 1 }, {}, (error, result) => { + this.database.admin().command({ + listDatabases: 1 + }, { + readPreference: this.model.readPreference + }, (error, result) => { if (error) { return callback(this._translateMessage(error)); } diff --git a/package-lock.json b/package-lock.json index 532c4be0..df8d2411 100644 --- a/package-lock.json +++ b/package-lock.json @@ -320,6 +320,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/ampersand-model/-/ampersand-model-8.0.1.tgz", "integrity": "sha512-WyrqX1lwseHsYehKgnZvTx4EAq/NAOHC8DbodBm6fZPc4FsKm0ZgaVEe6grGXmkZb9nArkAxAF5I2NTIbHes4A==", + "dev": true, "requires": { "ampersand-state": "^5.0.1", "ampersand-sync": "^5.0.0", @@ -342,6 +343,7 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/ampersand-state/-/ampersand-state-5.0.3.tgz", "integrity": "sha512-sr904K5zvw6mkGjFHhTcfBIdpoJ6mn/HrFg7OleRmBpw3apLb3Z0gVrgRTb7kK1wOLI34vs4S+IXqNHUeqWCzw==", + "dev": true, "requires": { "ampersand-events": "^2.0.1", "ampersand-version": "^1.0.0", @@ -393,7 +395,8 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true }, "ansi-styles": { "version": "3.2.1", @@ -417,12 +420,14 @@ "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true }, "are-we-there-yet": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -431,12 +436,14 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -450,12 +457,14 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -561,7 +570,8 @@ "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, "base64-js": { "version": "1.3.1", @@ -652,6 +662,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -867,7 +878,8 @@ "chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true }, "cli-color": { "version": "0.3.2", @@ -959,7 +971,8 @@ "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true }, "color-convert": { "version": "1.9.3", @@ -993,7 +1006,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "config-chain": { "version": "1.1.12", @@ -1014,7 +1028,8 @@ "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true }, "content-disposition": { "version": "0.5.3", @@ -1119,6 +1134,7 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "dev": true, "requires": { "mimic-response": "^2.0.0" } @@ -1300,7 +1316,8 @@ "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true }, "deep-is": { "version": "0.1.3", @@ -1339,7 +1356,8 @@ "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true }, "denque": { "version": "1.4.1", @@ -1366,7 +1384,8 @@ "detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true }, "detective": { "version": "5.2.0", @@ -1641,6 +1660,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, "requires": { "once": "^1.4.0" } @@ -2048,7 +2068,8 @@ "expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true }, "ext": { "version": "1.4.0", @@ -2272,7 +2293,8 @@ "fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true }, "fs-extra": { "version": "4.0.3", @@ -2288,7 +2310,8 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "fsevents": { "version": "2.1.3", @@ -2313,6 +2336,7 @@ "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, "requires": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -2384,12 +2408,14 @@ "github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", + "dev": true }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2525,6 +2551,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/hadron-ipc/-/hadron-ipc-1.1.1.tgz", "integrity": "sha512-IqLR2BNIGslCDgyUJqT82iMoSoVgSDXM9hXh2Af3gmscphpQVVh/XKiq4w8qtWwcTEamBb1rq+kCjb9x7BF+Vg==", + "dev": true, "requires": { "debug": "^4.1.1", "is-electron-renderer": "^2.0.0", @@ -2586,7 +2613,8 @@ "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true }, "he": { "version": "1.2.0", @@ -2674,7 +2702,8 @@ "immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", + "dev": true }, "import-fresh": { "version": "3.2.1", @@ -2697,7 +2726,8 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true }, "indexes-of": { "version": "1.0.1", @@ -2709,6 +2739,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -2722,7 +2753,8 @@ "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true }, "inquirer": { "version": "6.5.2", @@ -2821,7 +2853,8 @@ "is-electron-renderer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-electron-renderer/-/is-electron-renderer-2.0.1.tgz", - "integrity": "sha1-pGnQVvl1aXxYyYxgI+sKp5r4laI=" + "integrity": "sha1-pGnQVvl1aXxYyYxgI+sKp5r4laI=", + "dev": true }, "is-extglob": { "version": "2.1.1", @@ -2833,6 +2866,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -2894,7 +2928,8 @@ "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true }, "is-regex": { "version": "1.0.5", @@ -3086,6 +3121,7 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/keytar/-/keytar-5.6.0.tgz", "integrity": "sha512-ueulhshHSGoryfRXaIvTj0BV1yB0KddBGhGoqCxSN9LR1Ks1GKuuCdVhF+2/YOs5fMl6MlTI9On1a4DHDXoTow==", + "dev": true, "requires": { "nan": "2.14.1", "prebuild-install": "5.3.3" @@ -3114,6 +3150,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "dev": true, "requires": { "immediate": "~3.0.5" } @@ -3128,6 +3165,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.9.0.tgz", "integrity": "sha512-rR1oyNrKulpe+VM9cYmcFn6tsHuokyVHFaCM3+osEmxaHTbEk8oQu6eGDfS6DQLWi/N67XRmB8ECG37OES368g==", + "dev": true, "requires": { "lie": "3.1.1" } @@ -3422,7 +3460,8 @@ "lodash.forin": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.forin/-/lodash.forin-4.4.0.tgz", - "integrity": "sha1-XT8grlZAEfvog4H32YlJyclRlzE=" + "integrity": "sha1-XT8grlZAEfvog4H32YlJyclRlzE=", + "dev": true }, "lodash.forown": { "version": "3.0.2", @@ -3508,7 +3547,8 @@ "lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true }, "lodash.isstring": { "version": "3.0.1", @@ -3828,7 +3868,8 @@ "mimic-response": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "dev": true }, "min-document": { "version": "2.19.0", @@ -3842,6 +3883,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -3849,12 +3891,14 @@ "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, "requires": { "minimist": "0.0.8" }, @@ -3862,14 +3906,16 @@ "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true } } }, "mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true }, "mocha": { "version": "8.2.1", @@ -4209,6 +4255,7 @@ "version": "17.1.0", "resolved": "https://registry.npmjs.org/mongodb-connection-model/-/mongodb-connection-model-17.1.0.tgz", "integrity": "sha512-RibS2JfxbVEmjDfuRC3zfaoweOGFvUfEy9JmgYDcGOrhcKcUj4z/VUlbD+6bsg47vImpgMXvXWr22BgjKL4PQw==", + "dev": true, "requires": { "ampersand-model": "^8.0.0", "ampersand-rest-collection": "^6.0.0", @@ -4813,7 +4860,8 @@ "nan": { "version": "2.14.1", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", - "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==" + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", + "dev": true }, "nanoid": { "version": "3.1.12", @@ -4824,7 +4872,8 @@ "napi-build-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true }, "natural-compare": { "version": "1.4.0", @@ -4848,6 +4897,7 @@ "version": "2.19.3", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.19.3.tgz", "integrity": "sha512-9xZrlyfvKhWme2EXFKQhZRp1yNWT/uI1luYPr3sFl+H4keYY4xR+1jO7mvTTijIsHf1M+QDe9uWuKeEpLInIlg==", + "dev": true, "requires": { "semver": "^5.4.1" } @@ -4873,7 +4923,8 @@ "noop-logger": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" + "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", + "dev": true }, "normalize-package-data": { "version": "2.5.0", @@ -4921,6 +4972,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -4940,7 +4992,8 @@ "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true }, "oauth-sign": { "version": "0.9.0", @@ -4950,7 +5003,8 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true }, "object-inspect": { "version": "1.7.0", @@ -5018,6 +5072,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -5131,7 +5186,8 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-is-inside": { "version": "1.0.2", @@ -5270,6 +5326,7 @@ "version": "5.3.3", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.3.tgz", "integrity": "sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g==", + "dev": true, "requires": { "detect-libc": "^1.0.3", "expand-template": "^2.0.3", @@ -5372,6 +5429,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -5391,6 +5449,7 @@ "version": "3.4.1", "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dev": true, "requires": { "performance-now": "^2.1.0" } @@ -5408,6 +5467,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -5663,17 +5723,20 @@ "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true }, "simple-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true }, "simple-get": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "dev": true, "requires": { "decompress-response": "^4.2.0", "once": "^1.3.1", @@ -5788,6 +5851,7 @@ "version": "0.8.9", "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-0.8.9.tgz", "integrity": "sha512-GmoNPxWDMkVpMFa9LVVzQZHF6EW3WKmBwL+4/GeILf2hFmix5Isxm7Amamo8o7bHiU0tC+wXsGcUXOxp8ChPaw==", + "dev": true, "requires": { "ssh2-streams": "~0.4.10" } @@ -5796,6 +5860,7 @@ "version": "0.4.10", "resolved": "https://registry.npmjs.org/ssh2-streams/-/ssh2-streams-0.4.10.tgz", "integrity": "sha512-8pnlMjvnIZJvmTzUIIA5nT4jr2ZWNNVHwyXfMGdRJbug9TpI3kd99ffglgfSWqujVv/0gxwMsDn9j9RVst8yhQ==", + "dev": true, "requires": { "asn1": "~0.2.0", "bcrypt-pbkdf": "^1.0.2", @@ -5822,6 +5887,7 @@ "version": "3.3.4", "resolved": "https://registry.npmjs.org/storage-mixin/-/storage-mixin-3.3.4.tgz", "integrity": "sha512-NUD/loAAp2Enxqn28N4n5koJQFTIcN96AaAo8YFEut0tznR377oWrvd5ezOZTesRYbXKB5gKjMdK1e+IMpiE9Q==", + "dev": true, "requires": { "ampersand-model": "^8.0.1", "ampersand-rest-collection": "^6.0.0", @@ -5841,6 +5907,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "requires": { "glob": "^7.1.3" } @@ -5859,12 +5926,14 @@ "streamsearch": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", - "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=", + "dev": true }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -5900,6 +5969,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -5916,7 +5986,8 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true }, "strip-outer": { "version": "1.0.1", @@ -5995,6 +6066,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, "requires": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -6006,6 +6078,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", + "dev": true, "requires": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -6018,6 +6091,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "dev": true, "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -6028,6 +6102,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -6037,6 +6112,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -6047,6 +6123,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "requires": { "safe-buffer": "~5.2.0" } @@ -6206,6 +6283,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, "requires": { "is-typedarray": "^1.0.0" } @@ -6326,12 +6404,14 @@ "which-pm-runs": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", + "dev": true }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, "requires": { "string-width": "^1.0.2 || 2" } @@ -6427,7 +6507,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "write": { "version": "1.0.3", @@ -6442,6 +6523,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, "requires": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", diff --git a/package.json b/package.json index d8ebfc06..633dff97 100644 --- a/package.json +++ b/package.json @@ -19,14 +19,16 @@ "posttest": "mongodb-runner stop --port=27018", "check": "mongodb-js-precommit" }, + "peerDependencies": { + "mongodb": "3.x", + "mongodb-connection-model": "17.x" + }, "dependencies": { "async": "^3.2.0", "debug": "^4.2.0", "lodash": "^4.17.20", - "mongodb": "^3.6.3", "mongodb-build-info": "^1.1.1", "mongodb-collection-sample": "^4.5.1", - "mongodb-connection-model": "^17.1.0", "mongodb-index-model": "^2.6.1", "mongodb-js-errors": "^0.5.0", "mongodb-ns": "^2.2.0", @@ -38,6 +40,8 @@ "eslint-config-mongodb-js": "^5.0.3", "mocha": "^8.2.1", "mock-require": "^3.0.3", + "mongodb": "^3.6.3", + "mongodb-connection-model": "^17.1.0", "mongodb-js-precommit": "^2.2.1", "mongodb-runner": "^4.8.0", "xvfb-maybe": "^0.2.1" diff --git a/test/instance-detail-helper-mocked.test.js b/test/instance-detail-helper-mocked.test.js index 2bbd4e55..d6d236b6 100644 --- a/test/instance-detail-helper-mocked.test.js +++ b/test/instance-detail-helper-mocked.test.js @@ -1,4 +1,5 @@ const assert = require('assert'); +const { ReadPreference } = require('mongodb'); const { getAllowedCollections, getAllowedDatabases, @@ -383,6 +384,43 @@ describe('instance-detail-helper-mocked', function() { done(); }); }); + it('should pass the read preference explicity when it is set', function(done) { + let passedOptions; + results.db = makeMockDB(function(times, command, options, callback) { + if (command.listDatabases) { + passedOptions = options; + return callback(null, { databases: [] }); + } + return callback(null, {}); + }); + results.db.s = { + readPreference: ReadPreference.SECONDARY + }; + + listDatabases(results, function() { + assert.deepEqual(passedOptions, { + readPreference: 'secondary' + }); + done(); + }); + }); + it('defaults to passing the read preference as PRIMARY', function(done) { + let passedOptions; + results.db = makeMockDB(function(times, command, options, callback) { + if (command.listDatabases) { + passedOptions = options; + return callback(null, { databases: [] }); + } + return callback(null, {}); + }); + + listDatabases(results, function() { + assert.deepEqual(passedOptions, { + readPreference: ReadPreference.PRIMARY + }); + done(); + }); + }); it('should pass on other errors from the listDatabases command', function(done) { // instead of the real db handle, pass in the mocked one results.db = makeMockDB( From cfdd1fc64b71b8c71af4ede079e877ea5bcc5a71 Mon Sep 17 00:00:00 2001 From: Anemy Date: Wed, 16 Dec 2020 02:34:28 -0500 Subject: [PATCH 2/2] Tweak connection model peer dep version --- package-lock.json | 7 +++---- package.json | 4 ++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index df8d2411..6aaa8703 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4252,9 +4252,9 @@ } }, "mongodb-connection-model": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/mongodb-connection-model/-/mongodb-connection-model-17.1.0.tgz", - "integrity": "sha512-RibS2JfxbVEmjDfuRC3zfaoweOGFvUfEy9JmgYDcGOrhcKcUj4z/VUlbD+6bsg47vImpgMXvXWr22BgjKL4PQw==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-model/-/mongodb-connection-model-18.0.0.tgz", + "integrity": "sha512-X5OtFijmCP6HNfsCETEYiBH3M+hvW+p+E7gHqA2CQcVaXaeoojYpX2Nsr7YKwW1oKUbQURfM4szt1Ds9rBAzvw==", "dev": true, "requires": { "ampersand-model": "^8.0.0", @@ -4262,7 +4262,6 @@ "async": "^3.1.0", "debug": "^4.1.1", "lodash": "^4.17.15", - "mongodb": "^3.6.1", "raf": "^3.4.1", "ssh2": "^0.8.7", "storage-mixin": "^3.3.4" diff --git a/package.json b/package.json index 633dff97..f1900da3 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ }, "peerDependencies": { "mongodb": "3.x", - "mongodb-connection-model": "17.x" + "mongodb-connection-model": "*" }, "dependencies": { "async": "^3.2.0", @@ -41,7 +41,7 @@ "mocha": "^8.2.1", "mock-require": "^3.0.3", "mongodb": "^3.6.3", - "mongodb-connection-model": "^17.1.0", + "mongodb-connection-model": "^18.0.0", "mongodb-js-precommit": "^2.2.1", "mongodb-runner": "^4.8.0", "xvfb-maybe": "^0.2.1"