From: Alex Khatskevich <avkhatskevich@tarantool.org> To: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>, tarantool-patches@freelists.org Subject: [tarantool-patches] Re: [PATCH 2/3] Complete module reload Date: Thu, 19 Jul 2018 23:32:05 +0300 [thread overview] Message-ID: <7c9af9eb-7fe9-e07c-2589-56fc192e6614@tarantool.org> (raw) In-Reply-To: <80d76a63-7435-4148-e0ce-37ed2daee19b@tarantool.org> >> >> Part of <shut git>112 > > 1. Stray '<shut git>'. Ok > >> --- >> test/router/reload.result | 159 >> +++++++++++++++++++++++++++++++++++++++++++ >> test/router/reload.test.lua | 48 +++++++++++++ >> test/router/router.result | 3 +- >> test/storage/reload.result | 68 ++++++++++++++++++ >> test/storage/reload.test.lua | 23 +++++++ >> vshard/cfg.lua | 6 ++ >> vshard/error.lua | 5 ++ >> vshard/replicaset.lua | 100 ++++++++++++++++++++------- >> vshard/router/init.lua | 44 ++++++++---- >> vshard/storage/init.lua | 45 ++++++++---- >> vshard/util.lua | 20 ++++++ >> 11 files changed, 466 insertions(+), 55 deletions(-) >> >> diff --git a/test/router/reload.result b/test/router/reload.result >> index 47f3c2e..3fbbe6e 100644 >> --- a/test/router/reload.result >> +++ b/test/router/reload.result >> @@ -174,6 +174,165 @@ vshard.router.module_version() >> ... >> +-- Make sure outdate async task has had cpu time. >> +fiber.sleep(0.005) > > 2. As I asked earlier, please, avoid constant timeouts. > When you want to wait for something, use 'while'. Fixed >> +--- >> +... >> +vshard.router = require('vshard.router') > > 3. You have already did it few lines above. fixed >> +-- Error during reconfigure process. > > 4. You added this test in the previous commit. Thanks > >> +vshard.storage.internal.errinj.ERRINJ_CFG = true > > 5. Same as 4. We have already added the test in the previous > commit, it is not? thanks >> >> diff --git a/vshard/cfg.lua b/vshard/cfg.lua >> index d5429af..87d0fc8 100644 >> --- a/vshard/cfg.lua >> +++ b/vshard/cfg.lua >> @@ -217,6 +217,10 @@ local cfg_template = { >> type = 'non-negative number', name = 'Sync timeout', >> is_optional = true, >> default = consts.DEFAULT_SYNC_TIMEOUT >> }}, >> + {'connection_outdate_delay', { >> + type = 'non-negative number', name = 'Object outdate timeout', >> + is_optional = true, default = nil > > 6. default = nil makes no sense for Lua tables. deleted > >> + }}, >> } >> -- >> @@ -264,6 +268,8 @@ local function remove_non_box_options(cfg) >> cfg.collect_bucket_garbage_interval = nil >> cfg.collect_lua_garbage = nil >> cfg.sync_timeout = nil >> + cfg.sync_timeout = nil > > 7. Why do you need the second nullify of sync_timeout? rebase consecuence... > >> + cfg.connection_outdate_delay = nil >> end >> return { >> diff --git a/vshard/replicaset.lua b/vshard/replicaset.lua >> index 99f59aa..ec6e95b 100644 >> --- a/vshard/replicaset.lua >> +++ b/vshard/replicaset.lua> @@ -412,6 +424,49 @@ for name, func in >> pairs(replica_mt.__index) do >> end >> replica_mt.__index = index >> +-- >> +-- Meta-methods of outdated objects > > 8. Put the dot at the end of the sentence. fixed > >> +-- They define only arrtibutes from corresponding metatables to > > 9. Typo: arrtibutes. fixed > >> +-- make user able to access fields of old objects. >> +-- >> +local function outdated_warning(...) >> + return nil, lerror.vshard(lerror.code.OBJECT_IS_OUTDATED) >> +end >> + >> +local outdated_replicaset_mt = { >> + __index = { >> + outdated = true >> + } >> +} > > 10. outdated_replicaset/replica_mt are identical. Please, > make one mt object names 'outdated_mt'. > >> +for fname, func in pairs(replicaset_mt.__index) do >> + outdated_replicaset_mt.__index[fname] = outdated_warning >> +end > > 11. As I remember, my proposal was to do not > duplicate each method here, but just on any __index return > callable object that on call invokes outdated_warning. > > You can ask, what to do with 'outdated' attribute then, but > you can set it directly in the object in outdate_replicasets() > function. > > What is more, please, use 'is_outdated' since this value is a > flag. And add it to the description on top of the file, where > all attributes are documented. > > Here you can put 'replica.is_outdated = true'. > > Here you can put 'replicaset.is_outdated = true'. 10, 11 - to be discussed. There are two reasons to do it that way: 1. Replacing data objects with funcitons-wrappers do not make any sense, because it is not called finaly. It just leads to a strange error if it indexed somewhere. 2. Strange error messages appear in bg fibers logs sometimes because of reason 1. > >> + end >> + log.info('Old replicaset and replica objects are outdated.') >> +end >> + >> -- >> -- Calculate for each replicaset its etalon bucket count. >> -- Iterative algorithm is used to learn the best balance in a >> diff --git a/vshard/router/init.lua b/vshard/router/init.lua >> index a143070..a8f6bbc 100644 >> --- a/vshard/router/init.lua >> +++ b/vshard/router/init.lua >> @@ -479,12 +493,13 @@ local function router_cfg(cfg) >> else >> log.info('Starting router reconfiguration') >> end >> - local new_replicasets = lreplicaset.buildall(cfg, M.replicasets) >> + local new_replicasets = lreplicaset.buildall(cfg) >> local total_bucket_count = cfg.bucket_count >> local collect_lua_garbage = cfg.collect_lua_garbage >> - lcfg.remove_non_box_options(cfg) >> + local box_cfg = table.deepcopy(cfg) > > 12. As I remember, I asked to use table.copy when > possible. And this case looks appropriate. ok >> diff --git a/vshard/storage/init.lua b/vshard/storage/init.lua >> index 052e94f..bf560e6 100644 >> --- a/vshard/storage/init.lua >> +++ b/vshard/storage/init.lua >> @@ -2,20 +2,34 @@ local log = require('log') >> local luri = require('uri') >> local lfiber = require('fiber') >> local netbox = require('net.box') -- for net.box:self() >> +local trigger = require('internal.trigger') >> + >> +local MODULE_INTERNALS = '__module_vshard_storage' >> +-- Reload requirements, in case this module is reloaded manually. >> +if rawget(_G, MODULE_INTERNALS) then >> + local vshard_modules = { >> + 'vshard.consts', 'vshard.error', 'vshard.cfg', >> + 'vshard.replicaset', 'vshard.util', >> + } >> + for _, module in pairs(vshard_modules) do >> + package.loaded[module] = nil >> + end >> +end >> local consts = require('vshard.consts') >> local lerror = require('vshard.error') >> -local util = require('vshard.util') >> local lcfg = require('vshard.cfg') >> local lreplicaset = require('vshard.replicaset') >> -local trigger = require('internal.trigger') >> +local util = require('vshard.util') >> -local M = rawget(_G, '__module_vshard_storage') >> +local M = rawget(_G, MODULE_INTERNALS) >> if not M then >> -- >> -- The module is loaded for the first time. >> -- >> M = { >> ---------------- Common module attributes ---------------- >> + -- The last passed configuration. >> + current_cfg = nil, > > 13. Please, add the same assignment to the router module > initialization. added
next prev parent reply other threads:[~2018-07-19 20:32 UTC|newest] Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-07-18 17:47 [tarantool-patches] [PATCH 0/3] vshard reload mechanism AKhatskevich 2018-07-18 17:47 ` [tarantool-patches] [PATCH 1/3] Add test on error during reconfigure AKhatskevich 2018-07-19 15:14 ` [tarantool-patches] " Vladislav Shpilevoy 2018-07-19 20:33 ` Alex Khatskevich 2018-07-20 11:34 ` Alex Khatskevich 2018-07-20 14:15 ` Vladislav Shpilevoy 2018-07-18 17:47 ` [tarantool-patches] [PATCH 2/3] Complete module reload AKhatskevich 2018-07-19 15:14 ` [tarantool-patches] " Vladislav Shpilevoy 2018-07-19 20:32 ` Alex Khatskevich [this message] 2018-07-20 11:34 ` Alex Khatskevich 2018-07-20 14:15 ` Vladislav Shpilevoy 2018-07-18 17:47 ` [tarantool-patches] [PATCH 3/3] Introduce storage reload evolution AKhatskevich 2018-07-19 15:14 ` [tarantool-patches] " Vladislav Shpilevoy 2018-07-20 11:32 ` Alex Khatskevich 2018-07-20 14:15 ` Vladislav Shpilevoy 2018-07-20 23:58 ` Alex Khatskevich
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=7c9af9eb-7fe9-e07c-2589-56fc192e6614@tarantool.org \ --to=avkhatskevich@tarantool.org \ --cc=tarantool-patches@freelists.org \ --cc=v.shpilevoy@tarantool.org \ --subject='[tarantool-patches] Re: [PATCH 2/3] Complete module reload' \ /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