From 4c97b961db1049fd9d848e74cd868b8e643c90eb Mon Sep 17 00:00:00 2001 From: Georgy Moshkin <gmoshkin@picodata.io> Date: Mon, 22 Jan 2024 13:20:33 +0300 Subject: [PATCH] feat: .proc_version_info --- src/info.rs | 43 +++++++++++++++++++++++++++++++++++++++++ src/lib.rs | 2 ++ src/luamod.rs | 2 +- test/int/test_basics.py | 5 +++++ 4 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/info.rs diff --git a/src/info.rs b/src/info.rs new file mode 100644 index 0000000000..975fd36fb3 --- /dev/null +++ b/src/info.rs @@ -0,0 +1,43 @@ +use std::borrow::Cow; +use tarantool::proc; + +pub const PICODATA_VERSION: &'static str = std::env!("GIT_DESCRIBE"); +pub const PROC_API_VERSION: &'static str = "0.1.0"; + +//////////////////////////////////////////////////////////////////////////////// +// VersionInfo +//////////////////////////////////////////////////////////////////////////////// + +#[derive(Clone, Debug, ::serde::Serialize, ::serde::Deserialize)] +pub struct VersionInfo<'a> { + pub picodata_version: Cow<'a, str>, + pub proc_api_version: Cow<'a, str>, +} + +impl tarantool::tuple::Encode for VersionInfo<'_> {} + +impl tarantool::proc::Return for VersionInfo<'_> { + #[inline(always)] + fn ret(self, ctx: tarantool::tuple::FunctionCtx) -> std::os::raw::c_int { + tarantool::proc::ReturnMsgpack(self).ret(ctx) + } +} + +impl VersionInfo<'static> { + #[inline(always)] + pub fn current() -> Self { + Self { + picodata_version: PICODATA_VERSION.into(), + proc_api_version: PROC_API_VERSION.into(), + } + } +} + +//////////////////////////////////////////////////////////////////////////////// +// .proc_version_info +//////////////////////////////////////////////////////////////////////////////// + +#[proc] +pub fn proc_version_info() -> VersionInfo<'static> { + VersionInfo::current() +} diff --git a/src/lib.rs b/src/lib.rs index ecfc5eecda..1a386726ea 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,6 +3,7 @@ #![allow(clippy::let_and_return)] #![allow(clippy::needless_return)] #![allow(clippy::unwrap_or_default)] +#![allow(clippy::redundant_static_lifetimes)] use serde::{Deserialize, Serialize}; use ::raft::prelude as raft; @@ -41,6 +42,7 @@ pub mod discovery; pub mod error_injection; pub mod failure_domain; pub mod governor; +pub mod info; pub mod instance; pub mod ipc; pub mod kvcell; diff --git a/src/luamod.rs b/src/luamod.rs index 86cdd25c98..238f4ad49b 100644 --- a/src/luamod.rs +++ b/src/luamod.rs @@ -67,7 +67,7 @@ pub(crate) fn setup(args: &args::Run) { "}, { const _: () = assert!(str_eq(env!("CARGO_PKG_VERSION"), "23.12.0")); - env!("GIT_DESCRIBE") + crate::info::PICODATA_VERSION }, ); diff --git a/test/int/test_basics.py b/test/int/test_basics.py index 4b2fc4d13a..281301a481 100644 --- a/test/int/test_basics.py +++ b/test/int/test_basics.py @@ -320,3 +320,8 @@ def test_governor_notices_restarts(instance: Instance): check_vshard_configured(instance) assert instance.current_grade() == dict(variant="Online", incarnation=2) + + +def test_proc_version_info(instance: Instance): + info = instance.call(".proc_version_info") + assert info.keys() == set(["picodata_version", "proc_api_version"]) # type: ignore -- GitLab