diff --git a/src/Adapters/Storage/Mongo/MongoStorageAdapter.js b/src/Adapters/Storage/Mongo/MongoStorageAdapter.js index 0d185ed58e..267e9f7a59 100644 --- a/src/Adapters/Storage/Mongo/MongoStorageAdapter.js +++ b/src/Adapters/Storage/Mongo/MongoStorageAdapter.js @@ -97,17 +97,6 @@ export class MongoStorageAdapter { // MaxTimeMS is not a global MongoDB client option, it is applied per operation. this._maxTimeMS = mongoOptions.maxTimeMS; - process.on('SIGTERM', this.handleShutdown(this)); - process.on('SIGINT', this.handleShutdown(this)); - } - - handleShutdown(storageAdapter) { - return () => { - if (!storageAdapter.database) { - return; - } - storageAdapter.database.close(false); - } } connect() { @@ -139,6 +128,13 @@ export class MongoStorageAdapter { return this.connectionPromise; } + handleShutdown() { + if (!this.database) { + return; + } + this.database.close(false); + } + _adaptiveCollection(name: string) { return this.connect() .then(() => this.database.collection(this._collectionPrefix + name)) diff --git a/src/ParseServer.js b/src/ParseServer.js index 79c388bfee..bdb0c07f8a 100644 --- a/src/ParseServer.js +++ b/src/ParseServer.js @@ -313,6 +313,13 @@ class ParseServer { return ParseServer.app(this.config); } + handleShutdown() { + const { adapter } = this.config.databaseController; + if (adapter && typeof adapter.handleShutdown === 'function') { + adapter.handleShutdown(); + } + } + static app({maxUploadSize = '20mb', appId}) { // This app serves the Parse API directly. // It's the equivalent of https://api.parse.com/1 in the hosted Parse API. diff --git a/src/cli/parse-server.js b/src/cli/parse-server.js index 780caffafd..1a83953b07 100755 --- a/src/cli/parse-server.js +++ b/src/cli/parse-server.js @@ -1,6 +1,6 @@ /* eslint-disable no-console */ import express from 'express'; -import { ParseServer } from '../index'; +import ParseServer from '../index'; import definitions from './definitions/parse-server'; import cluster from 'cluster'; import os from 'os'; @@ -43,9 +43,9 @@ function startServer(options, callback) { app.use(middleware); } - const api = new ParseServer(options); + const parseServer = new ParseServer(options); const sockets = {}; - app.use(options.mountPath, api); + app.use(options.mountPath, parseServer.app); const server = app.listen(options.port, options.host, callback); server.on('connection', initializeConnections); @@ -85,6 +85,7 @@ function startServer(options, callback) { console.log('Termination signal received. Shutting down.'); destroyAliveConnections(); server.close(); + parseServer.handleShutdown(); }; process.on('SIGTERM', handleShutdown); process.on('SIGINT', handleShutdown);