From a23f402236039006872e30f0d813e2b7b46dad0e Mon Sep 17 00:00:00 2001 From: Georgiy Lebedev <g.lebedev@tarantool.org> Date: Wed, 8 Feb 2023 16:57:52 +0300 Subject: [PATCH] box: refactor `check_select_safety` and add it to `box.internal` Refactor logging of dangerous `select` call out of `check_select_safety` and add it to `box.internal` so that it can be reused for read views. Change all occurrences of 'dangerous' to 'long' to be consistent with the log message. Needed for tarantool/tarantool-ee#211 NO_CHANGELOG=<refactoring> NO_DOC=<refactoring> NO_TEST=<refactoring> (cherry picked from commit 4221a983ffea263eb38339a0a796b5737c974fc5) --- src/box/lua/schema.lua | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/src/box/lua/schema.lua b/src/box/lua/schema.lua index 59acea5c83..0f9bd6b5c4 100644 --- a/src/box/lua/schema.lua +++ b/src/box/lua/schema.lua @@ -2488,18 +2488,22 @@ end box.internal.check_select_opts = check_select_opts -- for net.box -local check_select_safety_rl = log.internal.ratelimit.new() -local function check_select_safety(index, key_is_nil, itype, limit, offset, +local function is_select_long(sid, key_is_nil, itype, limit, offset, fullscan) - local rl = check_select_safety_rl - local sid = index.space_id local point_iter = itype == box.index.EQ or itype == box.index.REQ local window = offset + limit - if sid >= 512 and (key_is_nil or not point_iter) and - (not fullscan and window > 1000) then - rl:log_crit("Potentially long select from space '%s' (%d)\n %s", - box.space[sid].name, sid, debug.traceback()) - end + return sid >= 512 and + (key_is_nil or not point_iter) and + (not fullscan and window > 1000) +end + +box.internal.is_select_long = is_select_long -- for read views + +local log_long_select_rl = log.internal.ratelimit.new() +local function log_long_select(space) + log_long_select_rl:log_crit( + "Potentially long select from space '%s' (%d)\n %s", + space.name, space.id, debug.traceback()) end base_index_mt.select_ffi = function(index, key, opts) @@ -2514,10 +2518,14 @@ base_index_mt.select_ffi = function(index, key, opts) local new_position = nil local iterator, offset, limit, fullscan, after, fetch_pos = check_select_opts(opts, key_is_nil) - check_select_safety(index, key_is_nil, iterator, limit, offset, fullscan) + local sid = index.space_id + if is_select_long(sid, key_is_nil, iterator, limit, offset, + fullscan) then + log_long_select(box.space[sid]) + end local region_svp = builtin.box_region_used() normalize_position(index, after, iterator_pos, iterator_pos_end) - nok = builtin.box_select_ffi(index.space_id, index.id, key, key_end, + nok = builtin.box_select_ffi(sid, index.id, key, key_end, iterator_pos, iterator_pos_end, fetch_pos, port, iterator, offset, limit) ~= 0 if not nok and fetch_pos and iterator_pos[0] ~= nil then @@ -2549,8 +2557,12 @@ base_index_mt.select_luac = function(index, key, opts) local key_is_nil = #key == 0 local iterator, offset, limit, fullscan, after, fetch_pos = check_select_opts(opts, key_is_nil) - check_select_safety(index, key_is_nil, iterator, limit, offset, fullscan) - return internal.select(index.space_id, index.id, iterator, + local sid = index.space_id + if is_select_long(sid, key_is_nil, iterator, limit, offset, + fullscan) then + log_long_select(box.space[sid]) + end + return internal.select(sid, index.id, iterator, offset, limit, key, after, fetch_pos) end -- GitLab