From 08ded45c7a37f712fb790bb3c386ca251b701e34 Mon Sep 17 00:00:00 2001 From: Ning Sun Date: Thu, 26 Mar 2026 18:18:06 +0800 Subject: [PATCH] feat: add common_version customization (#7869) * feat: add product name customization * chore: update tests --- Cargo.lock | 1 + src/cmd/Cargo.toml | 1 + src/cmd/src/bin/greptime.rs | 10 +++++----- src/cmd/src/cli.rs | 2 +- src/cmd/src/datanode.rs | 2 +- src/cmd/src/flownode.rs | 3 ++- src/cmd/src/frontend.rs | 2 +- src/cmd/src/metasrv.rs | 3 ++- src/cmd/src/standalone.rs | 3 ++- src/common/function/src/system/version.rs | 9 +++++++-- src/common/version/build.rs | 8 ++++++++ src/common/version/src/lib.rs | 4 ++++ src/servers/src/mysql/federated.rs | 5 +++-- src/servers/src/postgres.rs | 6 +++++- tests/cases/standalone/common/mysql.result | 2 +- 15 files changed, 44 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b3000970b3..d8f6241136 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2055,6 +2055,7 @@ dependencies = [ "common-time", "common-version", "common-wal", + "const_format", "datafusion", "datafusion-common", "datafusion-physical-plan", diff --git a/src/cmd/Cargo.toml b/src/cmd/Cargo.toml index d547ec6e81..003f1434f4 100644 --- a/src/cmd/Cargo.toml +++ b/src/cmd/Cargo.toml @@ -54,6 +54,7 @@ common-telemetry = { workspace = true, features = [ common-time.workspace = true common-version.workspace = true common-wal.workspace = true +const_format.workspace = true datafusion.workspace = true datafusion-common.workspace = true datafusion-physical-plan.workspace = true diff --git a/src/cmd/src/bin/greptime.rs b/src/cmd/src/bin/greptime.rs index a34d8e0f38..7ddc2cd176 100644 --- a/src/cmd/src/bin/greptime.rs +++ b/src/cmd/src/bin/greptime.rs @@ -20,11 +20,11 @@ use cmd::error::{InitTlsProviderSnafu, Result}; use cmd::options::GlobalOptions; use cmd::{App, cli, datanode, flownode, frontend, metasrv, standalone}; use common_base::Plugins; -use common_version::{verbose_version, version}; +use common_version::{product_name, verbose_version, version}; use servers::install_ring_crypto_provider; #[derive(Parser)] -#[command(name = "greptime", author, version, long_version = verbose_version(), about)] +#[command(name = product_name(), author, version, long_version = verbose_version(), about)] #[command(propagate_version = true)] pub(crate) struct Command { #[clap(subcommand)] @@ -52,11 +52,11 @@ enum SubCommand { #[clap(name = "metasrv")] Metasrv(metasrv::Command), - /// Run greptimedb as a standalone service. + /// Start service in standalone mode. #[clap(name = "standalone")] Standalone(standalone::Command), - /// Execute the cli tools for greptimedb. + /// Execute the cli tools. #[clap(name = "cli")] Cli(cli::Command), } @@ -148,7 +148,7 @@ async fn start(cli: Command) -> Result<()> { fn setup_human_panic() { human_panic::setup_panic!( - human_panic::Metadata::new("GreptimeDB", version()) + human_panic::Metadata::new(product_name(), version()) .homepage("https://github.com/GreptimeTeam/greptimedb/discussions") ); diff --git a/src/cmd/src/cli.rs b/src/cmd/src/cli.rs index 84e797c291..501b7b1615 100644 --- a/src/cmd/src/cli.rs +++ b/src/cmd/src/cli.rs @@ -21,7 +21,7 @@ use tracing_appender::non_blocking::WorkerGuard; use crate::options::GlobalOptions; use crate::{App, Result, error}; -pub const APP_NAME: &str = "greptime-cli"; +pub const APP_NAME: &str = const_format::concatcp!(common_version::product_name(), "-cli"); use async_trait::async_trait; pub struct Instance { diff --git a/src/cmd/src/datanode.rs b/src/cmd/src/datanode.rs index 06e2568b72..2fadb1d210 100644 --- a/src/cmd/src/datanode.rs +++ b/src/cmd/src/datanode.rs @@ -43,7 +43,7 @@ use crate::error::{ }; use crate::options::{GlobalOptions, GreptimeOptions}; -pub const APP_NAME: &str = "greptime-datanode"; +pub const APP_NAME: &str = const_format::concatcp!(common_version::product_name(), "-datanode"); type DatanodeOptions = GreptimeOptions; diff --git a/src/cmd/src/flownode.rs b/src/cmd/src/flownode.rs index 3f8458cddf..8e3277cdb3 100644 --- a/src/cmd/src/flownode.rs +++ b/src/cmd/src/flownode.rs @@ -35,6 +35,7 @@ use common_stat::ResourceStatImpl; use common_telemetry::info; use common_telemetry::logging::{DEFAULT_LOGGING_DIR, TracingOptions}; use common_version::{short_version, verbose_version}; +use const_format::concatcp; use flow::{ FlownodeBuilder, FlownodeInstance, FlownodeServiceBuilder, FrontendClient, FrontendInvoker, get_flow_auth_options, @@ -52,7 +53,7 @@ use crate::error::{ use crate::options::{GlobalOptions, GreptimeOptions}; use crate::{App, create_resource_limit_metrics, log_versions, maybe_activate_heap_profile}; -pub const APP_NAME: &str = "greptime-flownode"; +pub const APP_NAME: &str = concatcp!(common_version::product_name(), "-flownode"); type FlownodeOptions = GreptimeOptions; diff --git a/src/cmd/src/frontend.rs b/src/cmd/src/frontend.rs index cb802791c5..07c9f775f2 100644 --- a/src/cmd/src/frontend.rs +++ b/src/cmd/src/frontend.rs @@ -72,7 +72,7 @@ pub struct Instance { _guard: Vec, } -pub const APP_NAME: &str = "greptime-frontend"; +pub const APP_NAME: &str = const_format::concatcp!(common_version::product_name(), "-frontend"); impl Instance { pub fn new(frontend: Frontend, _guard: Vec) -> Self { diff --git a/src/cmd/src/metasrv.rs b/src/cmd/src/metasrv.rs index 2ce5fb3a02..dec9edc193 100644 --- a/src/cmd/src/metasrv.rs +++ b/src/cmd/src/metasrv.rs @@ -24,6 +24,7 @@ use common_meta::distributed_time_constants::init_distributed_time_constants; use common_telemetry::info; use common_telemetry::logging::{DEFAULT_LOGGING_DIR, TracingOptions}; use common_version::{short_version, verbose_version}; +use const_format::concatcp; use meta_srv::bootstrap::{MetasrvInstance, metasrv_builder}; use meta_srv::metasrv::BackendImpl; use snafu::ResultExt; @@ -35,7 +36,7 @@ use crate::{App, create_resource_limit_metrics, log_versions, maybe_activate_hea type MetasrvOptions = GreptimeOptions; -pub const APP_NAME: &str = "greptime-metasrv"; +pub const APP_NAME: &str = concatcp!(common_version::product_name(), "-metasrv"); pub struct Instance { instance: MetasrvInstance, diff --git a/src/cmd/src/standalone.rs b/src/cmd/src/standalone.rs index 215bea0ec5..196ff07c92 100644 --- a/src/cmd/src/standalone.rs +++ b/src/cmd/src/standalone.rs @@ -48,6 +48,7 @@ use common_telemetry::info; use common_telemetry::logging::{DEFAULT_LOGGING_DIR, TracingOptions}; use common_time::timezone::set_default_timezone; use common_version::{short_version, verbose_version}; +use const_format::concatcp; use datanode::config::DatanodeOptions; use datanode::datanode::{Datanode, DatanodeBuilder}; use datanode::region_server::RegionServer; @@ -75,7 +76,7 @@ use crate::error::{OtherSnafu, Result, StartFlownodeSnafu}; use crate::options::{GlobalOptions, GreptimeOptions}; use crate::{App, create_resource_limit_metrics, error, log_versions, maybe_activate_heap_profile}; -pub const APP_NAME: &str = "greptime-standalone"; +pub const APP_NAME: &str = concatcp!(common_version::product_name(), "-standalone"); #[derive(Parser)] pub struct Command { diff --git a/src/common/function/src/system/version.rs b/src/common/function/src/system/version.rs index 1c148bd7ab..9170fb29f1 100644 --- a/src/common/function/src/system/version.rs +++ b/src/common/function/src/system/version.rs @@ -43,14 +43,19 @@ impl Function for VersionFunction { let version = match func_ctx.query_ctx.channel() { Channel::Mysql => { format!( - "{}-greptimedb-{}", + "{}-{}-{}", std::env::var("GREPTIMEDB_MYSQL_SERVER_VERSION") .unwrap_or_else(|_| "8.4.2".to_string()), + common_version::product_name(), common_version::version() ) } Channel::Postgres => { - format!("PostgreSQL 16.3 GreptimeDB {}", common_version::version()) + format!( + "PostgreSQL 16.3 {} {}", + common_version::product_name(), + common_version::version() + ) } _ => common_version::version().to_string(), }; diff --git a/src/common/version/build.rs b/src/common/version/build.rs index f147918c21..81c805484b 100644 --- a/src/common/version/build.rs +++ b/src/common/version/build.rs @@ -29,6 +29,7 @@ fn main() -> Result<(), Box> { let refresh = profile == "release"; println!("cargo:rerun-if-env-changed=RUSTC"); + println!("cargo:rerun-if-env-changed=GREPTIME_PRODUCT_NAME"); // The "CARGO_WORKSPACE_DIR" is set manually (not by Rust itself) in Cargo config file, to // solve the problem where the "CARGO_MANIFEST_DIR" is not what we want when this repo is @@ -44,6 +45,9 @@ fn main() -> Result<(), Box> { let product_version = load_product_version(&workspace_root); println!("cargo:rustc-env=GREPTIME_PRODUCT_VERSION={product_version}"); + let product_name = load_product_name(); + println!("cargo:rustc-env=GREPTIME_PRODUCT_NAME={product_name}"); + let repository = open_repository(&workspace_root); if refresh { @@ -100,6 +104,10 @@ fn load_product_version(workspace_root: &Path) -> String { .unwrap_or_else(|| env::var("CARGO_PKG_VERSION").unwrap()) } +fn load_product_name() -> String { + env::var("GREPTIME_PRODUCT_NAME").unwrap_or_else(|_| "GreptimeDB".to_string()) +} + fn emit_workspace_watch_list( workspace_root: &Path, repository: Option<&Repository>, diff --git a/src/common/version/src/lib.rs b/src/common/version/src/lib.rs index 82d64f532f..e651225d68 100644 --- a/src/common/version/src/lib.rs +++ b/src/common/version/src/lib.rs @@ -109,6 +109,10 @@ pub const fn version() -> &'static str { BUILD_INFO.version } +pub const fn product_name() -> &'static str { + env!("GREPTIME_PRODUCT_NAME") +} + pub const fn verbose_version() -> &'static str { const_format::formatcp!( "\nbranch: {}\ncommit: {}\nclean: {}\nversion: {}", diff --git a/src/servers/src/mysql/federated.rs b/src/servers/src/mysql/federated.rs index 92085f1e58..fa3aec144c 100644 --- a/src/servers/src/mysql/federated.rs +++ b/src/servers/src/mysql/federated.rs @@ -21,6 +21,7 @@ use std::sync::Arc; use common_query::Output; use common_recordbatch::RecordBatches; use common_time::timezone::system_timezone_name; +use common_version; use datatypes::prelude::ConcreteDataType; use datatypes::schema::{ColumnSchema, Schema}; use datatypes::vectors::StringVector; @@ -119,7 +120,7 @@ static VAR_VALUES: Lazy> = Lazy::new(|| { ("interactive_timeout", "31536000"), ("wait_timeout", "31536000"), ("net_write_timeout", "31536000"), - ("version_comment", "Greptime"), + ("version_comment", common_version::product_name()), ]) }); @@ -380,7 +381,7 @@ mod test { +-------------------+ | @@version_comment | +-------------------+ -| Greptime | +| GreptimeDB | +-------------------+"; test(query, expected); diff --git a/src/servers/src/postgres.rs b/src/servers/src/postgres.rs index 7533fe084c..58ef4fdd7b 100644 --- a/src/servers/src/postgres.rs +++ b/src/servers/src/postgres.rs @@ -50,7 +50,11 @@ pub(crate) struct GreptimeDBStartupParameters { impl GreptimeDBStartupParameters { fn new() -> GreptimeDBStartupParameters { GreptimeDBStartupParameters { - version: format!("16.3-greptimedb-{}", common_version::version()), + version: format!( + "16.3-{}-{}", + common_version::product_name(), + common_version::version() + ), } } } diff --git a/tests/cases/standalone/common/mysql.result b/tests/cases/standalone/common/mysql.result index 232cd3aed2..7414d2290d 100644 --- a/tests/cases/standalone/common/mysql.result +++ b/tests/cases/standalone/common/mysql.result @@ -13,7 +13,7 @@ SELECT @@version_comment; +-------------------+ | @@version_comment | +-------------------+ -| Greptime | +| GreptimeDB | +-------------------+ -- SQLNESS PROTOCOL MYSQL