From 7ed706a649cb2022b1b8adb67764a284e780835e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E5=AD=90=E6=99=8F?= Date: Sat, 18 Nov 2017 18:44:33 +0800 Subject: [PATCH 1/7] Add handleShutdown Test of MongoStorageAdapter. --- spec/MongoStorageAdapter.spec.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/spec/MongoStorageAdapter.spec.js b/spec/MongoStorageAdapter.spec.js index 78b2d0c1eb..e6e65e7b40 100644 --- a/spec/MongoStorageAdapter.spec.js +++ b/spec/MongoStorageAdapter.spec.js @@ -237,4 +237,23 @@ describe_only_db('mongo')('MongoStorageAdapter', () => { done(); }); }); + + it('handleShutdown, close connection', (done) => { + const adapter = new MongoStorageAdapter({ uri: databaseURI }); + + const schema = { + fields: { + array: { type: 'Array' }, + object: { type: 'Object' }, + date: { type: 'Date' }, + } + }; + + adapter.createObject('MyClass', schema, {}).then(() => { + expect(adapter.database.serverConfig.isConnected()).toEqual(true); + adapter.handleShutdown() + expect(adapter.database.serverConfig.isConnected()).toEqual(false); + done(); + }); + }); }); From 3b8bbf114d9e5689f345e36c597d246beb7c2c10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E5=AD=90=E6=99=8F?= Date: Sat, 18 Nov 2017 20:31:32 +0800 Subject: [PATCH 2/7] Add `handleShutdown` function in PostgresStorageAdapter, with it's test. --- spec/PostgresStorageAdapter.spec.js | 32 +++++++++++++++++++ .../Postgres/PostgresStorageAdapter.js | 7 ++++ 2 files changed, 39 insertions(+) create mode 100644 spec/PostgresStorageAdapter.spec.js diff --git a/spec/PostgresStorageAdapter.spec.js b/spec/PostgresStorageAdapter.spec.js new file mode 100644 index 0000000000..52a21594d5 --- /dev/null +++ b/spec/PostgresStorageAdapter.spec.js @@ -0,0 +1,32 @@ +const PostgresStorageAdapter = require('../src/Adapters/Storage/Postgres/PostgresStorageAdapter'); +const databaseURI = 'postgres://localhost:5432/parse_server_postgres_adapter_test_database'; + +describe_only_db('postgres')('PostgresStorageAdapter', () => { + beforeEach(done => { + const adapter = new PostgresStorageAdapter({ uri: databaseURI }) + .deleteAllClasses() + .then(() => { + adapter._pgp.end(); + }, fail) + .catch(done); + }); + + it('handleShutdown, close connection', (done) => { + const adapter = new PostgresStorageAdapter({ uri: databaseURI }); + const schema = { + fields: { + array: { type: 'Array' }, + object: { type: 'Object' }, + date: { type: 'Date' }, + } + }; + + adapter.handleShutdown(); + adapter.createObject('MyClass', schema, {}).then(() => { + done.fail('Should be error, becase connection is expected to destroy.'); + }).catch(err => { + expect(err.message).toEqual('Connection pool of the database object has been destroyed.') + done(); + }) + }); +}); diff --git a/src/Adapters/Storage/Postgres/PostgresStorageAdapter.js b/src/Adapters/Storage/Postgres/PostgresStorageAdapter.js index 4560ab9b2e..e3ef06b0ba 100644 --- a/src/Adapters/Storage/Postgres/PostgresStorageAdapter.js +++ b/src/Adapters/Storage/Postgres/PostgresStorageAdapter.js @@ -574,6 +574,13 @@ export class PostgresStorageAdapter { this._pgp = pgp; } + handleShutdown() { + if (!this._pgp) { + return + } + this._pgp.end(); + } + _ensureSchemaCollectionExists(conn) { conn = conn || this._client; return conn.none('CREATE TABLE IF NOT EXISTS "_SCHEMA" ( "className" varChar(120), "schema" jsonb, "isParseClass" bool, PRIMARY KEY ("className") )') From aad44e08c34e7159dcc4a4db3349d7bbbf37177c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E5=AD=90=E6=99=8F?= Date: Sat, 18 Nov 2017 23:11:50 +0800 Subject: [PATCH 3/7] Replace the _pgp to _client --- src/Adapters/Storage/Postgres/PostgresStorageAdapter.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Adapters/Storage/Postgres/PostgresStorageAdapter.js b/src/Adapters/Storage/Postgres/PostgresStorageAdapter.js index e3ef06b0ba..cb4574f675 100644 --- a/src/Adapters/Storage/Postgres/PostgresStorageAdapter.js +++ b/src/Adapters/Storage/Postgres/PostgresStorageAdapter.js @@ -575,10 +575,10 @@ export class PostgresStorageAdapter { } handleShutdown() { - if (!this._pgp) { + if (!this._client) { return } - this._pgp.end(); + this._client.$pool.end(); } _ensureSchemaCollectionExists(conn) { From 61b9227337057f6f1c84b2552d09a819d42eecc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E5=AD=90=E6=99=8F?= Date: Sun, 19 Nov 2017 00:03:14 +0800 Subject: [PATCH 4/7] Use `adapter._client.$pool.ending` to ckeck is ending --- spec/PostgresStorageAdapter.spec.js | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/spec/PostgresStorageAdapter.spec.js b/spec/PostgresStorageAdapter.spec.js index 52a21594d5..18e7c83ad7 100644 --- a/spec/PostgresStorageAdapter.spec.js +++ b/spec/PostgresStorageAdapter.spec.js @@ -6,27 +6,17 @@ describe_only_db('postgres')('PostgresStorageAdapter', () => { const adapter = new PostgresStorageAdapter({ uri: databaseURI }) .deleteAllClasses() .then(() => { - adapter._pgp.end(); + adapter.handleShutdown(); }, fail) .catch(done); }); it('handleShutdown, close connection', (done) => { const adapter = new PostgresStorageAdapter({ uri: databaseURI }); - const schema = { - fields: { - array: { type: 'Array' }, - object: { type: 'Object' }, - date: { type: 'Date' }, - } - }; + expect(adapter._client.$pool.ending).toEqual(false); adapter.handleShutdown(); - adapter.createObject('MyClass', schema, {}).then(() => { - done.fail('Should be error, becase connection is expected to destroy.'); - }).catch(err => { - expect(err.message).toEqual('Connection pool of the database object has been destroyed.') - done(); - }) + expect(adapter._client.$pool.ending).toEqual(true); + done(); }); }); From 914c932849630382371ba5aeac6bbb158f8a072c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E5=AD=90=E6=99=8F?= Date: Sun, 19 Nov 2017 00:03:49 +0800 Subject: [PATCH 5/7] Add `handleShutdown()` in ParseServer.spec.js --- spec/ParseServer.spec.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/spec/ParseServer.spec.js b/spec/ParseServer.spec.js index bc78106e26..ebc58a0afc 100644 --- a/spec/ParseServer.spec.js +++ b/spec/ParseServer.spec.js @@ -33,4 +33,29 @@ describe('Server Url Checks', () => { done(); }); }); + + it('handleShutdown, close connection', (done) => { + var MongoStorageAdapter = require('../src/Adapters/Storage/Mongo/MongoStorageAdapter'); + const PostgresStorageAdapter = require('../src/Adapters/Storage/Postgres/PostgresStorageAdapter'); + const mongoURI = 'mongodb://localhost:27017/parseServerMongoAdapterTestDatabase'; + const postgresURI = 'postgres://localhost:5432/parse_server_postgres_adapter_test_database'; + let databaseAdapter; + if (process.env.PARSE_SERVER_TEST_DB === 'postgres') { + databaseAdapter = new PostgresStorageAdapter({ + uri: process.env.PARSE_SERVER_TEST_DATABASE_URI || postgresURI, + collectionPrefix: 'test_', + }); + } else { + databaseAdapter = new MongoStorageAdapter({ + uri: mongoURI, + collectionPrefix: 'test_', + }); + } + const newConfiguration = Object.assign({}, defaultConfiguration, { databaseAdapter }); + + const parseServer = ParseServer.start(newConfiguration, () => { + parseServer.handleShutdown(); + done(); + }); + }); }); From 953c84b5045e5aa00a572da2896827b5e3487fb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E5=AD=90=E6=99=8F?= Date: Sun, 19 Nov 2017 00:18:02 +0800 Subject: [PATCH 6/7] Trigger From c1d9f77ca1270d2f0ee7d4c7b9cfe76f83108c0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E5=AD=90=E6=99=8F?= Date: Sun, 19 Nov 2017 00:40:50 +0800 Subject: [PATCH 7/7] Set Server to Default --- spec/ParseServer.spec.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/spec/ParseServer.spec.js b/spec/ParseServer.spec.js index ebc58a0afc..841950d076 100644 --- a/spec/ParseServer.spec.js +++ b/spec/ParseServer.spec.js @@ -52,10 +52,16 @@ describe('Server Url Checks', () => { }); } const newConfiguration = Object.assign({}, defaultConfiguration, { databaseAdapter }); - const parseServer = ParseServer.start(newConfiguration, () => { parseServer.handleShutdown(); - done(); + parseServer.server.close((err) => { + if (err) { + done.fail('Close Server Error') + } + reconfigureServer({}).then(() => { + done(); + }); + }); }); }); });