From 49a71e4e01a8dbdb5c7151d9467ad0c164470cb6 Mon Sep 17 00:00:00 2001 From: David Glasser Date: Mon, 29 Mar 2021 12:16:03 -0700 Subject: [PATCH 1/4] apollo-server-core: Fix compatibility with older integrations The implementation of the backwards-compatibility method `willStart()` in v2.22.0 and v2.22.1 calls `_start`, which is illegal if the server is already started. But the server could have already been started for various reasons; specifically, for serverless frameworks the constructor would have called it (because that code is in `apollo-server-core` itself which is running the newer code). There are various ways to fix this, but the simplest way is just to make `willStart` into an unnecessarily async alias for `ensureStarting`. While the semantics aren't exactly identical, the overall effect is the same (because we now check that the server has started when operations actually run via `ensureStarted`, whereas before it was important for the integration itself to await the `willStart` promise). --- CHANGELOG.md | 2 + .../apollo-server-core/src/ApolloServer.ts | 39 +++++++++---------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5eb817d5a02..cb39d975830 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,9 @@ The version headers in this history reflect the versions of Apollo Server itself > The changes noted within this `vNEXT` section have not been released yet. New PRs and commits which introduce changes should include an entry in this `vNEXT` section as part of their development. With few exceptions, the format of the entry should follow convention (i.e., prefix with package name, use markdown `backtick formatting` for package names and code, suffix with a link to the change-set à la `[PR #YYY](https://link/pull/YYY)`, etc.). When a release is being prepared, a new header will be (manually) created below and the appropriate changes within that release will be moved into the new section. +## v2.22.2 +- `apollo-server-core`: Fix a regression in v2.22.0 where combining `apollo-server-core` v2.22 with an older version of an integration package could lead to startup errors like `called start() with surprising state invoking serverWillStart`. The fix involves changing the semantics of the protected `willStart` method (which is left in only for backwards compatibility). [Issue #5065](https://github.com/apollographql/apollo-server/issues/5065) [Issue #5066](https://github.com/apollographql/apollo-server/issues/5066) ## v2.22.1 - `apollo-server-core`: Fix a regression in v2.22.0 where startup errors could be thrown as part of the GraphQL response instead of redacted in one edge case. [PR #5064](https://github.com/apollographql/apollo-server/pull/5064) diff --git a/packages/apollo-server-core/src/ApolloServer.ts b/packages/apollo-server-core/src/ApolloServer.ts index e30119d9725..30a13253d56 100644 --- a/packages/apollo-server-core/src/ApolloServer.ts +++ b/packages/apollo-server-core/src/ApolloServer.ts @@ -583,28 +583,27 @@ export class ApolloServerBase { /** * @deprecated This deprecated method is provided for backwards compatibility - * with the pre-v2.22 API. It could be used for purposes similar to `start` or - * `ensureStarting`, and was used by integrations. It had odd error handling - * semantics, in that it would ignore any error that came from loading the - * schema, but would throw errors that came from `serverWillStart`. Anyone - * calling it should call `start` or `ensureStarting` instead. + * with the pre-v2.22 API. It was sort of a combination of the v2.22 APIs + * `ensureStarting` and `start`; it was generally called "in the background" + * by integrations to kick off the start process (like `ensureStarting`) and + * then the Promise it returns was awaited later before running operations + * (sort of like `start`). It had odd error handling semantics, in that it + * would ignore any error that came from loading the schema, but would throw + * errors that came from `serverWillStart`. + * + * We keep it around for backwards-compatibility with pre-v2.22 integrations, + * though we just make it call `ensureStarting`. This does mean that the part + * of the integration which awaits its result doesn't actually await anything + * interesting (despite being async, the method itself doesn't await + * anything), but since executing operations now calls `ensureStarted`, that's + * OK. (In v2.22.0 and v2.22.1 we tried to mimic the old `willStart` behavior + * more closely which led to a bug where `start` could be invoked multiple + * times. This approach is simpler.) + * + * Anyone calling this method should call `start` or `ensureStarting` instead. */ protected async willStart() { - try { - this._start(); - } catch (e) { - if ( - this.state.phase === 'failed to start' && - this.state.error === e && - !this.state.loadedSchema - ) { - // For backwards compatibility with the odd semantics of the old - // willStart method, don't throw if the error occurred in loading the - // schema. - return; - } - throw e; - } + this.ensureStarting(); } // Part of the backwards-compatibility behavior described above `start` to From 47c494e96e34588d7ca9f3b1aee73204761de46a Mon Sep 17 00:00:00 2001 From: David Glasser Date: Mon, 29 Mar 2021 12:20:55 -0700 Subject: [PATCH 2/4] Reference PR in changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cb39d975830..6eac10a4470 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,7 @@ The version headers in this history reflect the versions of Apollo Server itself ## v2.22.2 -- `apollo-server-core`: Fix a regression in v2.22.0 where combining `apollo-server-core` v2.22 with an older version of an integration package could lead to startup errors like `called start() with surprising state invoking serverWillStart`. The fix involves changing the semantics of the protected `willStart` method (which is left in only for backwards compatibility). [Issue #5065](https://github.com/apollographql/apollo-server/issues/5065) [Issue #5066](https://github.com/apollographql/apollo-server/issues/5066) +- `apollo-server-core`: Fix a regression in v2.22.0 where combining `apollo-server-core` v2.22 with an older version of an integration package could lead to startup errors like `called start() with surprising state invoking serverWillStart`. The fix involves changing the semantics of the protected `willStart` method (which is left in only for backwards compatibility). [Issue #5065](https://github.com/apollographql/apollo-server/issues/5065) [Issue #5066](https://github.com/apollographql/apollo-server/issues/5066) [PR #5073](https://github.com/apollographql/apollo-server/pull/5073) ## v2.22.1 - `apollo-server-core`: Fix a regression in v2.22.0 where startup errors could be thrown as part of the GraphQL response instead of redacted in one edge case. [PR #5064](https://github.com/apollographql/apollo-server/pull/5064) From f4f14d3d6f7a278a21c334b39644199d2c919202 Mon Sep 17 00:00:00 2001 From: David Glasser Date: Mon, 29 Mar 2021 12:21:14 -0700 Subject: [PATCH 3/4] Release - apollo-server-azure-functions@2.22.2-alpha.0 - apollo-server-cloud-functions@2.22.2-alpha.0 - apollo-server-cloudflare@2.22.2-alpha.0 - apollo-server-core@2.22.2-alpha.0 - apollo-server-express@2.22.2-alpha.0 - apollo-server-fastify@2.22.2-alpha.0 - apollo-server-hapi@2.22.2-alpha.0 - apollo-server-integration-testsuite@2.22.2-alpha.0 - apollo-server-koa@2.22.2-alpha.0 - apollo-server-lambda@2.22.2-alpha.0 - apollo-server-micro@2.22.2-alpha.0 - apollo-server-testing@2.22.2-alpha.0 - apollo-server@2.22.2-alpha.0 --- packages/apollo-server-azure-functions/package.json | 2 +- packages/apollo-server-cloud-functions/package.json | 2 +- packages/apollo-server-cloudflare/package.json | 2 +- packages/apollo-server-core/package.json | 2 +- packages/apollo-server-express/package.json | 2 +- packages/apollo-server-fastify/package.json | 2 +- packages/apollo-server-hapi/package.json | 2 +- packages/apollo-server-integration-testsuite/package.json | 2 +- packages/apollo-server-koa/package.json | 2 +- packages/apollo-server-lambda/package.json | 2 +- packages/apollo-server-micro/package.json | 2 +- packages/apollo-server-testing/package.json | 2 +- packages/apollo-server/package.json | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/apollo-server-azure-functions/package.json b/packages/apollo-server-azure-functions/package.json index fb50fa9cc2f..42648452b5e 100644 --- a/packages/apollo-server-azure-functions/package.json +++ b/packages/apollo-server-azure-functions/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-azure-functions", - "version": "2.22.1", + "version": "2.22.2-alpha.0", "description": "Production-ready Node.js GraphQL server for Azure Functions", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-cloud-functions/package.json b/packages/apollo-server-cloud-functions/package.json index 47e5567b398..221a1fb376e 100644 --- a/packages/apollo-server-cloud-functions/package.json +++ b/packages/apollo-server-cloud-functions/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cloud-functions", - "version": "2.22.1", + "version": "2.22.2-alpha.0", "description": "Production-ready Node.js GraphQL server for Google Cloud Functions", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-cloudflare/package.json b/packages/apollo-server-cloudflare/package.json index 6b28cf9491a..2face5fed8f 100644 --- a/packages/apollo-server-cloudflare/package.json +++ b/packages/apollo-server-cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cloudflare", - "version": "2.22.1", + "version": "2.22.2-alpha.0", "description": "Production-ready Node.js GraphQL server for Cloudflare workers", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-core/package.json b/packages/apollo-server-core/package.json index 47d09680487..f6749610df3 100644 --- a/packages/apollo-server-core/package.json +++ b/packages/apollo-server-core/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-core", - "version": "2.22.1", + "version": "2.22.2-alpha.0", "description": "Core engine for Apollo GraphQL server", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-express/package.json b/packages/apollo-server-express/package.json index bf7dc864b7f..eec1528c10f 100644 --- a/packages/apollo-server-express/package.json +++ b/packages/apollo-server-express/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-express", - "version": "2.22.1", + "version": "2.22.2-alpha.0", "description": "Production-ready Node.js GraphQL server for Express and Connect", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-fastify/package.json b/packages/apollo-server-fastify/package.json index b32de676d9c..b83089e5a57 100644 --- a/packages/apollo-server-fastify/package.json +++ b/packages/apollo-server-fastify/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-fastify", - "version": "2.22.1", + "version": "2.22.2-alpha.0", "description": "Production-ready Node.js GraphQL server for Fastify", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-hapi/package.json b/packages/apollo-server-hapi/package.json index 13267933fe8..7c1e69d81fc 100644 --- a/packages/apollo-server-hapi/package.json +++ b/packages/apollo-server-hapi/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-hapi", - "version": "2.22.1", + "version": "2.22.2-alpha.0", "description": "Production-ready Node.js GraphQL server for Hapi", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-integration-testsuite/package.json b/packages/apollo-server-integration-testsuite/package.json index 664142d89f6..310e6f06add 100644 --- a/packages/apollo-server-integration-testsuite/package.json +++ b/packages/apollo-server-integration-testsuite/package.json @@ -1,7 +1,7 @@ { "name": "apollo-server-integration-testsuite", "private": true, - "version": "2.22.1", + "version": "2.22.2-alpha.0", "description": "Apollo Server Integrations testsuite", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-koa/package.json b/packages/apollo-server-koa/package.json index 2a11aa23ea2..0fd07ab3a1e 100644 --- a/packages/apollo-server-koa/package.json +++ b/packages/apollo-server-koa/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-koa", - "version": "2.22.1", + "version": "2.22.2-alpha.0", "description": "Production-ready Node.js GraphQL server for Koa", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-lambda/package.json b/packages/apollo-server-lambda/package.json index 6d7d58ce2e6..751e68af515 100644 --- a/packages/apollo-server-lambda/package.json +++ b/packages/apollo-server-lambda/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-lambda", - "version": "2.22.1", + "version": "2.22.2-alpha.0", "description": "Production-ready Node.js GraphQL server for AWS Lambda", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-micro/package.json b/packages/apollo-server-micro/package.json index 5c96b833b86..eef2bd1a9c1 100644 --- a/packages/apollo-server-micro/package.json +++ b/packages/apollo-server-micro/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-micro", - "version": "2.22.1", + "version": "2.22.2-alpha.0", "description": "Production-ready Node.js GraphQL server for Micro", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-testing/package.json b/packages/apollo-server-testing/package.json index ff13d5d25fc..5d33a272302 100644 --- a/packages/apollo-server-testing/package.json +++ b/packages/apollo-server-testing/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-testing", - "version": "2.22.1", + "version": "2.22.2-alpha.0", "description": "Test utils for apollo-server", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server/package.json b/packages/apollo-server/package.json index adfe43da974..96b97751171 100644 --- a/packages/apollo-server/package.json +++ b/packages/apollo-server/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server", - "version": "2.22.1", + "version": "2.22.2-alpha.0", "description": "Production ready GraphQL Server", "author": "Apollo ", "main": "dist/index.js", From 9562af498407e86923d96902683bb5285b849800 Mon Sep 17 00:00:00 2001 From: David Glasser Date: Mon, 29 Mar 2021 12:31:47 -0700 Subject: [PATCH 4/4] Release - apollo-server-azure-functions@2.22.2 - apollo-server-cloud-functions@2.22.2 - apollo-server-cloudflare@2.22.2 - apollo-server-core@2.22.2 - apollo-server-express@2.22.2 - apollo-server-fastify@2.22.2 - apollo-server-hapi@2.22.2 - apollo-server-integration-testsuite@2.22.2 - apollo-server-koa@2.22.2 - apollo-server-lambda@2.22.2 - apollo-server-micro@2.22.2 - apollo-server-testing@2.22.2 - apollo-server@2.22.2 --- packages/apollo-server-azure-functions/package.json | 2 +- packages/apollo-server-cloud-functions/package.json | 2 +- packages/apollo-server-cloudflare/package.json | 2 +- packages/apollo-server-core/package.json | 2 +- packages/apollo-server-express/package.json | 2 +- packages/apollo-server-fastify/package.json | 2 +- packages/apollo-server-hapi/package.json | 2 +- packages/apollo-server-integration-testsuite/package.json | 2 +- packages/apollo-server-koa/package.json | 2 +- packages/apollo-server-lambda/package.json | 2 +- packages/apollo-server-micro/package.json | 2 +- packages/apollo-server-testing/package.json | 2 +- packages/apollo-server/package.json | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/apollo-server-azure-functions/package.json b/packages/apollo-server-azure-functions/package.json index 42648452b5e..bffca771e5a 100644 --- a/packages/apollo-server-azure-functions/package.json +++ b/packages/apollo-server-azure-functions/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-azure-functions", - "version": "2.22.2-alpha.0", + "version": "2.22.2", "description": "Production-ready Node.js GraphQL server for Azure Functions", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-cloud-functions/package.json b/packages/apollo-server-cloud-functions/package.json index 221a1fb376e..0053925702b 100644 --- a/packages/apollo-server-cloud-functions/package.json +++ b/packages/apollo-server-cloud-functions/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cloud-functions", - "version": "2.22.2-alpha.0", + "version": "2.22.2", "description": "Production-ready Node.js GraphQL server for Google Cloud Functions", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-cloudflare/package.json b/packages/apollo-server-cloudflare/package.json index 2face5fed8f..baf4914cb4c 100644 --- a/packages/apollo-server-cloudflare/package.json +++ b/packages/apollo-server-cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-cloudflare", - "version": "2.22.2-alpha.0", + "version": "2.22.2", "description": "Production-ready Node.js GraphQL server for Cloudflare workers", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-core/package.json b/packages/apollo-server-core/package.json index f6749610df3..ecca96d48ba 100644 --- a/packages/apollo-server-core/package.json +++ b/packages/apollo-server-core/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-core", - "version": "2.22.2-alpha.0", + "version": "2.22.2", "description": "Core engine for Apollo GraphQL server", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-express/package.json b/packages/apollo-server-express/package.json index eec1528c10f..b4a7e02b88d 100644 --- a/packages/apollo-server-express/package.json +++ b/packages/apollo-server-express/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-express", - "version": "2.22.2-alpha.0", + "version": "2.22.2", "description": "Production-ready Node.js GraphQL server for Express and Connect", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-fastify/package.json b/packages/apollo-server-fastify/package.json index b83089e5a57..badc4eea6d9 100644 --- a/packages/apollo-server-fastify/package.json +++ b/packages/apollo-server-fastify/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-fastify", - "version": "2.22.2-alpha.0", + "version": "2.22.2", "description": "Production-ready Node.js GraphQL server for Fastify", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-hapi/package.json b/packages/apollo-server-hapi/package.json index 7c1e69d81fc..6940d0538cb 100644 --- a/packages/apollo-server-hapi/package.json +++ b/packages/apollo-server-hapi/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-hapi", - "version": "2.22.2-alpha.0", + "version": "2.22.2", "description": "Production-ready Node.js GraphQL server for Hapi", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-integration-testsuite/package.json b/packages/apollo-server-integration-testsuite/package.json index 310e6f06add..8a6c7de0436 100644 --- a/packages/apollo-server-integration-testsuite/package.json +++ b/packages/apollo-server-integration-testsuite/package.json @@ -1,7 +1,7 @@ { "name": "apollo-server-integration-testsuite", "private": true, - "version": "2.22.2-alpha.0", + "version": "2.22.2", "description": "Apollo Server Integrations testsuite", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-koa/package.json b/packages/apollo-server-koa/package.json index 0fd07ab3a1e..b00f112b0b2 100644 --- a/packages/apollo-server-koa/package.json +++ b/packages/apollo-server-koa/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-koa", - "version": "2.22.2-alpha.0", + "version": "2.22.2", "description": "Production-ready Node.js GraphQL server for Koa", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-lambda/package.json b/packages/apollo-server-lambda/package.json index 751e68af515..c7a5c7be2f8 100644 --- a/packages/apollo-server-lambda/package.json +++ b/packages/apollo-server-lambda/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-lambda", - "version": "2.22.2-alpha.0", + "version": "2.22.2", "description": "Production-ready Node.js GraphQL server for AWS Lambda", "keywords": [ "GraphQL", diff --git a/packages/apollo-server-micro/package.json b/packages/apollo-server-micro/package.json index eef2bd1a9c1..8da1d17aaae 100644 --- a/packages/apollo-server-micro/package.json +++ b/packages/apollo-server-micro/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-micro", - "version": "2.22.2-alpha.0", + "version": "2.22.2", "description": "Production-ready Node.js GraphQL server for Micro", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server-testing/package.json b/packages/apollo-server-testing/package.json index 5d33a272302..0b2801314fc 100644 --- a/packages/apollo-server-testing/package.json +++ b/packages/apollo-server-testing/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server-testing", - "version": "2.22.2-alpha.0", + "version": "2.22.2", "description": "Test utils for apollo-server", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/apollo-server/package.json b/packages/apollo-server/package.json index 96b97751171..0dcd2028405 100644 --- a/packages/apollo-server/package.json +++ b/packages/apollo-server/package.json @@ -1,6 +1,6 @@ { "name": "apollo-server", - "version": "2.22.2-alpha.0", + "version": "2.22.2", "description": "Production ready GraphQL Server", "author": "Apollo ", "main": "dist/index.js",