From 537c8f2a9d609218f72d5ccfaa07d83072e26482 Mon Sep 17 00:00:00 2001 From: Dmitry Patsura Date: Mon, 17 Nov 2025 18:17:41 +0100 Subject: [PATCH 1/5] fix(native): Use async logger for Node.js non blocking STDOUT --- packages/cubejs-backend-native/Cargo.lock | 110 ++++++++++++++++-- packages/cubejs-backend-native/Cargo.toml | 4 +- .../cubejs-backend-native/src/node_export.rs | 26 ++++- 3 files changed, 128 insertions(+), 12 deletions(-) diff --git a/packages/cubejs-backend-native/Cargo.lock b/packages/cubejs-backend-native/Cargo.lock index 8daad0520d194..3104e6746e13e 100644 --- a/packages/cubejs-backend-native/Cargo.lock +++ b/packages/cubejs-backend-native/Cargo.lock @@ -531,6 +531,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "colored" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fde0e0ec90c9dfb3b4b1a0891a7dcd0e2bffde2f7efed5fe7c9bb00e5bfb915e" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "comfy-table" version = "5.0.1" @@ -603,14 +612,20 @@ dependencies = [ ] [[package]] -name = "crossbeam-utils" -version = "0.8.17" +name = "crossbeam-channel" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d96137f14f244c37f989d9fff8f95e6c18b918e71f36638f8c49112e4c78f" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" dependencies = [ - "cfg-if", + "crossbeam-utils", ] +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + [[package]] name = "crossterm" version = "0.27.0" @@ -711,6 +726,7 @@ dependencies = [ "libc", "log", "log-reroute", + "log_nonblock", "minijinja", "neon", "once_cell", @@ -929,6 +945,15 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "deranged" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" +dependencies = [ + "powerfmt", +] + [[package]] name = "digest" version = "0.10.7" @@ -1805,9 +1830,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.169" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "libloading" @@ -1849,9 +1874,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "log-reroute" @@ -1864,6 +1889,19 @@ dependencies = [ "once_cell", ] +[[package]] +name = "log_nonblock" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8f91dc1ced2808e0e1a2efff47bad435c8679ae6ee0a42ea90e98e0eaeb1239" +dependencies = [ + "colored 3.0.0", + "crossbeam-channel", + "libc", + "log", + "time", +] + [[package]] name = "lru" version = "0.13.0" @@ -2051,6 +2089,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" version = "0.1.45" @@ -2103,6 +2147,15 @@ dependencies = [ "libc", ] +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + [[package]] name = "object" version = "0.32.1" @@ -2384,6 +2437,12 @@ dependencies = [ "postgres-protocol", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -3072,7 +3131,7 @@ checksum = "b7de33c687404ec3045d4a0d437580455257c0436f858d702f244e7d652f9f07" dependencies = [ "atty", "chrono", - "colored", + "colored 1.9.4", "log", "winapi", ] @@ -3376,6 +3435,39 @@ dependencies = [ "threadpool", ] +[[package]] +name = "time" +version = "0.3.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +dependencies = [ + "deranged", + "itoa", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" + +[[package]] +name = "time-macros" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tinystr" version = "0.7.6" diff --git a/packages/cubejs-backend-native/Cargo.toml b/packages/cubejs-backend-native/Cargo.toml index ec59d90f8250e..0b2e24179fd43 100644 --- a/packages/cubejs-backend-native/Cargo.toml +++ b/packages/cubejs-backend-native/Cargo.toml @@ -44,6 +44,7 @@ serde_json = "1.0.127" simple_logger = "1.7.0" tokio = { version = "1", features = ["full", "rt"] } uuid = { version = "1", features = ["v4"] } +log_nonblock = { version = "0.1.2", optional = true } [dependencies.neon] version = "=1" @@ -51,7 +52,8 @@ default-features = false features = ["napi-1", "napi-4", "napi-6", "futures"] [features] -default = ["neon-entrypoint"] +default = ["neon-entrypoint", "async-log"] neon-debug = [] neon-entrypoint = [] python = ["pyo3", "pyo3-asyncio"] +async-log = ["log_nonblock"] diff --git a/packages/cubejs-backend-native/src/node_export.rs b/packages/cubejs-backend-native/src/node_export.rs index 4c9f07c6a898e..77f900e08da30 100644 --- a/packages/cubejs-backend-native/src/node_export.rs +++ b/packages/cubejs-backend-native/src/node_export.rs @@ -30,8 +30,11 @@ use std::sync::Arc; use cubesql::telemetry::LocalReporter; use cubesql::{telemetry::ReportingLogger, CubeError}; +#[cfg(feature = "async-log")] +use log_nonblock::NonBlockingLoggerBuilder; use neon::prelude::*; use neon::result::Throw; +#[cfg(not(feature = "async-log"))] use simple_logger::SimpleLogger; pub(crate) struct SQLInterface { @@ -578,8 +581,23 @@ pub fn setup_logger(mut cx: FunctionContext) -> JsResult { Ok(cx.undefined()) } -pub fn create_logger(log_level: log::Level) -> SimpleLogger { - SimpleLogger::new() +#[cfg(not(feature = "async-log"))] +pub fn create_logger(log_level: log::Level) -> Box { + let logger = SimpleLogger::new() + .with_level(log::Level::Error.to_level_filter()) + .with_module_level("cubesql", log_level.to_level_filter()) + .with_module_level("cube_xmla", log_level.to_level_filter()) + .with_module_level("cube_xmla_engine", log_level.to_level_filter()) + .with_module_level("cubejs_native", log_level.to_level_filter()) + .with_module_level("datafusion", log::Level::Warn.to_level_filter()) + .with_module_level("pg_srv", log::Level::Warn.to_level_filter()); + + Box::new(logger) +} + +#[cfg(feature = "async-log")] +pub fn create_logger(log_level: log::Level) -> Box { + let logger = NonBlockingLoggerBuilder::new() .with_level(log::Level::Error.to_level_filter()) .with_module_level("cubesql", log_level.to_level_filter()) .with_module_level("cube_xmla", log_level.to_level_filter()) @@ -587,6 +605,10 @@ pub fn create_logger(log_level: log::Level) -> SimpleLogger { .with_module_level("cubejs_native", log_level.to_level_filter()) .with_module_level("datafusion", log::Level::Warn.to_level_filter()) .with_module_level("pg_srv", log::Level::Warn.to_level_filter()) + .init() + .unwrap(); + + Box::new(logger) } pub fn setup_local_logger(log_level: log::Level) { From 604422c8853b92a73a955656ae10fff30cdba7f4 Mon Sep 17 00:00:00 2001 From: Dmitry Patsura Date: Tue, 18 Nov 2025 17:24:07 +0100 Subject: [PATCH 2/5] chore: update --- packages/cubejs-backend-native/Cargo.lock | 8 ++++---- packages/cubejs-backend-native/src/config.rs | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/cubejs-backend-native/Cargo.lock b/packages/cubejs-backend-native/Cargo.lock index 3104e6746e13e..2355ec4ae397c 100644 --- a/packages/cubejs-backend-native/Cargo.lock +++ b/packages/cubejs-backend-native/Cargo.lock @@ -537,7 +537,7 @@ version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fde0e0ec90c9dfb3b4b1a0891a7dcd0e2bffde2f7efed5fe7c9bb00e5bfb915e" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.48.0", ] [[package]] @@ -1841,7 +1841,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" dependencies = [ "cfg-if", - "windows-targets 0.52.0", + "windows-targets 0.48.5", ] [[package]] @@ -1891,9 +1891,9 @@ dependencies = [ [[package]] name = "log_nonblock" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8f91dc1ced2808e0e1a2efff47bad435c8679ae6ee0a42ea90e98e0eaeb1239" +checksum = "20f3c2ef2756268549320e0a746bf015e4ceda94b8e68bb88118ad8fec6513e3" dependencies = [ "colored 3.0.0", "crossbeam-channel", diff --git a/packages/cubejs-backend-native/src/config.rs b/packages/cubejs-backend-native/src/config.rs index 819b2a284e5b9..ec686a44398f6 100644 --- a/packages/cubejs-backend-native/src/config.rs +++ b/packages/cubejs-backend-native/src/config.rs @@ -47,7 +47,7 @@ impl NodeCubeServices { futures.push(tokio::spawn(async move { if let Err(e) = gateway_server.processing_loop().await { - log::error!("{}", e.to_string()); + log::error!("{}", e); }; Ok(()) From d04c3a12c2d6bcd566365916b9d28bf31bf9f63d Mon Sep 17 00:00:00 2001 From: Dmitry Patsura Date: Tue, 18 Nov 2025 17:28:56 +0100 Subject: [PATCH 3/5] chore: update --- packages/cubejs-backend-native/Cargo.lock | 8 ++++---- packages/cubejs-backend-native/Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/cubejs-backend-native/Cargo.lock b/packages/cubejs-backend-native/Cargo.lock index 2355ec4ae397c..963dbddd0ff51 100644 --- a/packages/cubejs-backend-native/Cargo.lock +++ b/packages/cubejs-backend-native/Cargo.lock @@ -537,7 +537,7 @@ version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fde0e0ec90c9dfb3b4b1a0891a7dcd0e2bffde2f7efed5fe7c9bb00e5bfb915e" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -1841,7 +1841,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" dependencies = [ "cfg-if", - "windows-targets 0.48.5", + "windows-targets 0.52.0", ] [[package]] @@ -1891,9 +1891,9 @@ dependencies = [ [[package]] name = "log_nonblock" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20f3c2ef2756268549320e0a746bf015e4ceda94b8e68bb88118ad8fec6513e3" +checksum = "fcd95818c159f1051341d8733810353b5c908121eda932fe6f23569459bc55bb" dependencies = [ "colored 3.0.0", "crossbeam-channel", diff --git a/packages/cubejs-backend-native/Cargo.toml b/packages/cubejs-backend-native/Cargo.toml index 0b2e24179fd43..78419dd31f0c8 100644 --- a/packages/cubejs-backend-native/Cargo.toml +++ b/packages/cubejs-backend-native/Cargo.toml @@ -44,7 +44,7 @@ serde_json = "1.0.127" simple_logger = "1.7.0" tokio = { version = "1", features = ["full", "rt"] } uuid = { version = "1", features = ["v4"] } -log_nonblock = { version = "0.1.2", optional = true } +log_nonblock = { version = "0.1.4", optional = true } [dependencies.neon] version = "=1" From 371127c347017c198330ad5913742fba7157d401 Mon Sep 17 00:00:00 2001 From: Dmitry Patsura Date: Tue, 18 Nov 2025 17:51:03 +0100 Subject: [PATCH 4/5] chore: update --- packages/cubejs-backend-native/Cargo.lock | 4 ++-- packages/cubejs-backend-native/Cargo.toml | 2 +- packages/cubejs-backend-native/src/node_export.rs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/cubejs-backend-native/Cargo.lock b/packages/cubejs-backend-native/Cargo.lock index 963dbddd0ff51..c9f9cef0f993d 100644 --- a/packages/cubejs-backend-native/Cargo.lock +++ b/packages/cubejs-backend-native/Cargo.lock @@ -1891,9 +1891,9 @@ dependencies = [ [[package]] name = "log_nonblock" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcd95818c159f1051341d8733810353b5c908121eda932fe6f23569459bc55bb" +checksum = "2dd865aac7b0ac610c132da39b2775ca0bd2554f97eb7ea7075917ce9ba70e89" dependencies = [ "colored 3.0.0", "crossbeam-channel", diff --git a/packages/cubejs-backend-native/Cargo.toml b/packages/cubejs-backend-native/Cargo.toml index 78419dd31f0c8..3c64e2fca4209 100644 --- a/packages/cubejs-backend-native/Cargo.toml +++ b/packages/cubejs-backend-native/Cargo.toml @@ -44,7 +44,7 @@ serde_json = "1.0.127" simple_logger = "1.7.0" tokio = { version = "1", features = ["full", "rt"] } uuid = { version = "1", features = ["v4"] } -log_nonblock = { version = "0.1.4", optional = true } +log_nonblock = { version = "0.1.5", optional = true } [dependencies.neon] version = "=1" diff --git a/packages/cubejs-backend-native/src/node_export.rs b/packages/cubejs-backend-native/src/node_export.rs index 77f900e08da30..2350d6ae0ca10 100644 --- a/packages/cubejs-backend-native/src/node_export.rs +++ b/packages/cubejs-backend-native/src/node_export.rs @@ -605,7 +605,7 @@ pub fn create_logger(log_level: log::Level) -> Box { .with_module_level("cubejs_native", log_level.to_level_filter()) .with_module_level("datafusion", log::Level::Warn.to_level_filter()) .with_module_level("pg_srv", log::Level::Warn.to_level_filter()) - .init() + .build() .unwrap(); Box::new(logger) From 5f0c1b0e36802251e5ae74bfa17f544001bc2d9d Mon Sep 17 00:00:00 2001 From: Dmitry Patsura Date: Tue, 18 Nov 2025 18:48:14 +0100 Subject: [PATCH 5/5] chore: update --- packages/cubejs-backend-native/Cargo.lock | 4 ++-- packages/cubejs-backend-native/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/cubejs-backend-native/Cargo.lock b/packages/cubejs-backend-native/Cargo.lock index c9f9cef0f993d..adff1c4afa07a 100644 --- a/packages/cubejs-backend-native/Cargo.lock +++ b/packages/cubejs-backend-native/Cargo.lock @@ -1891,9 +1891,9 @@ dependencies = [ [[package]] name = "log_nonblock" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dd865aac7b0ac610c132da39b2775ca0bd2554f97eb7ea7075917ce9ba70e89" +checksum = "996472e113c3ffe82a220863dfdd137a74b63995b413c1ea81b5a0d494d829d2" dependencies = [ "colored 3.0.0", "crossbeam-channel", diff --git a/packages/cubejs-backend-native/Cargo.toml b/packages/cubejs-backend-native/Cargo.toml index 3c64e2fca4209..4d0d7c5180a2e 100644 --- a/packages/cubejs-backend-native/Cargo.toml +++ b/packages/cubejs-backend-native/Cargo.toml @@ -44,7 +44,7 @@ serde_json = "1.0.127" simple_logger = "1.7.0" tokio = { version = "1", features = ["full", "rt"] } uuid = { version = "1", features = ["v4"] } -log_nonblock = { version = "0.1.5", optional = true } +log_nonblock = { version = "0.1.6", optional = true } [dependencies.neon] version = "=1"