From: Cyrill Gorcunov <gorcunov@gmail.com> To: tml <tarantool-patches@dev.tarantool.org> Subject: [Tarantool-patches] [PATCH v8 07/12] lua/log: use log module settings inside box.cfg Date: Wed, 3 Jun 2020 01:18:12 +0300 [thread overview] Message-ID: <20200602221817.645015-8-gorcunov@gmail.com> (raw) In-Reply-To: <20200602221817.645015-1-gorcunov@gmail.com> Currently box module carries configuration settings in box.cfg variable which is created dinamically on demand. The default values are kept in default_cfg variable. Since we're going to make the log module to work on its own, we need it to provide default settings to the box.cfg interface. For this sake we export log:box_api table which the main box module use when needed. Part-of #689 Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com> --- src/box/lua/load_cfg.lua | 26 ++++++++++++++---- src/lua/log.lua | 59 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 78 insertions(+), 7 deletions(-) diff --git a/src/box/lua/load_cfg.lua b/src/box/lua/load_cfg.lua index 5d818addf..7612deb90 100644 --- a/src/box/lua/load_cfg.lua +++ b/src/box/lua/load_cfg.lua @@ -59,10 +59,6 @@ local default_cfg = { vinyl_range_size = nil, -- set automatically vinyl_page_size = 8 * 1024, vinyl_bloom_fpr = 0.05, - log = nil, - log_nonblock = nil, - log_level = 5, - log_format = "plain", io_collect_interval = nil, readahead = 16320, snap_io_rate_limit = nil, -- no limit @@ -233,8 +229,8 @@ end local dynamic_cfg = { listen = private.cfg_set_listen, replication = private.cfg_set_replication, - log_level = private.cfg_set_log_level, - log_format = private.cfg_set_log_format, + log_level = log.box_api.set_log_level, + log_format = log.box_api.set_log_format, io_collect_interval = private.cfg_set_io_collect_interval, readahead = private.cfg_set_readahead, too_long_threshold = private.cfg_set_too_long_threshold, @@ -470,6 +466,21 @@ local function apply_default_cfg(cfg, default_cfg) end end +-- Fetch default settings from modules. +local function modules_apply_default_cfg(cfg) + log.box_api.on_apply_default_cfg(cfg) +end + +-- Propagate settings to modules. +local function modules_load_cfg(cfg) + log.box_api.on_load_cfg(cfg) +end + +-- Propagate settings to modules. +local function modules_reload_cfg(cfg) + log.box_api.on_reload_cfg(cfg) +end + -- Return true if two configurations are equivalent. local function compare_cfg(cfg1, cfg2) if type(cfg1) ~= type(cfg2) then @@ -517,6 +528,7 @@ local function reload_cfg(oldcfg, cfg) json.encode(val)) end end + modules_reload_cfg(cfg) if type(box.on_reload_configuration) == 'function' then box.on_reload_configuration() end @@ -554,6 +566,7 @@ local function load_cfg(cfg) cfg = upgrade_cfg(cfg, translate_cfg) cfg = prepare_cfg(cfg, default_cfg, template_cfg, modify_cfg) apply_default_cfg(cfg, default_cfg); + modules_apply_default_cfg(cfg) -- Save new box.cfg box.cfg = cfg if not pcall(private.cfg_check) then @@ -573,6 +586,7 @@ local function load_cfg(cfg) end, __call = locked(reload_cfg), }) + modules_load_cfg(box.cfg) private.cfg_load() for key, fun in pairs(dynamic_cfg) do local val = cfg[key] diff --git a/src/lua/log.lua b/src/lua/log.lua index 746e0d82f..87ce313e5 100644 --- a/src/lua/log.lua +++ b/src/lua/log.lua @@ -101,6 +101,24 @@ local function fmt_list() return table.concat(keyset, ',') end +-- Default options. The keys are part of +-- user API, so change with caution. +local log_cfg = { + log = nil, + nonblock = false, + level = S_INFO, + format = fmt_num2str[ffi.C.SF_PLAIN], +} + +-- Name mapping from box to log module. +-- Make sure all required fields are covered! +local log2box_keys = { + ['log'] = 'log', + ['nonblock'] = 'log_nonblock', + ['level'] = 'log_level', + ['format'] = 'log_format', +} + local function say(level, fmt, ...) if ffi.C.log_level < level then -- don't waste cycles on debug.getinfo() @@ -150,7 +168,8 @@ local function log_rotate() end local function log_level(level) - return ffi.C.say_set_log_level(level) + ffi.C.say_set_log_level(level) + rawset(log_cfg, 'level', level) end local function log_format(name) @@ -170,12 +189,31 @@ local function log_format(name) else ffi.C.say_set_log_format(ffi.C.SF_PLAIN) end + rawset(log_cfg, 'format', name) end local function log_pid() return tonumber(ffi.C.log_pid) end +-- Apply defaut config to the box module +local function box_on_apply_default_cfg(box_cfg) + for k, v in pairs(log2box_keys) do + if box_cfg[v] == nil then + box_cfg[v] = log_cfg[k] + end + end +end + +-- Update own values from box interface. +local function box_on_load_cfg(box_cfg) + for k, v in pairs(log2box_keys) do + if box_cfg[v] ~= log_cfg[k] then + log_cfg[k] = box_cfg[v] + end + end +end + local compat_warning_said = false local compat_v16 = { logger_pid = function() @@ -197,9 +235,28 @@ local log = { pid = log_pid, level = log_level, log_format = log_format, + + -- Internal API to box module, not for users, + -- names can be changed. + box_api = { + set_log_level = function() + log_level(box.cfg.log_level) + end, + set_log_format = function() + log_format(box.cfg.log_format) + end, + on_load_cfg = box_on_load_cfg, + on_reload_cfg = box_on_load_cfg, + on_apply_default_cfg = box_on_apply_default_cfg, + }, } setmetatable(log, { + __serialize = function(self) + local res = table.copy(self) + res.box_api = nil + return setmetatable(res, {}) + end, __index = compat_v16; }) -- 2.26.2
next prev parent reply other threads:[~2020-06-02 22:19 UTC|newest] Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-06-02 22:18 [Tarantool-patches] [PATCH v8 00/12] lua/log: add an ability to setup logger without box.cfg{} Cyrill Gorcunov 2020-06-02 22:18 ` [Tarantool-patches] [PATCH v8 01/12] core/say: do not reconfig early set up logger Cyrill Gorcunov 2020-06-02 22:18 ` [Tarantool-patches] [PATCH v8 02/12] core/say: use say_logger_initialized in say_logger_free Cyrill Gorcunov 2020-06-02 22:18 ` [Tarantool-patches] [PATCH v8 03/12] lua/log: declare say_logger_init and say_logger_initialized Cyrill Gorcunov 2020-06-02 22:18 ` [Tarantool-patches] [PATCH v8 04/12] lua/log: put string constants to map Cyrill Gorcunov 2020-06-02 22:18 ` [Tarantool-patches] [PATCH v8 05/12] lua/log: do not allow to set json for boot logger Cyrill Gorcunov 2020-06-03 6:59 ` Oleg Babin 2020-06-03 7:34 ` Cyrill Gorcunov 2020-06-03 9:44 ` Kirill Yukhin 2020-06-02 22:18 ` [Tarantool-patches] [PATCH v8 06/12] lua/log: declare log as separate variable Cyrill Gorcunov 2020-06-02 22:18 ` Cyrill Gorcunov [this message] 2020-06-03 7:00 ` [Tarantool-patches] [PATCH v8 07/12] lua/log: use log module settings inside box.cfg Oleg Babin 2020-06-02 22:18 ` [Tarantool-patches] [PATCH v8 08/12] lua/log: allow to configure logging without a box Cyrill Gorcunov 2020-06-03 7:01 ` Oleg Babin 2020-06-02 22:18 ` [Tarantool-patches] [PATCH v8 09/12] test: logger -- use log module directly Cyrill Gorcunov 2020-06-03 7:02 ` Oleg Babin 2020-06-02 22:18 ` [Tarantool-patches] [PATCH v8 10/12] log/lua: allow to specify logging level as a string Cyrill Gorcunov 2020-06-03 7:03 ` Oleg Babin 2020-06-02 22:18 ` [Tarantool-patches] [PATCH v8 11/12] lua/log: use log_cfg instead of ffi's instances Cyrill Gorcunov 2020-06-02 22:18 ` [Tarantool-patches] [PATCH v8 12/12] test: logger -- consider more cases Cyrill Gorcunov 2020-06-03 7:03 ` Oleg Babin 2020-06-03 6:59 ` [Tarantool-patches] [PATCH v8 00/12] lua/log: add an ability to setup logger without box.cfg{} Oleg Babin 2020-06-03 7:09 ` Oleg Babin
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200602221817.645015-8-gorcunov@gmail.com \ --to=gorcunov@gmail.com \ --cc=tarantool-patches@dev.tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH v8 07/12] lua/log: use log module settings inside box.cfg' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox