From 7862cdad7588137d1cabcbccc75b2dd618a40f15 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Tue, 24 Sep 2024 16:01:35 +0300 Subject: [PATCH 1/2] prep release: v1.55.0 --- .changesets/config_introspection_both.md | 22 --- .changesets/exp_qp_cache_prewarm_on_reload.md | 24 ---- .changesets/feat_bnjjj_fix_5930.md | 22 --- ...geal_implement_redis_connection_pooling.md | 5 - ...feat_tninesling_coprocessor_cost_access.md | 5 - .../fix_bryn_datadog_sample_propagation.md | 7 - .changesets/fix_bryn_fix_gauges.md | 13 -- ..._unused_fragments_from_filtered_queries.md | 5 - ...ninesling_demand_control_variable_check.md | 6 - CHANGELOG.md | 127 ++++++++++++++++++ Cargo.lock | 8 +- apollo-federation/Cargo.toml | 2 +- apollo-router-benchmarks/Cargo.toml | 2 +- apollo-router-scaffold/Cargo.toml | 2 +- .../templates/base/Cargo.template.toml | 2 +- .../templates/base/xtask/Cargo.template.toml | 2 +- apollo-router/Cargo.toml | 4 +- .../tracing/docker-compose.datadog.yml | 2 +- dockerfiles/tracing/docker-compose.jaeger.yml | 2 +- dockerfiles/tracing/docker-compose.zipkin.yml | 2 +- helm/chart/router/Chart.yaml | 4 +- helm/chart/router/README.md | 6 +- licenses.html | 106 ++++++++++++++- scripts/install.sh | 2 +- 24 files changed, 246 insertions(+), 136 deletions(-) delete mode 100644 .changesets/config_introspection_both.md delete mode 100644 .changesets/exp_qp_cache_prewarm_on_reload.md delete mode 100644 .changesets/feat_bnjjj_fix_5930.md delete mode 100644 .changesets/feat_geal_implement_redis_connection_pooling.md delete mode 100644 .changesets/feat_tninesling_coprocessor_cost_access.md delete mode 100644 .changesets/fix_bryn_datadog_sample_propagation.md delete mode 100644 .changesets/fix_bryn_fix_gauges.md delete mode 100644 .changesets/fix_geal_remove_unused_fragments_from_filtered_queries.md delete mode 100644 .changesets/fix_tninesling_demand_control_variable_check.md diff --git a/.changesets/config_introspection_both.md b/.changesets/config_introspection_both.md deleted file mode 100644 index 4e51abf53d..0000000000 --- a/.changesets/config_introspection_both.md +++ /dev/null @@ -1,22 +0,0 @@ -### Enable new and old schema introspection implementations by default ([PR #6014](https://github.com/apollographql/router/pull/6014)) - -Starting with this release, if schema introspection is enabled, the router runs both the old Javascript implementation and a new Rust implementation of its introspection logic by default. - -The more performant Rust implementation will eventually replace the Javascript implementation. For now, both implementations are run by default so we can definitively assess the reliability and stability of the Rust implementation before removing the Javascript one. - -You can still toggle between implementations using the `experimental_introspection_mode` configuration key. Its valid values: - -- `new` runs only Rust-based validation -- `legacy` runs only Javascript-based validation -- `both` (default) runs both in comparison and logs errors if differences arise - -Having `both` as the default causes no client-facing impact. It will record and output the metrics of its comparison as a `apollo.router.operations.introspection.both` counter. (Note: if this counter in your metrics has `rust_error = true` or `is_matched = false`, please open an issue with Apollo.) - -Note: schema introspection itself is disabled by default, so its implementation(s) are run only if it's enabled in your configuration: - -```yaml -supergraph: - introspection: true -``` - -By [@SimonSapin](https://github.com/SimonSapin) in https://github.com/apollographql/router/pull/6014 diff --git a/.changesets/exp_qp_cache_prewarm_on_reload.md b/.changesets/exp_qp_cache_prewarm_on_reload.md deleted file mode 100644 index 59de502083..0000000000 --- a/.changesets/exp_qp_cache_prewarm_on_reload.md +++ /dev/null @@ -1,24 +0,0 @@ -### Allow disabling persisted-queries-based query plan cache prewarm on schema reload - -The router supports the new `persisted_queries.experimental_prewarm_query_plan_cache.on_reload` configuration option. It toggles whether a query plan cache that's prewarmed upon loading a new schema includes operations from persisted query lists. Its default is `true`. Setting it `false` precludes operations from persisted query lists from being added to the prewarmed query plan cache. - -Some background about the development of this option: - -- In router v1.31.0, we started including operations from persisted query lists when the router prewarms the query plan cache when loading a new schema. - -- Then in router v1.49.0, we let you also prewarm the query plan cache from the persisted query list during router startup by setting `persisted_queries.experimental_prewarm_query_plan_cache` to true. - -- In this release, we now allow you to disable the original feature so that the router can prewarm only recent operations from the query planning cache (and not operations from persisted query lists) when loading a new schema. - -Note: the option added in v1.49.0 has been renamed from `persisted_queries.experimental_prewarm_query_plan_cache` to `persisted_queries.experimental_prewarm_query_plan_cache.on_startup`. Existing configuration files will keep working as before, but with a warning that can be resolved by updating your config file: - -```diff - persisted_queries: - enabled: true -- experimental_prewarm_query_plan_cache: true -+ experimental_prewarm_query_plan_cache: -+ on_startup: true -``` - - -By [@glasser](https://github.com/glasser) in https://github.com/apollographql/router/pull/5990 \ No newline at end of file diff --git a/.changesets/feat_bnjjj_fix_5930.md b/.changesets/feat_bnjjj_fix_5930.md deleted file mode 100644 index 3d2340fe25..0000000000 --- a/.changesets/feat_bnjjj_fix_5930.md +++ /dev/null @@ -1,22 +0,0 @@ -### Support aliasing standard attributes for telemetry ([Issue #5930](https://github.com/apollographql/router/issues/5930)) - -The router now supports creating aliases for standard attributes for telemetry. - -This fixes issues where standard attribute names collide with reserved attribute names. For example, the standard attribute name `entity.type` is a [reserved attribute](New Relic entities](https://docs.newrelic.com/docs/new-relic-solutions/new-relic-one/core-concepts/what-entity-new-relic/#reserved-attributes) name for New Relic, so it won't work properly. Moreover `entity.type` is inconsistent with our other GraphQL attributes prefixed with `graphql.` - -The example configuration below renames `entity.type` to `graphql.type.name`: - -```yaml -telemetry: - instrumentation: - spans: - mode: spec_compliant # Docs state this significantly improves performance: https://www.apollographql.com/docs/router/configuration/telemetry/instrumentation/spans#spec_compliant - instruments: - cache: # Cache instruments configuration - apollo.router.operations.entity.cache: # A counter which counts the number of cache hit and miss for subgraph requests - attributes: - graphql.type.name: # renames entity.type - alias: entity_type # ENABLED and aliased to entity_type -``` - -By [@bnjjj](https://github.com/bnjjj) in https://github.com/apollographql/router/pull/5957 diff --git a/.changesets/feat_geal_implement_redis_connection_pooling.md b/.changesets/feat_geal_implement_redis_connection_pooling.md deleted file mode 100644 index 00de939ac5..0000000000 --- a/.changesets/feat_geal_implement_redis_connection_pooling.md +++ /dev/null @@ -1,5 +0,0 @@ -### Support Redis connection pooling ([PR #5942](https://github.com/apollographql/router/pull/5942)) - -The router now supports Redis connection pooling for APQs, query planners and entity caches. This can improve performance when there is contention on Redis connections or latency in Redis calls. - -By [@Geal](https://github.com/Geal) in https://github.com/apollographql/router/pull/5942 \ No newline at end of file diff --git a/.changesets/feat_tninesling_coprocessor_cost_access.md b/.changesets/feat_tninesling_coprocessor_cost_access.md deleted file mode 100644 index a1502cd788..0000000000 --- a/.changesets/feat_tninesling_coprocessor_cost_access.md +++ /dev/null @@ -1,5 +0,0 @@ -### Enable router customizations to access demand control info ([PR #5972](https://github.com/apollographql/router/pull/5972)) - -Rhai scripts and coprocessors can now access demand control information via the context. For more information on Rhai constants to access demand control info, see [available Rhai API constants](https://apollographql.com/docs/router/customizations/rhai-api#available-constants). - -By [@tninesling](https://github.com/tninesling) in https://github.com/apollographql/router/pull/5972 diff --git a/.changesets/fix_bryn_datadog_sample_propagation.md b/.changesets/fix_bryn_datadog_sample_propagation.md deleted file mode 100644 index d5952b4ddf..0000000000 --- a/.changesets/fix_bryn_datadog_sample_propagation.md +++ /dev/null @@ -1,7 +0,0 @@ -### Fix Datadog sample propagation ([PR #6005](https://github.com/apollographql/router/pull/6005)) - -[PR #5788](https://github.com/apollographql/router/pull/5788) introduced a regression where sampling was set on propagated headers regardless of the sampling decision in the router or upstream. - -This PR reverts the code in question and adds a test to check that a non-sampled request doesn't result in sampling in the downstream subgraph service. - -By [@BrynCooke](https://github.com/BrynCooke) in https://github.com/apollographql/router/pull/6005 diff --git a/.changesets/fix_bryn_fix_gauges.md b/.changesets/fix_bryn_fix_gauges.md deleted file mode 100644 index e17a35c3ea..0000000000 --- a/.changesets/fix_bryn_fix_gauges.md +++ /dev/null @@ -1,13 +0,0 @@ -### Fix stopped gauges upon hot reload ([PR #5996](https://github.com/apollographql/router/pull/5996), [PR #5999](https://github.com/apollographql/router/pull/5999), [PR #5999](https://github.com/apollographql/router/pull/6012)) - -Previously when the router hot-reloaded a schema or a configuration file, the following gauges stopped working: - -* `apollo.router.cache.storage.estimated_size` -* `apollo_router_cache_size` -* `apollo.router.v8.heap.used` -* `apollo.router.v8.heap.total` -* `apollo.router.query_planning.queued` - -This issue has been fixed in this release, and the gauges now continue to function after a router hot-reloads. - -By [@BrynCooke](https://github.com/BrynCooke) in https://github.com/apollographql/router/pull/5996 and https://github.com/apollographql/router/pull/5999 and https://github.com/apollographql/router/pull/6012 diff --git a/.changesets/fix_geal_remove_unused_fragments_from_filtered_queries.md b/.changesets/fix_geal_remove_unused_fragments_from_filtered_queries.md deleted file mode 100644 index d7e2fa91a8..0000000000 --- a/.changesets/fix_geal_remove_unused_fragments_from_filtered_queries.md +++ /dev/null @@ -1,5 +0,0 @@ -### Create valid documents with authorization filtering ([PR #5952](https://github.com/apollographql/router/pull/5952)) - -This release fixes the authorization plugin's query filtering to remove unused fragments and input arguments if the related parts of the query are removed. Previously the plugin's query filtering generated validation errors when planning the query. - -By [@Geal](https://github.com/Geal) in https://github.com/apollographql/router/pull/5952 \ No newline at end of file diff --git a/.changesets/fix_tninesling_demand_control_variable_check.md b/.changesets/fix_tninesling_demand_control_variable_check.md deleted file mode 100644 index b1e6d15d2f..0000000000 --- a/.changesets/fix_tninesling_demand_control_variable_check.md +++ /dev/null @@ -1,6 +0,0 @@ -### Include request variables in demand control scoring ([PR #5995](https://github.com/apollographql/router/pull/5995)) - -Demand control scoring in the router now accounts for variables in queries. - - -By [@tninesling](https://github.com/tninesling) in https://github.com/apollographql/router/pull/5995 diff --git a/CHANGELOG.md b/CHANGELOG.md index 98e93b3042..f8824de294 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,133 @@ 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.55.0] - 2024-09-24 + +## 🚀 Features + +### Support aliasing standard attributes for telemetry ([Issue #5930](https://github.com/apollographql/router/issues/5930)) + +The router now supports creating aliases for standard attributes for telemetry. + +This fixes issues where standard attribute names collide with reserved attribute names. For example, the standard attribute name `entity.type` is a [reserved attribute](https://docs.newrelic.com/docs/new-relic-solutions/new-relic-one/core-concepts/what-entity-new-relic/#reserved-attributes) name for New Relic, so it won't work properly. Moreover `entity.type` is inconsistent with our other GraphQL attributes prefixed with `graphql.` + +The example configuration below renames `entity.type` to `graphql.type.name`: + +```yaml +telemetry: + instrumentation: + spans: + mode: spec_compliant # Docs state this significantly improves performance: https://www.apollographql.com/docs/router/configuration/telemetry/instrumentation/spans#spec_compliant + instruments: + cache: # Cache instruments configuration + apollo.router.operations.entity.cache: # A counter which counts the number of cache hit and miss for subgraph requests + attributes: + graphql.type.name: # renames entity.type + alias: entity_type # ENABLED and aliased to entity_type +``` + +By [@bnjjj](https://github.com/bnjjj) in https://github.com/apollographql/router/pull/5957 + +### Enable router customizations to access demand control info ([PR #5972](https://github.com/apollographql/router/pull/5972)) + +Rhai scripts and coprocessors can now access demand control information via the context. For more information on Rhai constants to access demand control info, see [available Rhai API constants](https://apollographql.com/docs/router/customizations/rhai-api#available-constants). + +By [@tninesling](https://github.com/tninesling) in https://github.com/apollographql/router/pull/5972 + +### Support Redis connection pooling ([PR #5942](https://github.com/apollographql/router/pull/5942)) + +The router now supports Redis connection pooling for APQs, query planners and entity caches. This can improve performance when there is contention on Redis connections or latency in Redis calls. + +By [@Geal](https://github.com/Geal) in https://github.com/apollographql/router/pull/5942 + + +## 🐛 Fixes + +### Remove unused fragments and input arguments when filtering operations ([PR #5952](https://github.com/apollographql/router/pull/5952)) + +This release fixes the authorization plugin's query filtering to remove unused fragments and input arguments if the related parts of the query are removed. Previously the plugin's query filtering generated validation errors when planning certain queries. + +By [@Geal](https://github.com/Geal) in https://github.com/apollographql/router/pull/5952 + +### Hot-reloads will no longer interrupt certain gauges ([PR #5996](https://github.com/apollographql/router/pull/5996), [PR #5999](https://github.com/apollographql/router/pull/5999), [PR #5999](https://github.com/apollographql/router/pull/6012)) + +Previously when the router hot-reloaded a schema or a configuration file, the following gauges stopped working: + +* `apollo.router.cache.storage.estimated_size` +* `apollo_router_cache_size` +* `apollo.router.v8.heap.used` +* `apollo.router.v8.heap.total` +* `apollo.router.query_planning.queued` + +This issue has been fixed in this release, and the gauges now continue to function after a router hot-reloads. + +By [@BrynCooke](https://github.com/BrynCooke) in https://github.com/apollographql/router/pull/5996 and https://github.com/apollographql/router/pull/5999 and https://github.com/apollographql/router/pull/6012 + +### Datadog sample propagation will respect previous sampling decisions ([PR #6005](https://github.com/apollographql/router/pull/6005)) + +[PR #5788](https://github.com/apollographql/router/pull/5788) introduced a regression where sampling was set on propagated headers regardless of the sampling decision in the router or upstream. + +This PR reverts the code in question and adds a test to check that a non-sampled request doesn't result in sampling in the downstream subgraph service. + +By [@BrynCooke](https://github.com/BrynCooke) in https://github.com/apollographql/router/pull/6005 + +### Include request variables when scoring for demand control ([PR #5995](https://github.com/apollographql/router/pull/5995)) + +Demand control scoring in the router now accounts for variables in queries. + +By [@tninesling](https://github.com/tninesling) in https://github.com/apollographql/router/pull/5995 + +## 📃 Configuration + +### Enable new and old schema introspection implementations by default ([PR #6014](https://github.com/apollographql/router/pull/6014)) + +Starting with this release, if schema introspection is enabled, the router runs both the old Javascript implementation and a new Rust implementation of its introspection logic by default. + +The more performant Rust implementation will eventually replace the Javascript implementation. For now, both implementations are run by default so we can definitively assess the reliability and stability of the Rust implementation before removing the Javascript one. + +You can still toggle between implementations using the `experimental_introspection_mode` configuration key. Its valid values: + +- `new` runs only Rust-based validation +- `legacy` runs only Javascript-based validation +- `both` (default) runs both in comparison and logs errors if differences arise + +Having `both` as the default causes no client-facing impact. It will record and output the metrics of its comparison as a `apollo.router.operations.introspection.both` counter. (Note: if this counter in your metrics has `rust_error = true` or `is_matched = false`, please open an issue with Apollo.) + +Note: schema introspection itself is disabled by default, so its implementation(s) are run only if it's enabled in your configuration: + +```yaml +supergraph: + introspection: true +``` + +By [@SimonSapin](https://github.com/SimonSapin) in https://github.com/apollographql/router/pull/6014 + +## 🧪 Experimental + +### Allow disabling persisted-queries-based query plan cache prewarm on schema reload + +The router supports the new `persisted_queries.experimental_prewarm_query_plan_cache.on_reload` configuration option. It toggles whether a query plan cache that's prewarmed upon loading a new schema includes operations from persisted query lists. Its default is `true`. Setting it `false` precludes operations from persisted query lists from being added to the prewarmed query plan cache. + +Some background about the development of this option: + +- In router v1.31.0, we started including operations from persisted query lists when the router prewarms the query plan cache when loading a new schema. + +- Then in router v1.49.0, we let you also prewarm the query plan cache from the persisted query list during router startup by setting `persisted_queries.experimental_prewarm_query_plan_cache` to true. + +- In this release, we now allow you to disable the original feature so that the router can prewarm only recent operations from the query planning cache (and not operations from persisted query lists) when loading a new schema. + +Note: the option added in v1.49.0 has been renamed from `persisted_queries.experimental_prewarm_query_plan_cache` to `persisted_queries.experimental_prewarm_query_plan_cache.on_startup`. Existing configuration files will keep working as before, but with a warning that can be resolved by updating your config file: + +```diff + persisted_queries: + enabled: true +- experimental_prewarm_query_plan_cache: true ++ experimental_prewarm_query_plan_cache: ++ on_startup: true +``` + +By [@glasser](https://github.com/glasser) in https://github.com/apollographql/router/pull/5990 + # [1.54.0] - 2024-09-10 ## 🚀 Features diff --git a/Cargo.lock b/Cargo.lock index fc611a1cc9..b72062f176 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -178,7 +178,7 @@ dependencies = [ [[package]] name = "apollo-federation" -version = "1.55.0-rc.2" +version = "1.55.0" dependencies = [ "apollo-compiler", "derive_more", @@ -229,7 +229,7 @@ dependencies = [ [[package]] name = "apollo-router" -version = "1.55.0-rc.2" +version = "1.55.0" dependencies = [ "access-json", "ahash", @@ -400,7 +400,7 @@ dependencies = [ [[package]] name = "apollo-router-benchmarks" -version = "1.55.0-rc.2" +version = "1.55.0" dependencies = [ "apollo-parser", "apollo-router", @@ -416,7 +416,7 @@ dependencies = [ [[package]] name = "apollo-router-scaffold" -version = "1.55.0-rc.2" +version = "1.55.0" dependencies = [ "anyhow", "cargo-scaffold", diff --git a/apollo-federation/Cargo.toml b/apollo-federation/Cargo.toml index 504c350ee8..5de40a5380 100644 --- a/apollo-federation/Cargo.toml +++ b/apollo-federation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "apollo-federation" -version = "1.55.0-rc.2" +version = "1.55.0" 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 523790860d..38759d2feb 100644 --- a/apollo-router-benchmarks/Cargo.toml +++ b/apollo-router-benchmarks/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "apollo-router-benchmarks" -version = "1.55.0-rc.2" +version = "1.55.0" 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 aa0eacd8b0..4801a6c616 100644 --- a/apollo-router-scaffold/Cargo.toml +++ b/apollo-router-scaffold/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "apollo-router-scaffold" -version = "1.55.0-rc.2" +version = "1.55.0" 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 fe7de1521c..a1c3d2a42d 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.55.0-rc.2" +apollo-router = "1.55.0" {{/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 23a17e421b..c566a3a0ca 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.55.0-rc.2" } +apollo-router-scaffold = { git = "https://github.com/apollographql/router.git", tag = "v1.55.0" } {{/if}} {{/if}} anyhow = "1.0.58" diff --git a/apollo-router/Cargo.toml b/apollo-router/Cargo.toml index 4f4aa76ce5..4675c9a5d7 100644 --- a/apollo-router/Cargo.toml +++ b/apollo-router/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "apollo-router" -version = "1.55.0-rc.2" +version = "1.55.0" authors = ["Apollo Graph, Inc. "] repository = "https://github.com/apollographql/router/" documentation = "https://docs.rs/apollo-router" @@ -68,7 +68,7 @@ askama = "0.12.1" access-json = "0.1.0" anyhow = "1.0.86" apollo-compiler.workspace = true -apollo-federation = { path = "../apollo-federation", version = "=1.55.0-rc.2" } +apollo-federation = { path = "../apollo-federation", version = "=1.55.0" } 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 e59725accb..3b58c1d702 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.55.0-rc.2 + image: ghcr.io/apollographql/router:v1.55.0 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 ac96c102fe..fcb75930d2 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.55.0-rc.2 + image: ghcr.io/apollographql/router:v1.55.0 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 a3f2844a49..0cb933a7ac 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.55.0-rc.2 + image: ghcr.io/apollographql/router:v1.55.0 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 4e1453f903..7a1c6d615a 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.55.0-rc.2 +version: 1.55.0 # 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.55.0-rc.2" +appVersion: "v1.55.0" diff --git a/helm/chart/router/README.md b/helm/chart/router/README.md index 5b3abde642..fb09765b10 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.55.0-rc.2](https://img.shields.io/badge/Version-1.55.0--rc.2-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v1.55.0-rc.2](https://img.shields.io/badge/AppVersion-v1.55.0--rc.2-informational?style=flat-square) +![Version: 1.55.0](https://img.shields.io/badge/Version-1.55.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v1.55.0](https://img.shields.io/badge/AppVersion-v1.55.0-informational?style=flat-square) ## Prerequisites @@ -11,7 +11,7 @@ ## Get Repo Info ```console -helm pull oci://ghcr.io/apollographql/helm-charts/router --version 1.55.0-rc.2 +helm pull oci://ghcr.io/apollographql/helm-charts/router --version 1.55.0 ``` ## Install Chart @@ -19,7 +19,7 @@ helm pull oci://ghcr.io/apollographql/helm-charts/router --version 1.55.0-rc.2 **Important:** only helm3 is supported ```console -helm upgrade --install [RELEASE_NAME] oci://ghcr.io/apollographql/helm-charts/router --version 1.55.0-rc.2 --values my-values.yaml +helm upgrade --install [RELEASE_NAME] oci://ghcr.io/apollographql/helm-charts/router --version 1.55.0 --values my-values.yaml ``` _See [configuration](#configuration) below._ diff --git a/licenses.html b/licenses.html index 30647c049e..e415d536c4 100644 --- a/licenses.html +++ b/licenses.html @@ -44,8 +44,8 @@

Third Party Licenses

Overview of licenses:

    -
  • Apache License 2.0 (445)
  • -
  • MIT License (151)
  • +
  • Apache License 2.0 (448)
  • +
  • MIT License (155)
  • BSD 3-Clause "New" or "Revised" License (11)
  • ISC License (8)
  • Mozilla Public License 2.0 (5)
  • @@ -65,6 +65,7 @@

    Used by:

  • aws-config
  • aws-credential-types
  • aws-runtime
  • +
  • aws-sigv4
  • aws-smithy-async
  • aws-smithy-http
  • aws-smithy-json
  • @@ -8203,6 +8204,7 @@

    Used by:

  • bytes-utils
  • cc
  • cfg-if
  • +
  • ci_info
  • cmake
  • concurrent-queue
  • const-random
  • @@ -8217,6 +8219,7 @@

    Used by:

  • derive_arbitrary
  • displaydoc
  • either
  • +
  • envmnt
  • equivalent
  • event-listener
  • fastrand
  • @@ -10859,6 +10862,14 @@

    Used by:

    additional terms or conditions. +
  • +

    Apache License 2.0

    +

    Used by:

    + +
    ../../LICENSE-APACHE
    +
  • Apache License 2.0

    Used by:

    @@ -11507,13 +11518,11 @@

    Apache License 2.0

    Used by:

    • apollo-compiler
    • -
    • apollo-parser
    • apollo-smith
    • async-graphql-axum
    • async-graphql-derive
    • async-graphql-parser
    • async-graphql-value
    • -
    • buildstructor
    • deno-proc-macro-rules
    • deno-proc-macro-rules-macros
    • dunce
    • @@ -11612,6 +11621,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.
      @@ -13299,6 +13329,66 @@ 

      Used by:

      shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +
      +
    • +
    • +

      MIT License

      +

      Used by:

      + +
      Copyright (c) 2019 Carl Lerche
      +
      +Permission is hereby granted, free of charge, to any
      +person obtaining a copy of this software and associated
      +documentation files (the "Software"), to deal in the
      +Software without restriction, including without
      +limitation the rights to use, copy, modify, merge,
      +publish, distribute, sublicense, and/or sell copies of
      +the Software, and to permit persons to whom the Software
      +is furnished to do so, subject to the following
      +conditions:
      +
      +The above copyright notice and this permission notice
      +shall be included in all copies or substantial portions
      +of the Software.
      +
      +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
      +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
      +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
      +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
      +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
      +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
      +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
      +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
      +DEALINGS IN THE SOFTWARE.
      +
      +Copyright (c) 2018 David Tolnay
      +
      +Permission is hereby granted, free of charge, to any
      +person obtaining a copy of this software and associated
      +documentation files (the "Software"), to deal in the
      +Software without restriction, including without
      +limitation the rights to use, copy, modify, merge,
      +publish, distribute, sublicense, and/or sell copies of
      +the Software, and to permit persons to whom the Software
      +is furnished to do so, subject to the following
      +conditions:
      +
      +The above copyright notice and this permission notice
      +shall be included in all copies or substantial portions
      +of the Software.
      +
       THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
       ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
       TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
      @@ -14305,8 +14395,6 @@ 

      Used by:

      MIT License

      Used by:

        -
      • async-stream
      • -
      • async-stream-impl
      • base64-simd
      • convert_case
      • cookie-factory
      • @@ -14649,6 +14737,8 @@

        Used by:

        The MIT License (MIT)
         
        @@ -15177,6 +15267,8 @@ 

        Used by:

        MIT License

        Used by:

          +
        • aho-corasick
        • +
        • byteorder
        • globset
        • memchr
        • regex-automata
        • @@ -15584,7 +15676,6 @@

          Used by:

          Mozilla Public License 2.0

          Used by:

          Mozilla Public License Version 2.0
          @@ -15967,6 +16058,7 @@ 

          Used by:

          Mozilla Public License 2.0

          Used by:

          Mozilla Public License Version 2.0
          diff --git a/scripts/install.sh b/scripts/install.sh
          index 1dca7b24db..f03b383d8d 100755
          --- a/scripts/install.sh
          +++ b/scripts/install.sh
          @@ -11,7 +11,7 @@ BINARY_DOWNLOAD_PREFIX="https://github.com/apollographql/router/releases/downloa
           
           # Router version defined in apollo-router's Cargo.toml
           # Note: Change this line manually during the release steps.
          -PACKAGE_VERSION="v1.55.0-rc.2"
          +PACKAGE_VERSION="v1.55.0"
           
           download_binary() {
               downloader --check
          
          From f66c2edc21b6605c34b8455d41fe18a3aebe0fb4 Mon Sep 17 00:00:00 2001
          From: Jesse Rosenberger 
          Date: Tue, 24 Sep 2024 16:01:45 +0300
          Subject: [PATCH 2/2] Remove some trailing whitespace in CHANGELOG.md that
           keeps surfacing.
          
          ---
           CHANGELOG.md | 48 ++++++++++++++++++++++++------------------------
           1 file changed, 24 insertions(+), 24 deletions(-)
          
          diff --git a/CHANGELOG.md b/CHANGELOG.md
          index f8824de294..73dc9ffd54 100644
          --- a/CHANGELOG.md
          +++ b/CHANGELOG.md
          @@ -150,7 +150,7 @@ telemetry:
                logging:
                  stdout:
                    enabled: true
          -         format: 
          +         format:
                      json:
                        display_span_list: false
                        span_attributes:
          @@ -177,7 +177,7 @@ By [@bnjjj](https://github.com/bnjjj) in https://github.com/apollographql/router
           
           ### Add a histogram metric tracking evaluated query plans ([PR #5875](https://github.com/apollographql/router/pull/5875))
           
          -The router supports the new `apollo.router.query_planning.plan.evaluated_plans` histogram metric to track the number of evaluated query plans. 
          +The router supports the new `apollo.router.query_planning.plan.evaluated_plans` histogram metric to track the number of evaluated query plans.
           
           You can use it to help set an optimal `supergraph.query_planning.experimental_plans_limit` option that limits the number of query plans evaluated for a query and reduces the time spent planning.
           
          @@ -681,7 +681,7 @@ This weakness impacts all versions of Router prior to this release.  See the ass
           
           ### Provide helm support for when router's health_check's default path is not being used([Issue #5652](https://github.com/apollographql/router/issues/5652))
           
          -When helm chart is defining the liveness and readiness check probes, if the router has been configured to use a non-default health_check path, use that rather than the default ( /health ) 
          +When helm chart is defining the liveness and readiness check probes, if the router has been configured to use a non-default health_check path, use that rather than the default ( /health )
           
           By [Jon Christiansen](https://github.com/theJC) in https://github.com/apollographql/router/pull/5653
           
          @@ -689,7 +689,7 @@ By [Jon Christiansen](https://github.com/theJC) in https://github.com/apollograp
           
           Metrics of the router's entity cache have been converted to the latest format with support for custom telemetry.
           
          -The following example configuration shows the the `cache` instrument, the `cache` selector in the subgraph service, and the `cache` attribute of a subgraph span: 
          +The following example configuration shows the the `cache` instrument, the `cache` selector in the subgraph service, and the `cache` attribute of a subgraph span:
           
           ```yaml
           telemetry:
          @@ -750,7 +750,7 @@ Previously, the connection pools used by the Datadog exporter frequently timed o
           2024-07-19T15:28:22.970360Z ERROR  OpenTelemetry trace error occurred: error sending request for url (http://127.0.0.1:8126/v0.5/traces): connection error: Connection reset by peer (os error 54)
           ```
           
          -Now, the pool timeout for the Datadog exporter has been changed so that timeout errors happen much less frequently.  
          +Now, the pool timeout for the Datadog exporter has been changed so that timeout errors happen much less frequently.
           
           By [@BrynCooke](https://github.com/BrynCooke) in https://github.com/apollographql/router/pull/5692
           
          @@ -869,7 +869,7 @@ By [@garypen](https://github.com/garypen) in https://github.com/apollographql/ro
           ### Update router naming conventions ([PR #5400](https://github.com/apollographql/router/pull/5400))
           
           Renames our router product to distinguish between our non-commercial and commercial offerings. Instead of referring to the **Apollo Router**, we now refer to the following:
          -- **Apollo Router Core** is Apollo’s free-and-open (ELv2 licensed) implementation of a routing runtime for supergraphs. 
          +- **Apollo Router Core** is Apollo’s free-and-open (ELv2 licensed) implementation of a routing runtime for supergraphs.
           - **GraphOS Router** is based on the Apollo Router Core and fully integrated with GraphOS. GraphOS Routers provide access to GraphOS’s commercial runtime features.
           
           
          @@ -879,7 +879,7 @@ By [@shorgi](https://github.com/shorgi) in https://github.com/apollographql/rout
           
           ### Enable Rust-based API schema implementation ([PR #5623](https://github.com/apollographql/router/pull/5623))
           
          -The router has transitioned to solely using a Rust-based API schema generation implementation. 
          +The router has transitioned to solely using a Rust-based API schema generation implementation.
           
           Previously, the router used a Javascript-based implementation. After testing for a few months, we've validated the improved performance and robustness of the new Rust-based implementation, so the router now only uses it.
           
          @@ -896,7 +896,7 @@ By [@goto-bus-stop](https://github.com/goto-bus-stop) in https://github.com/apol
           The router now supports conditional execution of the coprocessor for each stage of the request lifecycle (except for the `Execution` stage).
           
           To configure, define conditions for a specific stage by using selectors based on headers or context entries. For example, based on a supergraph response you can configure the coprocessor not to execute for any subscription:
          -  
          +
           
           
           ```yaml title=router.yaml
          @@ -904,7 +904,7 @@ coprocessor:
             url: http://127.0.0.1:3000 # mandatory URL which is the address of the coprocessor
             timeout: 2s # optional timeout (2 seconds in this example). If not set, defaults to 1 second
             supergraph:
          -    response: 
          +    response:
                 condition:
                   not:
                     eq:
          @@ -936,7 +936,7 @@ By [@Geal](https://github.com/Geal) in https://github.com/apollographql/router/p
           
           The router now supports the `subgraph_on_graphql_error` selector for the subgraph service, which it already supported for the router and supergraph services. Subgraph service support enables easier detection of GraphQL errors in response bodies of subgraph requests.
           
          -An example configuration with `subgraph_on_graphql_error` configured:  
          +An example configuration with `subgraph_on_graphql_error` configured:
           
           ```yaml
           telemetry:
          @@ -982,7 +982,7 @@ By [@bnjjj](https://github.com/bnjjj) in https://github.com/apollographql/router
           
           ### Provide valid trace IDs for unsampled traces in Rhai scripts  ([PR #5606](https://github.com/apollographql/router/pull/5606))
           
          -The `traceid()` function in a Rhai script for the router now returns a valid trace ID for all traces. 
          +The `traceid()` function in a Rhai script for the router now returns a valid trace ID for all traces.
           
           Previously, `traceid()` didn't return a trace ID if the trace wasn't selected for sampling.
           
          @@ -998,7 +998,7 @@ By [@garypen](https://github.com/garypen) in https://github.com/apollographql/ro
           
           This router now gracefully handles responses that contain invalid "`-1`" positional values for error locations in queries by ignoring those invalid locations.
           
          -This change resolves the problem of GraphQL Java and GraphQL Kotlin using `{ "line": -1, "column": -1 }` values if they can't determine an error's location in a query, but the GraphQL specification [requires both `line` and `column` to be positive numbers](https://spec.graphql.org/draft/#sel-GAPHRPFCCaCGX5zM).  
          +This change resolves the problem of GraphQL Java and GraphQL Kotlin using `{ "line": -1, "column": -1 }` values if they can't determine an error's location in a query, but the GraphQL specification [requires both `line` and `column` to be positive numbers](https://spec.graphql.org/draft/#sel-GAPHRPFCCaCGX5zM).
           
           As an example, a subgraph can respond with invalid error locations:
           ```json
          @@ -1032,7 +1032,7 @@ By [@IvanGoncharov](https://github.com/IvanGoncharov) in https://github.com/apol
           
           The router now returns request timeout errors (`408 Request Timeout`) and request rate limited errors (`429 Too Many Requests`) as structured GraphQL errors (for example, `{"errors": [...]}`). Previously, the router returned these as plaintext errors to clients.
           
          -Both types of errors are properly tracked in telemetry, including the `apollo_router_graphql_error_total` metric. 
          +Both types of errors are properly tracked in telemetry, including the `apollo_router_graphql_error_total` metric.
           
           By [@IvanGoncharov](https://github.com/IvanGoncharov) in https://github.com/apollographql/router/pull/5578
           
          @@ -1117,7 +1117,7 @@ By [@andrewmcgivery](https://github.com/andrewmcgivery) in https://github.com/ap
           
           ### Support local persisted query manifests for use with offline licenses ([Issue #4587](https://github.com/apollographql/router/issues/4587))
           
          -Adds experimental support for passing [persisted query manifests](https://www.apollographql.com/docs/graphos/operations/persisted-queries/#31-generate-persisted-query-manifests) to use instead of the hosted Uplink version. 
          +Adds experimental support for passing [persisted query manifests](https://www.apollographql.com/docs/graphos/operations/persisted-queries/#31-generate-persisted-query-manifests) to use instead of the hosted Uplink version.
           
           For example:
           
          @@ -1125,7 +1125,7 @@ For example:
           persisted_queries:
             enabled: true
             log_unknown: true
          -  experimental_local_manifests: 
          +  experimental_local_manifests:
               - ./persisted-query-manifest.json
             safelist:
               enabled: true
          @@ -1160,7 +1160,7 @@ By [@bnjjj](https://github.com/bnjjj) in https://github.com/apollographql/router
           
           ### Make `status_code` available for `router_service` responses in Rhai scripts ([Issue #5357](https://github.com/apollographql/router/issues/5357))
           
          -Adds `response.status_code` on Rhai [`router_service`](https://www.apollographql.com/docs/router/customizations/rhai-api/#entry-point-hooks) responses. Previously, `status_code` was only available on `subgraph_service` responses. 
          +Adds `response.status_code` on Rhai [`router_service`](https://www.apollographql.com/docs/router/customizations/rhai-api/#entry-point-hooks) responses. Previously, `status_code` was only available on `subgraph_service` responses.
           
           For example:
           
          @@ -1259,11 +1259,11 @@ By [@Geal](https://github.com/Geal) in https://github.com/apollographql/router/p
           
           Improves accuracy and performance of event telemetry by:
           
          -- Displaying custom event attributes even if the trace is not sampled 
          +- Displaying custom event attributes even if the trace is not sampled
           - Preserving original attribute type instead of converting it to string
           - Ensuring `http.response.body.size` and `http.request.body.size` attributes are treated as numbers, not strings
           
          -> :warning: Exercise caution if you have monitoring enabled on your logs, as attribute types may have changed. For example, attributes like `http.response.status_code` are now numbers (`200`) instead of strings (`"200"`). 
          +> :warning: Exercise caution if you have monitoring enabled on your logs, as attribute types may have changed. For example, attributes like `http.response.status_code` are now numbers (`200`) instead of strings (`"200"`).
           
           
           By [@bnjjj](https://github.com/bnjjj) in https://github.com/apollographql/router/pull/5464
          @@ -1277,7 +1277,7 @@ By [@bnjjj](https://github.com/bnjjj) in https://github.com/apollographql/router
           ### Improve accuracy of `query_planning.plan.duration` ([PR #5](https://github.com/apollographql/router/pull/5530))
           Previously, the `apollo.router.query_planning.plan.duration` metric inaccurately included additional processing time beyond query planning. The additional time included pooling time, which is already accounted for in the metric. After this update, apollo.router.query_planning.plan.duration now accurately reflects only the query planning duration without additional processing time.
           
          -For example, before the change, metrics reported: 
          +For example, before the change, metrics reported:
           ```bash
           2024-06-21T13:37:27.744592Z WARN  apollo.router.query_planning.plan.duration 0.002475708
           2024-06-21T13:37:27.744651Z WARN  apollo.router.query_planning.total.duration 0.002553958
          @@ -1345,19 +1345,19 @@ telemetry:
                   # OLD definition of a custom instrument that measures the number of fields
                   my.unit.instrument:
                     value: field_unit # Changes to unit
          -        
          +
                   # NEW definition
                   my.unit.instrument:
          -          value: unit 
          +          value: unit
           
          -        # OLD  
          +        # OLD
                   my.custom.instrument:
                     value: # Changes to not require `field_custom`
                       field_custom:
                         list_length: value
                   # NEW
                   my.custom.instrument:
          -          value: 
          +          value:
                       list_length: value
           ```
           
          @@ -1486,7 +1486,7 @@ Allows HTTP/2 Cleartext (h2c) communication with coprocessors for scenarios wher
           Introduces a new `coprocessor.client` configuration. The first and currently only option is `experimental_http2`. The available option settings are the same as the as [`experimental_http2` traffic shaping settings](https://www.apollographql.com/docs/router/configuration/traffic-shaping/#http2).
           
           - `disable` - disable HTTP/2, use HTTP/1.1 only
          -- `enable` - HTTP URLs use HTTP/1.1, HTTPS URLs use TLS with either HTTP/1.1 or HTTP/2 based on the TLS handshake 
          +- `enable` - HTTP URLs use HTTP/1.1, HTTPS URLs use TLS with either HTTP/1.1 or HTTP/2 based on the TLS handshake
           - `http2only` - HTTP URLs use h2c, HTTPS URLs use TLS with HTTP/2
           - not set - defaults to `enable`