diff --git a/src/info.rs b/src/info.rs new file mode 100644 index 0000000000000000000000000000000000000000..975fd36fb33bfb6d58a8bde78034f68abec2af49 --- /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 ecfc5eecda2538f87c8c8dd5cf3cd0a20540e958..1a386726ea359f32e4a3b6763460abfa6bdf17a7 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 86cdd25c98a85da4f119e6b95dbd820d11ad5d5a..238f4ad49b6ed925315ecfd07de235b7eb696db6 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 4b2fc4d13aaba102322a8dabb4a5e6a1d33564c8..281301a48144fdbbf52e2ae43823ca01d24d16bf 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