From c3927e4e4c3ee73f347dcccbe9cae00dca6976c8 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Sun, 24 Dec 2017 03:30:55 +0000 Subject: [PATCH 1/6] fix(package): update mongodb to version 3.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1d0af198db..f7b0a551c3 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "lodash": "4.17.4", "lru-cache": "4.1.1", "mime": "2.0.3", - "mongodb": "2.2.33", + "mongodb": "3.0.0", "multer": "1.3.0", "parse": "1.11.0", "pg-promise": "7.3.2", From 6e97ace19ffd6b7c5a53a3b242481dfe2703012d Mon Sep 17 00:00:00 2001 From: Florent Vilmart Date: Mon, 25 Dec 2017 16:03:14 -0500 Subject: [PATCH 2/6] Compatibility with MongoDB client 3.0 --- src/Adapters/Storage/Mongo/MongoStorageAdapter.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Adapters/Storage/Mongo/MongoStorageAdapter.js b/src/Adapters/Storage/Mongo/MongoStorageAdapter.js index 5158e58c14..1a4983801e 100644 --- a/src/Adapters/Storage/Mongo/MongoStorageAdapter.js +++ b/src/Adapters/Storage/Mongo/MongoStorageAdapter.js @@ -116,7 +116,13 @@ export class MongoStorageAdapter { // encoded const encodedUri = formatUrl(parseUrl(this._uri)); - this.connectionPromise = MongoClient.connect(encodedUri, this._mongoOptions).then(database => { + this.connectionPromise = MongoClient.connect(encodedUri, this._mongoOptions).then(client => { + // Starting mongoDB 3.0, the MongoClient.connect don't return a DB anymore but a client + // Fortunatelu, we can get back thr options + // https://github.com/mongodb/node-mongodb-native/blob/2c35d76f08574225b8db02d7bef687123e6bb018/lib/mongo_client.js#L885 + // And use them to create the DB. + const options = client.s.options; + const database = client.db(options.dbName); if (!database) { delete this.connectionPromise; return; From c266743e96a3a24ceae83ab2c7ce24cee44a5fc3 Mon Sep 17 00:00:00 2001 From: Florent Vilmart Date: Mon, 25 Dec 2017 16:31:45 -0500 Subject: [PATCH 3/6] Updates Gridstore as well --- src/Adapters/Files/GridStoreAdapter.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Adapters/Files/GridStoreAdapter.js b/src/Adapters/Files/GridStoreAdapter.js index 6814297036..744dff4b2d 100644 --- a/src/Adapters/Files/GridStoreAdapter.js +++ b/src/Adapters/Files/GridStoreAdapter.js @@ -21,7 +21,8 @@ export class GridStoreAdapter extends FilesAdapter { _connect() { if (!this._connectionPromise) { - this._connectionPromise = MongoClient.connect(this._databaseURI); + this._connectionPromise = MongoClient.connect(this._databaseURI) + .then((client) => client.db(client.s.options.dbName)); } return this._connectionPromise; } @@ -29,7 +30,7 @@ export class GridStoreAdapter extends FilesAdapter { // For a given config object, filename, and data, store a file // Returns a promise createFile(filename: string, data) { - return this._connect().then(database => { + return this._connect().then((database) => { const gridStore = new GridStore(database, filename, 'w'); return gridStore.open(); }).then(gridStore => { From 7348ff7e0c13d2f3b16ae7ee52b38591edfe8982 Mon Sep 17 00:00:00 2001 From: Florent Vilmart Date: Mon, 25 Dec 2017 16:59:59 -0500 Subject: [PATCH 4/6] Set Read preference to Primary when not specified, to match original implementation --- .../Storage/Mongo/MongoStorageAdapter.js | 47 ++++++++++--------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/src/Adapters/Storage/Mongo/MongoStorageAdapter.js b/src/Adapters/Storage/Mongo/MongoStorageAdapter.js index 1a4983801e..0eb9b51629 100644 --- a/src/Adapters/Storage/Mongo/MongoStorageAdapter.js +++ b/src/Adapters/Storage/Mongo/MongoStorageAdapter.js @@ -133,6 +133,7 @@ export class MongoStorageAdapter { database.on('close', () => { delete this.connectionPromise; }); + this.client = client; this.database = database; }).catch((err) => { delete this.connectionPromise; @@ -143,10 +144,10 @@ export class MongoStorageAdapter { } handleShutdown() { - if (!this.database) { + if (!this.client) { return; } - this.database.close(false); + this.client.close(false); } _adaptiveCollection(name: string) { @@ -511,26 +512,28 @@ export class MongoStorageAdapter { } _parseReadPreference(readPreference) { - if (readPreference) { - switch (readPreference) { - case 'PRIMARY': - readPreference = ReadPreference.PRIMARY; - break; - case 'PRIMARY_PREFERRED': - readPreference = ReadPreference.PRIMARY_PREFERRED; - break; - case 'SECONDARY': - readPreference = ReadPreference.SECONDARY; - break; - case 'SECONDARY_PREFERRED': - readPreference = ReadPreference.SECONDARY_PREFERRED; - break; - case 'NEAREST': - readPreference = ReadPreference.NEAREST; - break; - default: - throw new Parse.Error(Parse.Error.INVALID_QUERY, 'Not supported read preference.'); - } + switch (readPreference) { + case 'PRIMARY': + readPreference = ReadPreference.PRIMARY; + break; + case 'PRIMARY_PREFERRED': + readPreference = ReadPreference.PRIMARY_PREFERRED; + break; + case 'SECONDARY': + readPreference = ReadPreference.SECONDARY; + break; + case 'SECONDARY_PREFERRED': + readPreference = ReadPreference.SECONDARY_PREFERRED; + break; + case 'NEAREST': + readPreference = ReadPreference.NEAREST; + break; + case undefined: + // this is to match existing tests, which were failing as mongodb@3.0 don't report readPreference anymore + readPreference = ReadPreference.PRIMARY; + break; + default: + throw new Parse.Error(Parse.Error.INVALID_QUERY, 'Not supported read preference.'); } return readPreference; } From 267469e54a936772a92c8c96c3d6752b66d0b23c Mon Sep 17 00:00:00 2001 From: Florent Vilmart Date: Fri, 29 Dec 2017 13:52:40 -0500 Subject: [PATCH 5/6] Update MongoStorageAdapter.js --- src/Adapters/Storage/Mongo/MongoStorageAdapter.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Adapters/Storage/Mongo/MongoStorageAdapter.js b/src/Adapters/Storage/Mongo/MongoStorageAdapter.js index 0eb9b51629..1f2ce4fcc0 100644 --- a/src/Adapters/Storage/Mongo/MongoStorageAdapter.js +++ b/src/Adapters/Storage/Mongo/MongoStorageAdapter.js @@ -118,9 +118,8 @@ export class MongoStorageAdapter { this.connectionPromise = MongoClient.connect(encodedUri, this._mongoOptions).then(client => { // Starting mongoDB 3.0, the MongoClient.connect don't return a DB anymore but a client - // Fortunatelu, we can get back thr options + // Fortunately, we can get back the options and use them to select the proper DB. // https://github.com/mongodb/node-mongodb-native/blob/2c35d76f08574225b8db02d7bef687123e6bb018/lib/mongo_client.js#L885 - // And use them to create the DB. const options = client.s.options; const database = client.db(options.dbName); if (!database) { From f3a84348e467e2a18ff4264bd0d3e944d5716efc Mon Sep 17 00:00:00 2001 From: Florent Vilmart Date: Fri, 29 Dec 2017 13:53:07 -0500 Subject: [PATCH 6/6] Bumps to 3.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e4899cedfb..80c03f2e09 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "lodash": "4.17.4", "lru-cache": "4.1.1", "mime": "2.0.5", - "mongodb": "3.0.0", + "mongodb": "3.0.1", "multer": "1.3.0", "parse": "1.11.0", "pg-promise": "7.3.2",