diff --git a/extra/exports b/extra/exports index 7a9b41aa0862665b0702bf311e7158da561de50e..1dbfedc5c258e394b50b5cd3997ebc7ca21b7494 100644 --- a/extra/exports +++ b/extra/exports @@ -92,6 +92,7 @@ box_latch_lock box_latch_new box_latch_trylock box_latch_unlock +box_latest_dd_version_id box_on_shutdown box_read_ffi_disable box_read_ffi_is_disabled diff --git a/src/box/lua/mkversion.lua b/src/box/lua/mkversion.lua index 7845d79b97b580e63afc4ec13b35d521dc911612..f740bd56b51580f93e789246fff151f2322dd70b 100644 --- a/src/box/lua/mkversion.lua +++ b/src/box/lua/mkversion.lua @@ -1,7 +1,11 @@ local bit = require('bit') local ffi = require('ffi') -ffi.cdef([[ uint32_t box_dd_version_id(void); ]]) +ffi.cdef([[ + uint32_t box_dd_version_id(void); + uint32_t box_latest_dd_version_id(void); +]]) + local builtin = ffi.C local mkversion_mt = { @@ -48,6 +52,12 @@ local function mkversion_get() return mkversion_from_id(version) end +-- Latest schema version this instance recognizes. +local function mkversion_get_latest() + local version = builtin.box_latest_dd_version_id() + return mkversion_from_id(version) +end + local function mkversion_from_tuple(tuple) local major, minor, patch = tuple:unpack(2, 4) patch = patch or 0 @@ -61,6 +71,7 @@ end return setmetatable({ new = mkversion_new, get = mkversion_get, + get_latest = mkversion_get_latest, from_id = mkversion_from_id, from_tuple = mkversion_from_tuple, from_string = mkversion_from_string, diff --git a/src/box/schema.cc b/src/box/schema.cc index 43e1f3bd725ffd53b4d7a597016c634dbb4823ff..e8847e949bce91df454d2160ae71f839de2e0add 100644 --- a/src/box/schema.cc +++ b/src/box/schema.cc @@ -92,6 +92,13 @@ box_dd_version_id(void) return dd_version_id; } +/** Called from Lua via FFI to get latest_dd_version_id. */ +extern "C" uint32_t +box_latest_dd_version_id(void) +{ + return latest_dd_version_id; +} + /** Called from Lua via FFI to init latest_dd_version_id. */ extern "C" void box_init_latest_dd_version_id(uint32_t version_id)