Skip to content

Commit

Permalink
Enable direct access by default (#6636)
Browse files Browse the repository at this point in the history
* enabled direct access by default

* removed obsolete direct access option test case

* quick fix test

* Set RESTController during tests

* Properly handle RESTController

* Documentation

* revert changes

* rerun tests

* remove extra parse instance

* Revert "remove extra parse instance"

This reverts commit 21422f4.

* Ensure restcontroller is set

* Fix test

* improved option docs

* renamed direct access env var

* added deprecations to README

* added deprecation definition

* fixed docs typo

* improve promise rejection warning test

* added renaming of env var to deprecation warning

Co-authored-by: Diamond Lewis <[email protected]>
  • Loading branch information
mtrezza and dplewis authored Apr 5, 2021
1 parent 70e1347 commit 7042552
Show file tree
Hide file tree
Showing 10 changed files with 39 additions and 11 deletions.
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ The full documentation for Parse Server is available in the [wiki](https://githu
- [Reserved Keys](#reserved-keys)
- [Parameters](#parameters-1)
- [Logging](#logging)
- [Deprecations](#deprecations)
- [Live Query](#live-query)
- [GraphQL](#graphql)
- [Running](#running)
Expand Down Expand Up @@ -754,6 +755,14 @@ Logs are also viewable in Parse Dashboard.
**Want new line delimited JSON error logs (for consumption by CloudWatch, Google Cloud Logging, etc)?** Pass the `JSON_LOGS` environment variable when starting `parse-server`. Usage :- `JSON_LOGS='1' parse-server --appId APPLICATION_ID --masterKey MASTER_KEY`
# Deprecations
The following Parse Server options and APIs are deprecated and will change in future versions. The "Deprecation" version indicates from when an item has been deprecated with runtime warnings. The "End-of-Life" version indicates when the deprecation period has ended and the breaking change came into effect. In rare cases, deprecations may be revoked without any breaking change coming into effect.
| Type | Item | Deprecation | End-of-Life | Details |
|--------|----------------|-------------|-------------|-----------------------------------------|
| Option | `directAccess` | `5.0.0` | tbd | Default changes from `false` to `true`. |
# Live Query
Live queries are meant to be used in real-time reactive applications, where just using the traditional query paradigm could cause several problems, like increased response time and high network and server usage. Live queries should be used in cases where you need to continuously update a page with fresh data coming from the database, which often happens in (but is not limited to) online games, messaging clients and shared to-do lists.
Expand Down
2 changes: 1 addition & 1 deletion spec/ParseServer.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ describe('Server Url Checks', () => {
});
parseServerProcess.on('close', async code => {
expect(code).toEqual(1);
expect(stdout).toBeUndefined();
expect(stdout).not.toContain('UnhandledPromiseRejectionWarning');
expect(stderr).toContain('MongoServerSelectionError');
await reconfigureServer();
done();
Expand Down
3 changes: 3 additions & 0 deletions spec/helper.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ const PostgresStorageAdapter = require('../lib/Adapters/Storage/Postgres/Postgre
.default;
const MongoStorageAdapter = require('../lib/Adapters/Storage/Mongo/MongoStorageAdapter').default;
const RedisCacheAdapter = require('../lib/Adapters/Cache/RedisCacheAdapter').default;
const RESTController = require('parse/lib/node/RESTController');
const { VolatileClassesSchemas } = require('../lib/Controllers/SchemaController');

const mongoURI = 'mongodb://localhost:27017/parseServerMongoAdapterTestDatabase';
Expand Down Expand Up @@ -95,6 +96,7 @@ const defaultConfiguration = {
masterKey: 'test',
readOnlyMasterKey: 'read-only-test',
fileKey: 'test',
directAccess: false,
silent,
logLevel,
fileUpload: {
Expand Down Expand Up @@ -156,6 +158,7 @@ const reconfigureServer = (changedConfiguration = {}) => {
if (error) {
reject(error);
} else {
Parse.CoreManager.setRESTController(RESTController);
resolve(parseServer);
}
},
Expand Down
2 changes: 1 addition & 1 deletion spec/index.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -512,7 +512,7 @@ describe('server', () => {
await reconfigureServer({
directAccess: true,
});
expect(spy).toHaveBeenCalledTimes(1);
expect(spy).toHaveBeenCalledTimes(2);
Parse.CoreManager.setRESTController(RESTController);
});

Expand Down
15 changes: 13 additions & 2 deletions src/Deprecator/Deprecations.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,18 @@
* or set to an empty string if the current key will be removed without replacement.
* - `changeNewDefault`: Set the new default value if the key's default value
* will change in a future version.
* - `solution`: The instruction to resolve this deprecation warning. Optional. This
* instruction must not include the deprecation warning which is auto-generated.
* It should only contain additional instruction regarding the deprecation if
* necessary.
*
* If there are no deprecations this must return an empty array anyway.
* If there are no deprecations, this must return an empty array.
*/
module.exports = [];
module.exports = [
{
optionKey: 'directAccess',
changeNewDefault: 'true',
solution:
"Additionally, the environment variable 'PARSE_SERVER_ENABLE_EXPERIMENTAL_DIRECT_ACCESS' will be deprecated and renamed to 'PARSE_SERVER_DIRECT_ACCESS' in a future version; it is currently possible to use either one.",
},
];
3 changes: 2 additions & 1 deletion src/Deprecator/Deprecator.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,13 @@ class Deprecator {
// Scan for deprecations
for (const deprecation of Deprecator._getDeprecations()) {
// Get deprecation properties
const solution = deprecation.solution;
const optionKey = deprecation.optionKey;
const changeNewDefault = deprecation.changeNewDefault;

// If default will change, only throw a warning if option is not set
if (changeNewDefault != null && options[optionKey] == null) {
Deprecator._log({ optionKey, changeNewDefault });
Deprecator._log({ optionKey, changeNewDefault, solution });
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/Options/Definitions.js
Original file line number Diff line number Diff line change
Expand Up @@ -110,9 +110,9 @@ module.exports.ParseServerOptions = {
default: 'mongodb://localhost:27017/parse',
},
directAccess: {
env: 'PARSE_SERVER_ENABLE_EXPERIMENTAL_DIRECT_ACCESS',
env: 'PARSE_SERVER_DIRECT_ACCESS',
help:
'Replace HTTP Interface when using JS SDK in current node runtime, defaults to false. Caution, this is an experimental feature that may not be appropriate for production.',
'Set to `true` if Parse requests within the same Node.js environment as Parse Server should be routed to Parse Server directly instead of via the HTTP interface. Default is `false`.<br><br>If set to `false` then Parse requests within the same Node.js environment as Parse Server are executed as HTTP requests sent to Parse Server via the `serverURL`. For example, a `Parse.Query` in Cloud Code is calling Parse Server via a HTTP request. The server is essentially making a HTTP request to itself, unnecessarily using network resources such as network ports.<br><br>\u26A0\uFE0F In environments where multiple Parse Server instances run behind a load balancer and Parse requests within the current Node.js environment should be routed via the load balancer and distributed as HTTP requests among all instances via the `serverURL`, this should be set to `false`.',
action: parsers.booleanParser,
default: false,
},
Expand Down
2 changes: 1 addition & 1 deletion src/Options/docs.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
* @property {Adapter<StorageAdapter>} databaseAdapter Adapter module for the database
* @property {DatabaseOptions} databaseOptions Options to pass to the database client
* @property {String} databaseURI The full URI to your database. Supported databases are mongodb or postgres.
* @property {Boolean} directAccess Replace HTTP Interface when using JS SDK in current node runtime, defaults to false. Caution, this is an experimental feature that may not be appropriate for production.
* @property {Boolean} directAccess Set to `true` if Parse requests within the same Node.js environment as Parse Server should be routed to Parse Server directly instead of via the HTTP interface. Default is `false`.<br><br>If set to `false` then Parse requests within the same Node.js environment as Parse Server are executed as HTTP requests sent to Parse Server via the `serverURL`. For example, a `Parse.Query` in Cloud Code is calling Parse Server via a HTTP request. The server is essentially making a HTTP request to itself, unnecessarily using network resources such as network ports.<br><br>⚠️ In environments where multiple Parse Server instances run behind a load balancer and Parse requests within the current Node.js environment should be routed via the load balancer and distributed as HTTP requests among all instances via the `serverURL`, this should be set to `false`.
* @property {String} dotNetKey Key for Unity and .Net SDK
* @property {Adapter<MailAdapter>} emailAdapter Adapter module for email sending
* @property {Boolean} emailVerifyTokenReuseIfValid an existing email verify token should be reused when resend verification email is requested
Expand Down
7 changes: 5 additions & 2 deletions src/Options/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -165,8 +165,11 @@ export interface ParseServerOptions {
/* Sets the maximum size for the in memory cache, defaults to 10000
:DEFAULT: 10000 */
cacheMaxSize: ?number;
/* Replace HTTP Interface when using JS SDK in current node runtime, defaults to false. Caution, this is an experimental feature that may not be appropriate for production.
:ENV: PARSE_SERVER_ENABLE_EXPERIMENTAL_DIRECT_ACCESS
/* Set to `true` if Parse requests within the same Node.js environment as Parse Server should be routed to Parse Server directly instead of via the HTTP interface. Default is `false`.
<br><br>
If set to `false` then Parse requests within the same Node.js environment as Parse Server are executed as HTTP requests sent to Parse Server via the `serverURL`. For example, a `Parse.Query` in Cloud Code is calling Parse Server via a HTTP request. The server is essentially making a HTTP request to itself, unnecessarily using network resources such as network ports.
<br><br>
⚠️ In environments where multiple Parse Server instances run behind a load balancer and Parse requests within the current Node.js environment should be routed via the load balancer and distributed as HTTP requests among all instances via the `serverURL`, this should be set to `false`.
:DEFAULT: false */
directAccess: ?boolean;
/* Enables the default express error handler for all errors
Expand Down
3 changes: 2 additions & 1 deletion src/ParseServerRESTController.js
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ function ParseServerRESTController(applicationId, router) {
applicationId: applicationId,
sessionToken: options.sessionToken,
installationId: options.installationId,
context: options.context || {}, // Add context
context: options.context || {},
},
query,
};
Expand Down Expand Up @@ -155,6 +155,7 @@ function ParseServerRESTController(applicationId, router) {
return {
request: handleRequest,
ajax: RESTController.ajax,
handleError: RESTController.handleError,
};
}

Expand Down

0 comments on commit 7042552

Please sign in to comment.