diff --git a/.changesets/config_header_read_timeout.md b/.changesets/config_header_read_timeout.md deleted file mode 100644 index fa006ae661..0000000000 --- a/.changesets/config_header_read_timeout.md +++ /dev/null @@ -1,13 +0,0 @@ -### Add configurable server header read timeout ([PR #7262](https://github.com/apollographql/router/pull/7262)) - -This change exposes the server's header read timeout as the `server.http.header_read_timeout` configuration option. - -By default, the `server.http.header_read_timeout` is set to previously hard-coded 10 seconds. A longer timeout can be configured using the `server.http.header_read_timeout` option. - -```yaml title="router.yaml" -server: - http: - header_read_timeout: 30s -``` - -By [@gwardwell ](https://github.com/gwardwell) in https://github.com/apollographql/router/pull/7262 diff --git a/.changesets/fix_bnjjj_rh_845.md b/.changesets/fix_bnjjj_rh_845.md deleted file mode 100644 index 6b50201e29..0000000000 --- a/.changesets/fix_bnjjj_rh_845.md +++ /dev/null @@ -1,5 +0,0 @@ -### Avoid fractional decimals when generating `apollo.router.operations.batching.size` metrics for GraphQL request batch sizes ([PR #7306](https://github.com/apollographql/router/pull/7306)) - -Correct the calculation of the `apollo.router.operations.batching.size` metric to reflect accurate batch sizes rather than occasionally returning fractional numbers. - -By [@bnjjj](https://github.com/bnjjj) in https://github.com/apollographql/router/pull/7306 \ No newline at end of file diff --git a/.changesets/fix_caroline_redis_conn_leak.md b/.changesets/fix_caroline_redis_conn_leak.md deleted file mode 100644 index 4247ee0e3d..0000000000 --- a/.changesets/fix_caroline_redis_conn_leak.md +++ /dev/null @@ -1,9 +0,0 @@ -### Fix Redis connection leak ([PR #7319](https://github.com/apollographql/router/pull/7319)) - -The router performs a 'hot reload' whenever it detects a schema update. During this reload, it effectively instantiates a new internal router, warms it up (optional), redirects all traffic to this new router, and drops the old internal router. - -This change fixes a bug in that drop process where the Redis connections are never told to terminate, even though the Redis client pool is dropped. This leads to an ever-increasing number of inactive Redis connections, which eats up memory. - -It also adds a new up-down counter metric, `apollo.router.cache.redis.connections`, to track the number of open Redis connections. This metric includes a `kind` label to discriminate between different Redis connection pools, which mirrors the `kind` label on other cache metrics (ie `apollo.router.cache.hit.time`). - -By [@carodewig](https://github.com/carodewig) in https://github.com/apollographql/router/pull/7319 diff --git a/.changesets/fix_fix_coprocessor_data_null.md b/.changesets/fix_fix_coprocessor_data_null.md deleted file mode 100644 index 973c0f5826..0000000000 --- a/.changesets/fix_fix_coprocessor_data_null.md +++ /dev/null @@ -1,27 +0,0 @@ -### Fix Parsing of Coprocessor GraphQL Responses ([PR #7141](https://github.com/apollographql/router/pull/7141)) - -Previously Router ignored `data: null` property inside GraphQL response returned by coprocessor. -According to [GraphQL Spectification](https://spec.graphql.org/draft/#sel-FAPHLJCAACEBxlY): - -> If an error was raised during the execution that prevented a valid response, the "data" entry in the response should be null. - -That means if coprocessor returned valid execution error, for example: - -```json -{ - "data": null, - "errors": [{ "message": "Some execution error" }] -} -``` - -Router violated above restriction from GraphQL Specification by returning following response to client: - -```json -{ - "errors": [{ "message": "Some execution error" }] -} -``` - -This fix ensures full compliance with the GraphQL specification by preserving the complete structure of error responses from coprocessors. - -Contributed by [@IvanGoncharov](https://github.com/IvanGoncharov) in [#7141](https://github.com/apollographql/router/pull/7141) diff --git a/.changesets/fix_simon_jwt_metrics.md b/.changesets/fix_simon_jwt_metrics.md deleted file mode 100644 index b4b6fb9c1a..0000000000 --- a/.changesets/fix_simon_jwt_metrics.md +++ /dev/null @@ -1,9 +0,0 @@ -### Fix JWT metrics discrepancy ([PR #7258](https://github.com/apollographql/router/pull/7258)) - -This fixes the `apollo.router.operations.authentication.jwt` counter metric to behave [as documented](https://www.apollographql.com/docs/graphos/routing/security/jwt#observability): emitted for every request that uses JWT, with the `authentication.jwt.failed` attribute set to true or false for failed or successful authentication. - -Previously, it was only used for failed authentication. - -The attribute-less and accidentally-differently-named `apollo.router.operations.jwt` counter was and is only emitted for successful authentication, but is deprecated now. - -By [@SimonSapin](https://github.com/SimonSapin) in https://github.com/apollographql/router/pull/7258 \ No newline at end of file diff --git a/.changesets/maint_renee_apollo_compiler_1_28.md b/.changesets/maint_renee_apollo_compiler_1_28.md deleted file mode 100644 index a6f57fc3cf..0000000000 --- a/.changesets/maint_renee_apollo_compiler_1_28.md +++ /dev/null @@ -1,5 +0,0 @@ -### Reject `@skip`/`@include` on subscription root fields in validation ([PR #7338](https://github.com/apollographql/router/pull/7338)) - -This implements a [GraphQL spec RFC](https://github.com/graphql/graphql-spec/pull/860), rejecting subscriptions in validation that can be invalid during execution. - -By [@goto-bus-stop](https://github.com/goto-bus-stop) in https://github.com/apollographql/router/pull/7338 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 8cf4c58ab0..d5c372adb7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,90 @@ All notable changes to Router will be documented in this file. This project adheres to [Semantic Versioning v2.0.0](https://semver.org/spec/v2.0.0.html). +# [1.61.6] - 2025-05-06 + +## 🐛 Fixes + +### Fix JWT metrics discrepancy ([PR #7258](https://github.com/apollographql/router/pull/7258)) + +This fixes the `apollo.router.operations.authentication.jwt` counter metric to behave [as documented](https://www.apollographql.com/docs/graphos/routing/security/jwt#observability): emitted for every request that uses JWT, with the `authentication.jwt.failed` attribute set to true or false for failed or successful authentication. + +Previously, it was only used for failed authentication. + +The attribute-less and accidentally-differently-named `apollo.router.operations.jwt` counter was and is only emitted for successful authentication, but is deprecated now. + +By [@SimonSapin](https://github.com/SimonSapin) in https://github.com/apollographql/router/pull/7258 + +### Fix Redis connection leak ([PR #7319](https://github.com/apollographql/router/pull/7319)) + +The router performs a 'hot reload' whenever it detects a schema update. During this reload, it effectively instantiates a new internal router, warms it up (optional), redirects all traffic to this new router, and drops the old internal router. + +This change fixes a bug in that drop process where the Redis connections are never told to terminate, even though the Redis client pool is dropped. This leads to an ever-increasing number of inactive Redis connections, which eats up memory. + +It also adds a new up-down counter metric, `apollo.router.cache.redis.connections`, to track the number of open Redis connections. This metric includes a `kind` label to discriminate between different Redis connection pools, which mirrors the `kind` label on other cache metrics (ie `apollo.router.cache.hit.time`). + +By [@carodewig](https://github.com/carodewig) in https://github.com/apollographql/router/pull/7319 + +### Fix Parsing of Coprocessor GraphQL Responses ([PR #7141](https://github.com/apollographql/router/pull/7141)) + +Previously Router ignored `data: null` property inside GraphQL response returned by coprocessor. +According to [GraphQL Spectification](https://spec.graphql.org/draft/#sel-FAPHLJCAACEBxlY): + +> If an error was raised during the execution that prevented a valid response, the "data" entry in the response should be null. + +That means if coprocessor returned valid execution error, for example: + +```json +{ + "data": null, + "errors": [{ "message": "Some execution error" }] +} +``` + +Router violated above restriction from GraphQL Specification by returning following response to client: + +```json +{ + "errors": [{ "message": "Some execution error" }] +} +``` + +This fix ensures full compliance with the GraphQL specification by preserving the complete structure of error responses from coprocessors. + +Contributed by [@IvanGoncharov](https://github.com/IvanGoncharov) in [#7141](https://github.com/apollographql/router/pull/7141) + +### Avoid fractional decimals when generating `apollo.router.operations.batching.size` metrics for GraphQL request batch sizes ([PR #7306](https://github.com/apollographql/router/pull/7306)) + +Correct the calculation of the `apollo.router.operations.batching.size` metric to reflect accurate batch sizes rather than occasionally returning fractional numbers. + +By [@bnjjj](https://github.com/bnjjj) in https://github.com/apollographql/router/pull/7306 + +## 📃 Configuration + +### Add configurable server header read timeout ([PR #7262](https://github.com/apollographql/router/pull/7262)) + +This change exposes the server's header read timeout as the `server.http.header_read_timeout` configuration option. + +By default, the `server.http.header_read_timeout` is set to previously hard-coded 10 seconds. A longer timeout can be configured using the `server.http.header_read_timeout` option. + +```yaml title="router.yaml" +server: + http: + header_read_timeout: 30s +``` + +By [@gwardwell ](https://github.com/gwardwell) in https://github.com/apollographql/router/pull/7262 + +## 🛠 Maintenance + +### Reject `@skip`/`@include` on subscription root fields in validation ([PR #7338](https://github.com/apollographql/router/pull/7338)) + +This implements a [GraphQL spec RFC](https://github.com/graphql/graphql-spec/pull/860), rejecting subscriptions in validation that can be invalid during execution. + +By [@goto-bus-stop](https://github.com/goto-bus-stop) in https://github.com/apollographql/router/pull/7338 + + + # [1.61.5] - 2025-04-28 ## 🔍 Debuggability diff --git a/Cargo.lock b/Cargo.lock index 25666a6441..37e9119e3d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -203,7 +203,7 @@ dependencies = [ [[package]] name = "apollo-federation" -version = "1.61.6-rc.0" +version = "1.61.6" dependencies = [ "apollo-compiler", "derive_more", @@ -256,7 +256,7 @@ dependencies = [ [[package]] name = "apollo-router" -version = "1.61.6-rc.0" +version = "1.61.6" dependencies = [ "access-json", "ahash", @@ -421,7 +421,7 @@ dependencies = [ [[package]] name = "apollo-router-benchmarks" -version = "1.61.6-rc.0" +version = "1.61.6" dependencies = [ "apollo-parser", "apollo-router", @@ -437,7 +437,7 @@ dependencies = [ [[package]] name = "apollo-router-scaffold" -version = "1.61.6-rc.0" +version = "1.61.6" dependencies = [ "anyhow", "cargo-scaffold", diff --git a/apollo-federation/Cargo.toml b/apollo-federation/Cargo.toml index c5dee38643..5e468fd458 100644 --- a/apollo-federation/Cargo.toml +++ b/apollo-federation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "apollo-federation" -version = "1.61.6-rc.0" +version = "1.61.6" authors = ["The Apollo GraphQL Contributors"] edition = "2021" description = "Apollo Federation" diff --git a/apollo-router-benchmarks/Cargo.toml b/apollo-router-benchmarks/Cargo.toml index bbb5d40221..feb3260647 100644 --- a/apollo-router-benchmarks/Cargo.toml +++ b/apollo-router-benchmarks/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "apollo-router-benchmarks" -version = "1.61.6-rc.0" +version = "1.61.6" authors = ["Apollo Graph, Inc. "] edition = "2021" license = "Elastic-2.0" diff --git a/apollo-router-scaffold/Cargo.toml b/apollo-router-scaffold/Cargo.toml index ea431ad453..817f139ea8 100644 --- a/apollo-router-scaffold/Cargo.toml +++ b/apollo-router-scaffold/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "apollo-router-scaffold" -version = "1.61.6-rc.0" +version = "1.61.6" authors = ["Apollo Graph, Inc. "] edition = "2021" license = "Elastic-2.0" diff --git a/apollo-router-scaffold/templates/base/Cargo.template.toml b/apollo-router-scaffold/templates/base/Cargo.template.toml index c3fc96d34c..63e3fed1ec 100644 --- a/apollo-router-scaffold/templates/base/Cargo.template.toml +++ b/apollo-router-scaffold/templates/base/Cargo.template.toml @@ -22,7 +22,7 @@ apollo-router = { path ="{{integration_test}}apollo-router" } apollo-router = { git="https://github.com/apollographql/router.git", branch="{{branch}}" } {{else}} # Note if you update these dependencies then also update xtask/Cargo.toml -apollo-router = "1.61.6-rc.0" +apollo-router = "1.61.6" {{/if}} {{/if}} async-trait = "0.1.52" diff --git a/apollo-router-scaffold/templates/base/xtask/Cargo.template.toml b/apollo-router-scaffold/templates/base/xtask/Cargo.template.toml index 0013cecb17..153d32b3e3 100644 --- a/apollo-router-scaffold/templates/base/xtask/Cargo.template.toml +++ b/apollo-router-scaffold/templates/base/xtask/Cargo.template.toml @@ -13,7 +13,7 @@ apollo-router-scaffold = { path ="{{integration_test}}apollo-router-scaffold" } {{#if branch}} apollo-router-scaffold = { git="https://github.com/apollographql/router.git", branch="{{branch}}" } {{else}} -apollo-router-scaffold = { git = "https://github.com/apollographql/router.git", tag = "v1.61.6-rc.0" } +apollo-router-scaffold = { git = "https://github.com/apollographql/router.git", tag = "v1.61.6" } {{/if}} {{/if}} anyhow = "1.0.58" diff --git a/apollo-router/Cargo.toml b/apollo-router/Cargo.toml index fd81d7ae5c..f528bd7f91 100644 --- a/apollo-router/Cargo.toml +++ b/apollo-router/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "apollo-router" -version = "1.61.6-rc.0" +version = "1.61.6" authors = ["Apollo Graph, Inc. "] repository = "https://github.com/apollographql/router/" documentation = "https://docs.rs/apollo-router" @@ -60,7 +60,7 @@ ci = [] access-json = "0.1.0" anyhow = "1.0.86" apollo-compiler.workspace = true -apollo-federation = { path = "../apollo-federation", version = "=1.61.6-rc.0" } +apollo-federation = { path = "../apollo-federation", version = "=1.61.6" } arc-swap = "1.6.0" async-channel = "1.9.0" async-compression = { version = "0.4.6", features = [ diff --git a/dockerfiles/tracing/docker-compose.datadog.yml b/dockerfiles/tracing/docker-compose.datadog.yml index 4092d72fb7..8d9e5ed576 100644 --- a/dockerfiles/tracing/docker-compose.datadog.yml +++ b/dockerfiles/tracing/docker-compose.datadog.yml @@ -3,7 +3,7 @@ services: apollo-router: container_name: apollo-router - image: ghcr.io/apollographql/router:v1.61.6-rc.0 + image: ghcr.io/apollographql/router:v1.61.6 volumes: - ./supergraph.graphql:/etc/config/supergraph.graphql - ./router/datadog.router.yaml:/etc/config/configuration.yaml diff --git a/dockerfiles/tracing/docker-compose.jaeger.yml b/dockerfiles/tracing/docker-compose.jaeger.yml index d72d9cb9e7..74c484fcf8 100644 --- a/dockerfiles/tracing/docker-compose.jaeger.yml +++ b/dockerfiles/tracing/docker-compose.jaeger.yml @@ -4,7 +4,7 @@ services: apollo-router: container_name: apollo-router #build: ./router - image: ghcr.io/apollographql/router:v1.61.6-rc.0 + image: ghcr.io/apollographql/router:v1.61.6 volumes: - ./supergraph.graphql:/etc/config/supergraph.graphql - ./router/jaeger.router.yaml:/etc/config/configuration.yaml diff --git a/dockerfiles/tracing/docker-compose.zipkin.yml b/dockerfiles/tracing/docker-compose.zipkin.yml index 32666baab3..454ac76ad1 100644 --- a/dockerfiles/tracing/docker-compose.zipkin.yml +++ b/dockerfiles/tracing/docker-compose.zipkin.yml @@ -4,7 +4,7 @@ services: apollo-router: container_name: apollo-router build: ./router - image: ghcr.io/apollographql/router:v1.61.6-rc.0 + image: ghcr.io/apollographql/router:v1.61.6 volumes: - ./supergraph.graphql:/etc/config/supergraph.graphql - ./router/zipkin.router.yaml:/etc/config/configuration.yaml diff --git a/helm/chart/router/Chart.yaml b/helm/chart/router/Chart.yaml index bc5756987d..1a41982c3e 100644 --- a/helm/chart/router/Chart.yaml +++ b/helm/chart/router/Chart.yaml @@ -20,10 +20,10 @@ type: application # so it matches the shape of our release process and release automation. # By proxy of that decision, this version uses SemVer 2.0.0, though the prefix # of "v" is not included. -version: 1.61.6-rc.0 +version: 1.61.6 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "v1.61.6-rc.0" +appVersion: "v1.61.6" diff --git a/helm/chart/router/README.md b/helm/chart/router/README.md index 8ee3188274..953b0ef00a 100644 --- a/helm/chart/router/README.md +++ b/helm/chart/router/README.md @@ -2,7 +2,7 @@ [router](https://github.com/apollographql/router) Rust Graph Routing runtime for Apollo Federation -![Version: 1.61.6-rc.0](https://img.shields.io/badge/Version-1.61.6--rc.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v1.61.6-rc.0](https://img.shields.io/badge/AppVersion-v1.61.6--rc.0-informational?style=flat-square) +![Version: 1.61.6](https://img.shields.io/badge/Version-1.61.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v1.61.6](https://img.shields.io/badge/AppVersion-v1.61.6-informational?style=flat-square) ## Prerequisites @@ -11,7 +11,7 @@ ## Get Repo Info ```console -helm pull oci://ghcr.io/apollographql/helm-charts/router --version 1.61.6-rc.0 +helm pull oci://ghcr.io/apollographql/helm-charts/router --version 1.61.6 ``` ## Install Chart @@ -19,7 +19,7 @@ helm pull oci://ghcr.io/apollographql/helm-charts/router --version 1.61.6-rc.0 **Important:** only helm3 is supported ```console -helm upgrade --install [RELEASE_NAME] oci://ghcr.io/apollographql/helm-charts/router --version 1.61.6-rc.0 --values my-values.yaml +helm upgrade --install [RELEASE_NAME] oci://ghcr.io/apollographql/helm-charts/router --version 1.61.6 --values my-values.yaml ``` _See [configuration](#configuration) below._ diff --git a/licenses.html b/licenses.html index 9f2b2be185..8485af130d 100644 --- a/licenses.html +++ b/licenses.html @@ -12375,7 +12375,6 @@

Used by:

  • async-graphql-derive
  • async-graphql-parser
  • async-graphql-value
  • -
  • buildstructor
  • chrono
  • dunce
  • graphql-introspection-query
  • @@ -12509,6 +12508,27 @@

    Used by:

    http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + +
  • +

    Apache License 2.0

    +

    Used by:

    + +
    Copyright [2022] [Bryn Cooke]
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    diff --git a/scripts/install.sh b/scripts/install.sh
    index ea00c1501d..df7da21f3f 100755
    --- a/scripts/install.sh
    +++ b/scripts/install.sh
    @@ -11,7 +11,7 @@ BINARY_DOWNLOAD_PREFIX="${APOLLO_ROUTER_BINARY_DOWNLOAD_PREFIX:="https://github.
     
     # Router version defined in apollo-router's Cargo.toml
     # Note: Change this line manually during the release steps.
    -PACKAGE_VERSION="v1.61.6-rc.0"
    +PACKAGE_VERSION="v1.61.6"
     
     download_binary() {
         downloader --check