Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: pre-hotreload cartridge support #341

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 14 additions & 4 deletions .github/workflows/test_on_push.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,27 @@ jobs:
# old Tarantool versions that don't have "tuple-keydef"/"tuple-merger" support.
tarantool-version: ["1.10.6", "1.10", "2.2", "2.3", "2.4", "2.5", "2.6", "2.7", "2.8", "2.10"]
metrics-version: [""]
cartridge-version: ["2.7.8"]
remove-merger: [false]
include:
- tarantool-version: "1.10"
metrics-version: "0.12.0"
metrics-version: "0.16.0"
cartridge-version: "2.7.8"
- tarantool-version: "2.7"
remove-merger: true
- tarantool-version: "2.8"
cartridge-version: "2.7.8"
- tarantool-version: "2.10"
metrics-version: "0.1.8"
- tarantool-version: "2.8"
cartridge-version: "2.7.8"
- tarantool-version: "2.10"
metrics-version: "0.10.0"
cartridge-version: "2.7.8"
- tarantool-version: "1.10"
cartridge-version: "1.2.0"
- tarantool-version: "2.10"
coveralls: true
metrics-version: "0.12.0"
metrics-version: "0.16.0"
cartridge-version: "2.7.8"
fail-fast: false
# Can't install older versions on 22.04,
# see https://github.com/tarantool/setup-tarantool/issues/36
Expand All @@ -49,6 +57,8 @@ jobs:
run: |
tarantool --version
./deps.sh
env:
CARTRIDGE_VERSION: ${{ matrix.cartridge-version }}

- name: Install metrics
if: matrix.metrics-version != ''
Expand Down
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).

## [Unreleased]

### Fixed
* Pre-hotreload `cartridge` support (older than 2.4.0) (PR #341).

## [1.0.0] - 02-02-23

### Added
Expand Down
7 changes: 6 additions & 1 deletion crud/common/stash.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
-- @module crud.common.stash
--
local dev_checks = require('crud.common.dev_checks')
local utils = require('crud.common.utils')

local stash = {}

Expand Down Expand Up @@ -37,7 +38,11 @@ stash.name = {
-- @return Returns
--
function stash.setup_cartridge_reload()
local hotreload = require('cartridge.hotreload')
local hotreload_supported, hotreload = utils.is_cartridge_hotreload_supported()
if not hotreload_supported then
return
end

for _, name in pairs(stash.name) do
hotreload.whitelist_globals({ name })
end
Expand Down
16 changes: 16 additions & 0 deletions crud/common/utils.lua
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ local bit = require('bit')
local log = require('log')

local is_cartridge, cartridge = pcall(require, 'cartridge')
local is_cartridge_hotreload, cartridge_hotreload = pcall(require, 'cartridge.hotreload')

local const = require('crud.common.const')
local schema = require('crud.common.schema')
Expand Down Expand Up @@ -963,4 +964,19 @@ function utils.get_vshard_router_instance(router)
return router_instance
end

--- Check if Tarantool Cartridge hotreload supported
-- and get its implementaion.
--
-- @function is_cartridge_hotreload_supported
--
-- @return[1] true or false
-- @return[1] module table, if supported
function utils.is_cartridge_hotreload_supported()
if not is_cartridge_hotreload then
return false
end

return true, cartridge_hotreload
end

return utils
4 changes: 3 additions & 1 deletion deps.sh
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,9 @@ tarantoolctl rocks install "${LUACOV_COVERALLS_ROCKSPEC_FILE}"
rm "${LUACOV_COVERALLS_ROCKSPEC_FILE}"
rmdir "${TMPDIR}"

tarantoolctl rocks install cartridge 2.7.4
CARTRIDGE_VERSION="${CARTRIDGE_VERSION:-2.7.8}"

tarantoolctl rocks install cartridge "$CARTRIDGE_VERSION"
tarantoolctl rocks install ddl 1.6.2
tarantoolctl rocks install migrations 0.4.2

Expand Down
9 changes: 8 additions & 1 deletion test/entrypoint/srv_ddl_reload.lua
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ local errors = require('errors')
local cartridge = require('cartridge')
local ddl = require('ddl')

local crud_utils = require('crud.common.utils')

package.preload['customers-storage'] = function()
local customers_module = {
sharding_func_default = function(key)
Expand Down Expand Up @@ -198,6 +200,11 @@ package.preload['customers-storage'] = function()
}
end

local roles_reload_allowed = nil
if crud_utils.is_cartridge_hotreload_supported() then
roles_reload_allowed = true
end

local ok, err = errors.pcall('CartridgeCfgError', cartridge.cfg, {
advertise_uri = 'localhost:3301',
http_port = 8081,
Expand All @@ -207,7 +214,7 @@ local ok, err = errors.pcall('CartridgeCfgError', cartridge.cfg, {
'cartridge.roles.crud-router',
'cartridge.roles.crud-storage',
},
roles_reload_allowed = true,
roles_reload_allowed = roles_reload_allowed,
})

if not ok then
Expand Down
12 changes: 7 additions & 5 deletions test/entrypoint/srv_reload.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,7 @@ local log = require('log')
local errors = require('errors')
local cartridge = require('cartridge')

local roles_reload_allowed = nil
if not os.getenv('TARANTOOL_FORBID_HOTRELOAD') then
roles_reload_allowed = true
end
local crud_utils = require('crud.common.utils')

package.preload['customers-storage'] = function()
return {
Expand Down Expand Up @@ -44,6 +41,11 @@ package.preload['customers-storage'] = function()
}
end

local roles_reload_allowed = nil
if crud_utils.is_cartridge_hotreload_supported() then
roles_reload_allowed = true
end

local ok, err = errors.pcall('CartridgeCfgError', cartridge.cfg, {
advertise_uri = 'localhost:3301',
http_port = 8081,
Expand All @@ -53,7 +55,7 @@ local ok, err = errors.pcall('CartridgeCfgError', cartridge.cfg, {
'cartridge.roles.crud-router',
'cartridge.roles.crud-storage'
},
roles_reload_allowed = roles_reload_allowed
roles_reload_allowed = roles_reload_allowed,
})

if not ok then
Expand Down
9 changes: 8 additions & 1 deletion test/entrypoint/srv_stats.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ local log = require('log')
local errors = require('errors')
local cartridge = require('cartridge')

local crud_utils = require('crud.common.utils')

package.preload['customers-storage'] = function()
local engine = os.getenv('ENGINE') or 'memtx'
return {
Expand Down Expand Up @@ -44,6 +46,11 @@ package.preload['customers-storage'] = function()
}
end

local roles_reload_allowed = nil
if crud_utils.is_cartridge_hotreload_supported() then
roles_reload_allowed = true
end

local ok, err = errors.pcall('CartridgeCfgError', cartridge.cfg, {
advertise_uri = 'localhost:3301',
http_port = 8081,
Expand All @@ -53,7 +60,7 @@ local ok, err = errors.pcall('CartridgeCfgError', cartridge.cfg, {
'cartridge.roles.crud-storage',
'customers-storage',
},
roles_reload_allowed = true,
roles_reload_allowed = roles_reload_allowed,
})

if not ok then
Expand Down
19 changes: 19 additions & 0 deletions test/helper.lua
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ local digest = require('digest')
local fio = require('fio')

local crud = require('crud')
local crud_utils = require('crud.common.utils')

if os.getenv('DEV') == nil then
os.setenv('DEV', 'ON')
Expand Down Expand Up @@ -553,4 +554,22 @@ function helpers.complement_tuples_batch_with_operations(tuples, operations)
return tuples_operation_data
end

function helpers.is_metrics_0_12_0_or_older()
local metrics = require('metrics')

-- metrics 0.13.0 introduced VERSION, but it is likely to be deprecated in the future:
-- https://github.com/tarantool/metrics/commit/a7e666f50d23c3e1a11b9bc9882edddec2f4c67e
-- metrics 0.16.0 introduced _VERSION which is likely going to replace VERSION:
-- https://github.com/tarantool/metrics/commit/8f9b667f9db59ceff8e5d26e458244e2d67838da
if (metrics.VERSION == nil) and metrics._VERSION == nil then
return true
end

return false
end

function helpers.is_cartridge_hotreload_supported()
return crud_utils.is_cartridge_hotreload_supported()
end

return helpers
3 changes: 3 additions & 0 deletions test/integration/cfg_test.lua
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ group.test_package_reload_preserves_values = function(g)
end

group.test_role_reload_preserves_values = function(g)
t.skip_if(not helpers.is_cartridge_hotreload_supported(),
"Cartridge roles reload is not supported")

local router = g.cluster:server('router')

-- Generate some non-default values.
Expand Down
5 changes: 5 additions & 0 deletions test/integration/ddl_sharding_info_reload_test.lua
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,11 @@ for sharding_case_name, sharding_case in pairs(sharding_cases) do
reload_case_name, sharding_case_name)

pgroup_storage[test_name] = function(g)
t.skip_if(
((reload_case == 'reload_roles')
and not helpers.is_cartridge_hotreload_supported()),
"Cartridge roles reload is not supported")

local storage = g.cluster:server('s1-master')

-- Init the cache.
Expand Down
6 changes: 6 additions & 0 deletions test/integration/reload_test.lua
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,9 @@ g.after_each(function()
end)

function g.test_router()
t.skip_if(not helpers.is_cartridge_hotreload_supported(),
"Cartridge roles reload is not supported")

g.highload_fiber = fiber.new(highload_loop, 'A')

g.cluster:retrying({}, function()
Expand All @@ -99,6 +102,9 @@ function g.test_router()
end

function g.test_storage()
t.skip_if(not helpers.is_cartridge_hotreload_supported(),
"Cartridge roles reload is not supported")

g.highload_fiber = fiber.new(highload_loop, 'B')

g.cluster:retrying({}, function()
Expand Down
15 changes: 12 additions & 3 deletions test/integration/stats_test.lua
Original file line number Diff line number Diff line change
Expand Up @@ -772,8 +772,11 @@ pgroup.before_test(
generate_stats)

pgroup.test_role_reload_do_not_reset_observations = function(g)
t.xfail_if(g.params.args.driver == 'metrics',
'See https://github.com/tarantool/metrics/issues/334')
t.skip_if(not helpers.is_cartridge_hotreload_supported(),
"Cartridge roles reload is not supported")
t.skip_if((g.params.args.driver == 'metrics')
and helpers.is_metrics_0_12_0_or_older(),
"See https://github.com/tarantool/metrics/issues/334")

local stats_before = get_stats(g)

Expand Down Expand Up @@ -1084,7 +1087,10 @@ group_metrics.before_test(
generate_stats)

group_metrics.test_role_reload_do_not_reset_metrics_observations = function(g)
t.xfail('See https://github.com/tarantool/metrics/issues/334')
t.skip_if(not helpers.is_cartridge_hotreload_supported(),
"Cartridge roles reload is not supported")
t.skip_if(helpers.is_metrics_0_12_0_or_older(),
"See https://github.com/tarantool/metrics/issues/334")

helpers.reload_roles(g.cluster:server('router'))
g.router:eval("crud = require('crud')")
Expand Down Expand Up @@ -1122,6 +1128,9 @@ group_metrics.before_test(
prepare_select_data)

group_metrics.test_stats_changed_in_metrics_registry_after_role_reload = function(g)
t.skip_if(not helpers.is_cartridge_hotreload_supported(),
"Cartridge roles reload is not supported")

helpers.reload_roles(g.cluster:server('router'))
g.router:eval("crud = require('crud')")
check_updated_per_call(g)
Expand Down