From b68a277b5e638926284c9927a189d3e77a7f4309 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Tue, 5 Mar 2024 14:11:33 -0800 Subject: [PATCH] Fix tracing subscriber after introducing Tokio-console (#8907) We've also upgraded `Axum` in order to avoid having two versions of that library in Collab (one due to Tokio-console). Release Notes: - N/A --------- Co-authored-by: Conrad --- Cargo.lock | 127 ++++++++------------------ crates/collab/Cargo.toml | 8 +- crates/collab/k8s/collab.template.yml | 2 + crates/collab/src/api.rs | 6 +- crates/collab/src/api/events.rs | 9 +- crates/collab/src/api/extensions.rs | 2 +- crates/collab/src/lib.rs | 4 +- crates/collab/src/main.rs | 31 ++++--- crates/collab/src/rpc.rs | 2 +- script/run-local-minio | 2 +- 10 files changed, 75 insertions(+), 118 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a3aecf8ed9..c012316eaa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1224,13 +1224,13 @@ dependencies = [ [[package]] name = "axum" -version = "0.5.17" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acee9fd5073ab6b045a275b3e709c163dd36c90685219cb21804a147b58dba43" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" dependencies = [ "async-trait", - "axum-core 0.2.9", - "base64 0.13.1", + "axum-core", + "base64 0.21.4", "bitflags 1.3.2", "bytes 1.5.0", "futures-util", @@ -1239,68 +1239,25 @@ dependencies = [ "http-body", "hyper", "itoa", - "matchit 0.5.0", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "serde", - "serde_json", - "serde_urlencoded", - "sha-1 0.10.1", - "sync_wrapper", - "tokio", - "tokio-tungstenite", - "tower", - "tower-http 0.3.5", - "tower-layer", - "tower-service", -] - -[[package]] -name = "axum" -version = "0.6.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" -dependencies = [ - "async-trait", - "axum-core 0.3.4", - "bitflags 1.3.2", - "bytes 1.5.0", - "futures-util", - "http 0.2.9", - "http-body", - "hyper", - "itoa", - "matchit 0.7.3", + "matchit", "memchr", "mime", "percent-encoding", "pin-project-lite", "rustversion", "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sha1", "sync_wrapper", + "tokio", + "tokio-tungstenite", "tower", "tower-layer", "tower-service", ] -[[package]] -name = "axum-core" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37e5939e02c56fecd5c017c37df4238c0a839fa76b7f97acdd7efb804fd181cc" -dependencies = [ - "async-trait", - "bytes 1.5.0", - "futures-util", - "http 0.2.9", - "http-body", - "mime", - "tower-layer", - "tower-service", -] - [[package]] name = "axum-core" version = "0.3.4" @@ -1320,11 +1277,11 @@ dependencies = [ [[package]] name = "axum-extra" -version = "0.3.7" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69034b3b0fd97923eee2ce8a47540edb21e07f48f87f67d44bb4271cec622bdb" +checksum = "f9a320103719de37b7b4da4c8eb629d4573f6bcfd3dfe80d3208806895ccf81d" dependencies = [ - "axum 0.5.17", + "axum", "bytes 1.5.0", "futures-util", "http 0.2.9", @@ -2264,7 +2221,7 @@ dependencies = [ "audio", "aws-config", "aws-sdk-s3", - "axum 0.5.17", + "axum", "axum-extra", "call", "channel", @@ -2286,7 +2243,6 @@ dependencies = [ "git", "gpui", "hex", - "hyper", "indoc", "language", "lazy_static", @@ -2326,7 +2282,6 @@ dependencies = [ "tower", "tower-http 0.4.4", "tracing", - "tracing-log", "tracing-subscriber", "unindent", "util", @@ -3060,6 +3015,12 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" +[[package]] +name = "data-encoding" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" + [[package]] name = "data-url" version = "0.1.1" @@ -5805,12 +5766,6 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" -[[package]] -name = "matchit" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73cbba799671b762df5a175adf59ce145165747bb891505c43d09aefbbf38beb" - [[package]] name = "matchit" version = "0.7.3" @@ -8853,6 +8808,16 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_path_to_error" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebd154a240de39fdebcf5775d2675c204d7c13cf39a4c697be6493c8e734337c" +dependencies = [ + "itoa", + "serde", +] + [[package]] name = "serde_repr" version = "0.1.16" @@ -8924,17 +8889,6 @@ dependencies = [ "opaque-debug", ] -[[package]] -name = "sha-1" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" -dependencies = [ - "cfg-if 1.0.0", - "cpufeatures", - "digest 0.10.7", -] - [[package]] name = "sha1" version = "0.10.6" @@ -10292,14 +10246,14 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.17.2" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f714dd15bead90401d77e04243611caec13726c2408afd5b31901dfcdcb3b181" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" dependencies = [ "futures-util", "log", "tokio", - "tungstenite 0.17.3", + "tungstenite 0.20.1", ] [[package]] @@ -10390,7 +10344,7 @@ checksum = "d560933a0de61cf715926b9cac824d4c883c2c43142f787595e48280c40a1d0e" dependencies = [ "async-stream", "async-trait", - "axum 0.6.20", + "axum", "base64 0.21.4", "bytes 1.5.0", "h2", @@ -10443,7 +10397,6 @@ dependencies = [ "http-body", "http-range-header", "pin-project-lite", - "tower", "tower-layer", "tower-service", ] @@ -11044,7 +10997,7 @@ dependencies = [ "log", "native-tls", "rand 0.8.5", - "sha-1 0.9.8", + "sha-1", "thiserror", "url", "utf-8", @@ -11052,18 +11005,18 @@ dependencies = [ [[package]] name = "tungstenite" -version = "0.17.3" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" dependencies = [ - "base64 0.13.1", "byteorder", "bytes 1.5.0", + "data-encoding", "http 0.2.9", "httparse", "log", "rand 0.8.5", - "sha-1 0.10.1", + "sha1", "thiserror", "url", "utf-8", diff --git a/crates/collab/Cargo.toml b/crates/collab/Cargo.toml index 95ee83fd48..c32bb53237 100644 --- a/crates/collab/Cargo.toml +++ b/crates/collab/Cargo.toml @@ -22,8 +22,8 @@ anyhow.workspace = true async-tungstenite = "0.16" aws-config = { version = "1.1.5" } aws-sdk-s3 = { version = "1.15.0" } -axum = { version = "0.5", features = ["json", "headers", "ws"] } -axum-extra = { version = "0.3", features = ["erased-json"] } +axum = { version = "0.6", features = ["json", "headers", "ws"] } +axum-extra = { version = "0.4", features = ["erased-json"] } chrono.workspace = true clock.workspace = true clickhouse.workspace = true @@ -32,7 +32,6 @@ dashmap = "5.4" envy = "0.4.2" futures.workspace = true hex.workspace = true -hyper = "0.14" live_kit_server.workspace = true log.workspace = true nanoid = "0.4" @@ -59,8 +58,7 @@ toml.workspace = true tower = "0.4" tower-http = { workspace = true, features = ["trace"] } tracing = "0.1.34" -tracing-log = "0.1.3" -tracing-subscriber = { version = "0.3.11", features = ["env-filter", "json"] } +tracing-subscriber = { version = "0.3.11", features = ["env-filter", "json", "registry", "tracing-log"] } util.workspace = true uuid.workspace = true diff --git a/crates/collab/k8s/collab.template.yml b/crates/collab/k8s/collab.template.yml index 2ce3c3d34a..e1ec20b07c 100644 --- a/crates/collab/k8s/collab.template.yml +++ b/crates/collab/k8s/collab.template.yml @@ -63,6 +63,8 @@ spec: ports: - containerPort: 8080 protocol: TCP + - containerPort: 6669 + protocol: TCP livenessProbe: httpGet: path: /healthz diff --git a/crates/collab/src/api.rs b/crates/collab/src/api.rs index d227211fc1..15c07838ae 100644 --- a/crates/collab/src/api.rs +++ b/crates/collab/src/api.rs @@ -11,7 +11,7 @@ use crate::{ use anyhow::anyhow; use axum::{ body::Body, - extract::{Path, Query}, + extract::{self, Path, Query}, http::{self, Request, StatusCode}, middleware::{self, Next}, response::IntoResponse, @@ -26,7 +26,7 @@ use tower::ServiceBuilder; pub use extensions::fetch_extensions_from_blob_store_periodically; -pub fn routes(rpc_server: Option>, state: Arc) -> Router { +pub fn routes(rpc_server: Option>, state: Arc) -> Router<(), Body> { Router::new() .route("/user", get(get_authenticated_user)) .route("/users/:id/access_tokens", post(create_access_token)) @@ -176,8 +176,8 @@ async fn check_is_contributor( } async fn add_contributor( - Json(params): Json, Extension(app): Extension>, + extract::Json(params): extract::Json, ) -> Result<()> { app.db .add_contributor( diff --git a/crates/collab/src/api/events.rs b/crates/collab/src/api/events.rs index 40700a859b..102609f2d9 100644 --- a/crates/collab/src/api/events.rs +++ b/crates/collab/src/api/events.rs @@ -3,9 +3,12 @@ use std::sync::{Arc, OnceLock}; use anyhow::{anyhow, Context}; use aws_sdk_s3::primitives::ByteStream; use axum::{ - body::Bytes, headers::Header, http::HeaderName, routing::post, Extension, Router, TypedHeader, + body::Bytes, + headers::Header, + http::{HeaderMap, HeaderName, StatusCode}, + routing::post, + Extension, Router, TypedHeader, }; -use hyper::{HeaderMap, StatusCode}; use serde::{Serialize, Serializer}; use sha2::{Digest, Sha256}; use telemetry_events::{ @@ -81,8 +84,8 @@ impl Header for CloudflareIpCountryHeader { pub async fn post_crash( Extension(app): Extension>, - body: Bytes, headers: HeaderMap, + body: Bytes, ) -> Result<()> { static CRASH_REPORTS_BUCKET: &str = "zed-crash-reports"; diff --git a/crates/collab/src/api/extensions.rs b/crates/collab/src/api/extensions.rs index c276e219d1..34b5ae0d9f 100644 --- a/crates/collab/src/api/extensions.rs +++ b/crates/collab/src/api/extensions.rs @@ -7,12 +7,12 @@ use anyhow::{anyhow, Context as _}; use aws_sdk_s3::presigning::PresigningConfig; use axum::{ extract::{Path, Query}, + http::StatusCode, response::Redirect, routing::get, Extension, Json, Router, }; use collections::HashMap; -use hyper::StatusCode; use serde::{Deserialize, Serialize}; use std::{sync::Arc, time::Duration}; use time::PrimitiveDateTime; diff --git a/crates/collab/src/lib.rs b/crates/collab/src/lib.rs index 0be28c1358..616405edad 100644 --- a/crates/collab/src/lib.rs +++ b/crates/collab/src/lib.rs @@ -43,8 +43,8 @@ impl From for Error { } } -impl From for Error { - fn from(error: hyper::Error) -> Self { +impl From for Error { + fn from(error: axum::http::Error) -> Self { Self::Internal(error.into()) } } diff --git a/crates/collab/src/main.rs b/crates/collab/src/main.rs index 489a86c4ba..7f4cb8e0cb 100644 --- a/crates/collab/src/main.rs +++ b/crates/collab/src/main.rs @@ -1,11 +1,10 @@ use anyhow::anyhow; -use axum::{extract::MatchedPath, routing::get, Extension, Router}; +use axum::{extract::MatchedPath, http::Request, routing::get, Extension, Router}; use collab::{ api::fetch_extensions_from_blob_store_periodically, db, env, executor::Executor, AppState, Config, MigrateConfig, Result, }; use db::Database; -use hyper::Request; use std::{ env::args, net::{SocketAddr, TcpListener}, @@ -16,8 +15,9 @@ use std::{ use tokio::signal::unix::SignalKind; use tower_http::trace::{self, TraceLayer}; use tracing::Level; -use tracing_log::LogTracer; -use tracing_subscriber::{filter::EnvFilter, fmt::format::JsonFields, Layer}; +use tracing_subscriber::{ + filter::EnvFilter, fmt::format::JsonFields, util::SubscriberInitExt, Layer, +}; use util::ResultExt; const VERSION: &str = env!("CARGO_PKG_VERSION"); @@ -25,7 +25,6 @@ const REVISION: Option<&'static str> = option_env!("GITHUB_SHA"); #[tokio::main] async fn main() -> Result<()> { - console_subscriber::init(); if let Err(error) = env::load_dotenv() { eprintln!( "error loading .env.toml (this is expected in production): {}", @@ -112,7 +111,8 @@ async fn main() -> Result<()> { ); #[cfg(unix)] - axum::Server::from_tcp(listener)? + axum::Server::from_tcp(listener) + .map_err(|e| anyhow!(e))? .serve(app.into_make_service_with_connect_info::()) .with_graceful_shutdown(async move { let mut sigterm = tokio::signal::unix::signal(SignalKind::terminate()) @@ -129,7 +129,8 @@ async fn main() -> Result<()> { rpc_server.teardown(); } }) - .await?; + .await + .map_err(|e| anyhow!(e))?; // todo("windows") #[cfg(windows)] @@ -179,11 +180,11 @@ async fn handle_liveness_probe(Extension(state): Extension>) -> Re pub fn init_tracing(config: &Config) -> Option<()> { use std::str::FromStr; use tracing_subscriber::layer::SubscriberExt; - let rust_log = config.rust_log.clone()?; - LogTracer::init().log_err()?; + let filter = EnvFilter::from_str(config.rust_log.as_deref()?).log_err()?; - let subscriber = tracing_subscriber::Registry::default() + tracing_subscriber::registry() + .with(console_subscriber::spawn()) .with(if config.log_json.unwrap_or(false) { Box::new( tracing_subscriber::fmt::layer() @@ -193,17 +194,17 @@ pub fn init_tracing(config: &Config) -> Option<()> { .json() .flatten_event(true) .with_span_list(true), - ), + ) + .with_filter(filter), ) as Box + Send + Sync> } else { Box::new( tracing_subscriber::fmt::layer() - .event_format(tracing_subscriber::fmt::format().pretty()), + .event_format(tracing_subscriber::fmt::format().pretty()) + .with_filter(filter), ) }) - .with(EnvFilter::from_str(rust_log.as_str()).log_err()?); - - tracing::subscriber::set_global_default(subscriber).unwrap(); + .init(); None } diff --git a/crates/collab/src/rpc.rs b/crates/collab/src/rpc.rs index 4fda8b9959..5362f80df2 100644 --- a/crates/collab/src/rpc.rs +++ b/crates/collab/src/rpc.rs @@ -844,7 +844,7 @@ impl Header for AppVersionHeader { } } -pub fn routes(server: Arc) -> Router { +pub fn routes(server: Arc) -> Router<(), Body> { Router::new() .route("/rpc", get(handle_websocket_request)) .layer( diff --git a/script/run-local-minio b/script/run-local-minio index 8d2d4877ff..292e676c9d 100755 --- a/script/run-local-minio +++ b/script/run-local-minio @@ -6,4 +6,4 @@ mkdir -p .blob_store/zed-crash-reports export MINIO_ROOT_USER=the-blob-store-access-key export MINIO_ROOT_PASSWORD=the-blob-store-secret-key -minio server --quiet .blob_store +exec minio server --quiet .blob_store