diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index c0316fd9c9..19b77af4d9 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -18,7 +18,7 @@ The **Apollo Router** is a configurable, high-performance **graph router** for a ## Development -You will need a recent version of rust (`1.63` works well as of writing). +You will need a recent version of rust (`1.65` works well as of writing). Installing rust [using rustup](https://www.rust-lang.org/tools/install) is the recommended way to do it as it will install rustup, rustfmt and other goodies that are not always included by default in other rust distribution channels: diff --git a/NEXT_CHANGELOG.md b/NEXT_CHANGELOG.md index ff94f5458b..c7c8072e89 100644 --- a/NEXT_CHANGELOG.md +++ b/NEXT_CHANGELOG.md @@ -73,6 +73,12 @@ This test was failing frequently due to it being a timing test being run in a si By [@bryncooke](https://github.com/bryncooke) in https://github.com/apollographql/router/pull/2218 +### Update to Rust 1.65 ([Issue #2220](https://github.com/apollographql/router/issues/2220)) + +Rust MSRV incremented to 1.65. + +By [@bryncooke](https://github.com/bryncooke) in https://github.com/apollographql/router/pull/2221 + ## 📚 Documentation ### Create yaml config design guidance ([Issue #2158](https://github.com/apollographql/router/pull/2158)) diff --git a/apollo-router-scaffold/src/lib.rs b/apollo-router-scaffold/src/lib.rs index c26e8b2876..3823dc7762 100644 --- a/apollo-router-scaffold/src/lib.rs +++ b/apollo-router-scaffold/src/lib.rs @@ -169,7 +169,7 @@ mod test { // best effort to prepare the output directory let _ = std::fs::remove_dir_all(&output_dir); - copy_dir::copy_dir(&temp_dir, &output_dir) + copy_dir::copy_dir(temp_dir, &output_dir) .expect("couldn't copy test_scaffold_output directory"); anyhow::anyhow!( "scaffold test failed: {e}\nYou can find the scaffolded project at '{}'", diff --git a/apollo-router/Cargo.toml b/apollo-router/Cargo.toml index 560281750d..c30d991ce2 100644 --- a/apollo-router/Cargo.toml +++ b/apollo-router/Cargo.toml @@ -8,7 +8,7 @@ description = "A configurable, high-performance routing runtime for Apollo Feder license = "LicenseRef-ELv2" # renovate-automation: rustc version -rust-version = "1.63.0" +rust-version = "1.65.0" edition = "2021" build = "build/main.rs" diff --git a/apollo-router/src/axum_factory/tests.rs b/apollo-router/src/axum_factory/tests.rs index 5427b7f63d..0d838273bf 100644 --- a/apollo-router/src/axum_factory/tests.rs +++ b/apollo-router/src/axum_factory/tests.rs @@ -1577,19 +1577,19 @@ async fn deferred_response_shape() -> Result<(), ApolloRouterError> { let first = response.chunk().await.unwrap().unwrap(); assert_eq!( - std::str::from_utf8(&*first).unwrap(), + std::str::from_utf8(&first).unwrap(), "\r\n--graphql\r\ncontent-type: application/json\r\n\r\n{\"data\":{\"test\":\"hello\"},\"hasNext\":true}\r\n--graphql\r\n" ); let second = response.chunk().await.unwrap().unwrap(); assert_eq!( - std::str::from_utf8(&*second).unwrap(), + std::str::from_utf8(&second).unwrap(), "content-type: application/json\r\n\r\n{\"hasNext\":true,\"incremental\":[{\"data\":{\"other\":\"world\"},\"path\":[]}]}\r\n--graphql\r\n" ); let third = response.chunk().await.unwrap().unwrap(); assert_eq!( - std::str::from_utf8(&*third).unwrap(), + std::str::from_utf8(&third).unwrap(), "content-type: application/json\r\n\r\n{\"hasNext\":false}\r\n--graphql--\r\n" ); @@ -1640,7 +1640,7 @@ async fn multipart_response_shape_with_one_chunk() -> Result<(), ApolloRouterErr let first = response.chunk().await.unwrap().unwrap(); assert_eq!( - std::str::from_utf8(&*first).unwrap(), + std::str::from_utf8(&first).unwrap(), "\r\n--graphql\r\ncontent-type: application/json\r\n\r\n{\"data\":{\"test\":\"hello\"},\"hasNext\":false}\r\n--graphql--\r\n" ); diff --git a/apollo-router/src/configuration/mod.rs b/apollo-router/src/configuration/mod.rs index aa87cf0172..be8781b0f9 100644 --- a/apollo-router/src/configuration/mod.rs +++ b/apollo-router/src/configuration/mod.rs @@ -727,9 +727,11 @@ impl HealthCheck { enabled: enabled.unwrap_or_else(default_health_check), } } +} - // Used in tests - #[allow(dead_code)] +#[cfg(test)] +#[buildstructor::buildstructor] +impl HealthCheck { #[builder] pub(crate) fn fake_new(listen: Option, enabled: Option) -> Self { Self { diff --git a/apollo-router/src/plugins/expose_query_plan.rs b/apollo-router/src/plugins/expose_query_plan.rs index 124ea85c4f..e74fdd3591 100644 --- a/apollo-router/src/plugins/expose_query_plan.rs +++ b/apollo-router/src/plugins/expose_query_plan.rs @@ -229,12 +229,12 @@ mod tests { let supergraph = build_mock_supergraph(plugin).await; execute_supergraph_test( VALID_QUERY, - &*EXPECTED_RESPONSE_WITH_QUERY_PLAN, + &EXPECTED_RESPONSE_WITH_QUERY_PLAN, supergraph.clone(), ) .await; // let's try that again - execute_supergraph_test(VALID_QUERY, &*EXPECTED_RESPONSE_WITH_QUERY_PLAN, supergraph).await; + execute_supergraph_test(VALID_QUERY, &EXPECTED_RESPONSE_WITH_QUERY_PLAN, supergraph).await; } #[tokio::test] @@ -243,7 +243,7 @@ mod tests { let supergraph = build_mock_supergraph(plugin).await; execute_supergraph_test( VALID_QUERY, - &*EXPECTED_RESPONSE_WITHOUT_QUERY_PLAN, + &EXPECTED_RESPONSE_WITHOUT_QUERY_PLAN, supergraph, ) .await; diff --git a/apollo-router/src/plugins/include_subgraph_errors.rs b/apollo-router/src/plugins/include_subgraph_errors.rs index 4129a68de4..e17cfff077 100644 --- a/apollo-router/src/plugins/include_subgraph_errors.rs +++ b/apollo-router/src/plugins/include_subgraph_errors.rs @@ -214,7 +214,7 @@ mod test { // Build a redacting plugin let plugin = get_redacting_plugin(&serde_json::json!({ "all": false })).await; let router = build_mock_router(plugin).await; - execute_router_test(VALID_QUERY, &*EXPECTED_RESPONSE, router).await; + execute_router_test(VALID_QUERY, &EXPECTED_RESPONSE, router).await; } #[tokio::test] @@ -222,7 +222,7 @@ mod test { // Build a redacting plugin let plugin = get_redacting_plugin(&serde_json::json!({ "all": false })).await; let router = build_mock_router(plugin).await; - execute_router_test(ERROR_PRODUCT_QUERY, &*REDACTED_PRODUCT_RESPONSE, router).await; + execute_router_test(ERROR_PRODUCT_QUERY, &REDACTED_PRODUCT_RESPONSE, router).await; } #[tokio::test] @@ -230,7 +230,7 @@ mod test { // Build a redacting plugin let plugin = get_redacting_plugin(&serde_json::json!({})).await; let router = build_mock_router(plugin).await; - execute_router_test(ERROR_PRODUCT_QUERY, &*REDACTED_PRODUCT_RESPONSE, router).await; + execute_router_test(ERROR_PRODUCT_QUERY, &REDACTED_PRODUCT_RESPONSE, router).await; } #[tokio::test] @@ -238,7 +238,7 @@ mod test { // Build a redacting plugin let plugin = get_redacting_plugin(&serde_json::json!({ "all": true })).await; let router = build_mock_router(plugin).await; - execute_router_test(ERROR_PRODUCT_QUERY, &*UNREDACTED_PRODUCT_RESPONSE, router).await; + execute_router_test(ERROR_PRODUCT_QUERY, &UNREDACTED_PRODUCT_RESPONSE, router).await; } #[tokio::test] @@ -247,7 +247,7 @@ mod test { let plugin = get_redacting_plugin(&serde_json::json!({ "subgraphs": {"products": true }})).await; let router = build_mock_router(plugin).await; - execute_router_test(ERROR_PRODUCT_QUERY, &*UNREDACTED_PRODUCT_RESPONSE, router).await; + execute_router_test(ERROR_PRODUCT_QUERY, &UNREDACTED_PRODUCT_RESPONSE, router).await; } #[tokio::test] @@ -256,7 +256,7 @@ mod test { let plugin = get_redacting_plugin(&serde_json::json!({ "subgraphs": {"reviews": true }})).await; let router = build_mock_router(plugin).await; - execute_router_test(ERROR_PRODUCT_QUERY, &*REDACTED_PRODUCT_RESPONSE, router).await; + execute_router_test(ERROR_PRODUCT_QUERY, &REDACTED_PRODUCT_RESPONSE, router).await; } #[tokio::test] @@ -267,7 +267,7 @@ mod test { ) .await; let router = build_mock_router(plugin).await; - execute_router_test(ERROR_PRODUCT_QUERY, &*UNREDACTED_PRODUCT_RESPONSE, router).await; + execute_router_test(ERROR_PRODUCT_QUERY, &UNREDACTED_PRODUCT_RESPONSE, router).await; } #[tokio::test] @@ -278,7 +278,7 @@ mod test { ) .await; let router = build_mock_router(plugin).await; - execute_router_test(ERROR_PRODUCT_QUERY, &*REDACTED_PRODUCT_RESPONSE, router).await; + execute_router_test(ERROR_PRODUCT_QUERY, &REDACTED_PRODUCT_RESPONSE, router).await; } #[tokio::test] @@ -289,7 +289,7 @@ mod test { ) .await; let router = build_mock_router(plugin).await; - execute_router_test(ERROR_PRODUCT_QUERY, &*UNREDACTED_PRODUCT_RESPONSE, router).await; + execute_router_test(ERROR_PRODUCT_QUERY, &UNREDACTED_PRODUCT_RESPONSE, router).await; } #[tokio::test] @@ -300,6 +300,6 @@ mod test { ) .await; let router = build_mock_router(plugin).await; - execute_router_test(ERROR_ACCOUNT_QUERY, &*REDACTED_ACCOUNT_RESPONSE, router).await; + execute_router_test(ERROR_ACCOUNT_QUERY, &REDACTED_ACCOUNT_RESPONSE, router).await; } } diff --git a/apollo-router/src/plugins/telemetry/tracing/apollo_telemetry.rs b/apollo-router/src/plugins/telemetry/tracing/apollo_telemetry.rs index 9ed26f161a..b289e60894 100644 --- a/apollo-router/src/plugins/telemetry/tracing/apollo_telemetry.rs +++ b/apollo-router/src/plugins/telemetry/tracing/apollo_telemetry.rs @@ -110,7 +110,7 @@ pub(crate) struct Exporter { enum TreeData { Request(Result, Error>), Supergraph { - http: Http, + http: Box, client_name: Option, client_version: Option, operation_signature: String, @@ -210,7 +210,7 @@ impl Exporter { } fn extract_trace(&mut self, span: SpanData) -> Result, Error> { - self.extract_data_from_spans(&span, &span)? + self.extract_data_from_spans(&span)? .pop() .and_then(|node| { if let TreeData::Request(trace) = node { @@ -222,18 +222,14 @@ impl Exporter { .expect("root trace must exist because it is constructed on the request span, qed") } - fn extract_data_from_spans( - &mut self, - root_span: &SpanData, - span: &SpanData, - ) -> Result, Error> { + fn extract_data_from_spans(&mut self, span: &SpanData) -> Result, Error> { let (mut child_nodes, errors) = self .spans_by_parent_id .pop_entry(&span.span_context.span_id()) .map(|(_, spans)| spans) .unwrap_or_default() .into_iter() - .map(|span| self.extract_data_from_spans(root_span, &span)) + .map(|span| self.extract_data_from_spans(&span)) .fold((Vec::new(), Vec::new()), |(mut oks, mut errors), next| { match next { Ok(mut children) => oks.append(&mut children), @@ -315,7 +311,7 @@ impl Exporter { SUPERGRAPH_SPAN_NAME => { //Currently some data is in the supergraph span as we don't have the a request hook in plugin. child_nodes.push(TreeData::Supergraph { - http: extract_http_data(span, &self.expose_trace_id_config), + http: Box::new(extract_http_data(span, &self.expose_trace_id_config)), client_name: span.attributes.get(&CLIENT_NAME).and_then(extract_string), client_version: span .attributes diff --git a/apollo-router/src/plugins/traffic_shaping/mod.rs b/apollo-router/src/plugins/traffic_shaping/mod.rs index 1c3bce544b..1a46abe513 100644 --- a/apollo-router/src/plugins/traffic_shaping/mod.rs +++ b/apollo-router/src/plugins/traffic_shaping/mod.rs @@ -503,7 +503,7 @@ mod test { // Build a traffic shaping plugin let plugin = get_traffic_shaping_plugin(&config).await; let router = build_mock_router_with_variable_dedup_optimization(plugin).await; - execute_router_test(VALID_QUERY, &*EXPECTED_RESPONSE, router).await; + execute_router_test(VALID_QUERY, &EXPECTED_RESPONSE, router).await; } #[tokio::test] diff --git a/apollo-router/src/query_planner/bridge_query_planner.rs b/apollo-router/src/query_planner/bridge_query_planner.rs index 8fd072e311..fde32b5451 100644 --- a/apollo-router/src/query_planner/bridge_query_planner.rs +++ b/apollo-router/src/query_planner/bridge_query_planner.rs @@ -122,7 +122,7 @@ impl BridgeQueryPlanner { }, usage_reporting, } => { - let subselections = node.parse_subselections(&*self.schema)?; + let subselections = node.parse_subselections(&self.schema)?; selections.subselections = subselections; Ok(QueryPlannerContent::Plan { plan: Arc::new(query_planner::QueryPlan { diff --git a/apollo-router/src/query_planner/caching_query_planner.rs b/apollo-router/src/query_planner/caching_query_planner.rs index 7f4d2861be..a2e263a8ed 100644 --- a/apollo-router/src/query_planner/caching_query_planner.rs +++ b/apollo-router/src/query_planner/caching_query_planner.rs @@ -94,7 +94,7 @@ where } if let Some(QueryPlannerContent::Plan { plan, .. }) = &content { - match (&plan.usage_reporting).serialize(Serializer) { + match (plan.usage_reporting).serialize(Serializer) { Ok(v) => { context.insert_json_value(USAGE_REPORTING, v); } @@ -127,7 +127,7 @@ where match res { Ok(content) => { if let QueryPlannerContent::Plan { plan, .. } = &content { - match (&plan.usage_reporting).serialize(Serializer) { + match (plan.usage_reporting).serialize(Serializer) { Ok(v) => { context.insert_json_value(USAGE_REPORTING, v); } diff --git a/apollo-router/src/query_planner/fetch.rs b/apollo-router/src/query_planner/fetch.rs index 67adce27d8..4a95f2463b 100644 --- a/apollo-router/src/query_planner/fetch.rs +++ b/apollo-router/src/query_planner/fetch.rs @@ -228,7 +228,7 @@ impl FetchNode { parameters .schema .subgraphs() - .find_map(|(name, url)| (name == service_name).then(|| url)) + .find_map(|(name, url)| (name == service_name).then_some(url)) .unwrap_or_else(|| { panic!( "schema uri for subgraph '{}' should already have been checked", diff --git a/apollo-router/src/router_factory.rs b/apollo-router/src/router_factory.rs index d7ca5dc369..87a23953de 100644 --- a/apollo-router/src/router_factory.rs +++ b/apollo-router/src/router_factory.rs @@ -129,7 +129,7 @@ impl SupergraphServiceConfigurator for YamlSupergraphServiceFactory { let subgraph_service = match plugins .iter() .find(|i| i.0.as_str() == APOLLO_TRAFFIC_SHAPING) - .and_then(|plugin| (&*plugin.1).as_any().downcast_ref::()) + .and_then(|plugin| (*plugin.1).as_any().downcast_ref::()) { Some(shaping) => { Either::A(shaping.subgraph_service_internal(name, SubgraphService::new(name))) diff --git a/dockerfiles/diy/dockerfiles/Dockerfile.repo b/dockerfiles/diy/dockerfiles/Dockerfile.repo index 4203c3ca12..5ec4a2e233 100644 --- a/dockerfiles/diy/dockerfiles/Dockerfile.repo +++ b/dockerfiles/diy/dockerfiles/Dockerfile.repo @@ -1,6 +1,6 @@ # Use the rust build image from docker as our base # renovate-automation: rustc version -FROM rust:1.63.0 as build +FROM rust:1.65.0 as build # Set our working directory for the build WORKDIR /usr/src/router diff --git a/licenses.html b/licenses.html index 49cc81fd3d..0f9c5fa8ad 100644 --- a/licenses.html +++ b/licenses.html @@ -10220,7 +10220,7 @@

Used by:

-
Copyright (c) <year> <owner> All rights reserved.
+                
Copyright (c) <year> <owner> 
 
 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
 
@@ -10369,7 +10369,7 @@ 

Used by:

-
Copyright (c) <year> <owner>. All rights reserved.
+                
Copyright (c) <year> <owner>. 
 
 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
 
diff --git a/rust-toolchain.toml b/rust-toolchain.toml
index edee2099f9..8bfb9f2b1c 100644
--- a/rust-toolchain.toml
+++ b/rust-toolchain.toml
@@ -1,4 +1,4 @@
 [toolchain]
 # renovate-automation: rustc version
-channel = "1.63.0"
+channel = "1.65.0"
 components = [ "rustfmt", "clippy" ]