diff --git a/src/box/lua/load_cfg.lua b/src/box/lua/load_cfg.lua index d412c2fd57feb8fbd3a29bd47b9d3ba3978b3642..39e0de7ddafd117750e569f85891410d98297424 100644 --- a/src/box/lua/load_cfg.lua +++ b/src/box/lua/load_cfg.lua @@ -52,9 +52,8 @@ local default_cfg = { coredump = false, -- snap_daemon - snap_period = 3600 * 4, - snap_check_period = 60, - snap_count = 6, + snapshot_period = 3600 * 4, + snapshot_count = 6, } -- dynamically settable options @@ -67,9 +66,8 @@ local dynamic_cfg = { snap_io_rate_limit = ffi.C.box_set_snap_io_rate_limit, -- snap_daemon - snap_period = box.snap_daemon.set_snap_period, - snap_count = box.snap_daemon.set_snap_count, - snap_check_period = box.snap_daemon.set_snap_check_period, + snapshot_period = box.internal.snap_daemon.set_snapshot_period, + snapshot_count = box.internal.snap_daemon.set_snapshot_count, } local function reload_cfg(oldcfg, newcfg) @@ -137,7 +135,7 @@ function box.cfg(cfg) }) ffi.C.load_cfg() - box.snap_daemon.start() + box.internal.snap_daemon.start() end jit.off(box.cfg) jit.off(reload_cfg) diff --git a/src/box/lua/snap_daemon.lua b/src/box/lua/snap_daemon.lua index c9f045521e0cfa637cf2a1aa848960704618936a..aec2d047bf133f23a2f4be2d9e0162b402de0b1f 100644 --- a/src/box/lua/snap_daemon.lua +++ b/src/box/lua/snap_daemon.lua @@ -31,11 +31,11 @@ do -- create snapshot by several options local function make_snapshot(last_snap) - if box.cfg.snap_period == nil then + if box.cfg.snapshot_period == nil then return false end - if not(box.cfg.snap_period > 0) then + if not(box.cfg.snapshot_period > 0) then return false end @@ -62,7 +62,7 @@ do PREFIX, snaps[#snaps], errno.strerror()) return false end - if snstat.mtime <= fiber.time() + box.cfg.snap_period then + if snstat.mtime <= fiber.time() + box.cfg.snapshot_period then return snapshot(snaps) end end @@ -81,15 +81,15 @@ do end -- cleanup code - if box.cfg.snap_count == nil then + if box.cfg.snapshot_count == nil then return end - if not (box.cfg.snap_count > 0) then + if not (box.cfg.snapshot_count > 0) then return end - + -- reload snap list after snapshot snaps = fio.glob(fio.pathjoin(box.cfg.snap_dir, '*.snap')) local xlogs = fio.glob(fio.pathjoin(box.cfg.wal_dir, '*.xlog')) @@ -98,7 +98,7 @@ do return end - while #snaps > box.cfg.snap_count do + while #snaps > box.cfg.snapshot_count do local rm = snaps[1] table.remove(snaps, 1) @@ -109,7 +109,7 @@ do return end end - + local snapno = fio.basename(snaps[1], '.snap') @@ -130,7 +130,7 @@ do local rm = xlogs[1] table.remove(xlogs, 1) log.info("%s: Removing old xlog %s", PREFIX, rm) - + if not fio.unlink(rm) then log.error("%s: Error while removing %s: %s", PREFIX, rm, errno.strerror()) @@ -141,12 +141,14 @@ do local function next_snap_interval() - local interval = box.cfg.snap_check_period or 15 - - if box.cfg.snap_period == nil or box.cfg.snap_period <= 0 then + local interval + + if box.cfg.snapshot_period == nil or box.cfg.snapshot_period <= 0 then return interval end + local interval = box.cfg.snapshot_period / 10 + local time = fiber.time() local snaps = fio.glob(fio.pathjoin(box.cfg.snap_dir, '*.snap')) if snaps == nil or #snaps == 0 then @@ -162,11 +164,11 @@ do -- there is no activity in xlogs - if box.cfg.snap_period * 2 + stat.mtime < time then + if box.cfg.snapshot_period * 2 + stat.mtime < time then return interval end - local time_left = box.cfg.snap_period + stat.mtime - time + local time_left = box.cfg.snapshot_period + stat.mtime - time if time_left > 0 then return time_left end @@ -198,7 +200,7 @@ do setmetatable(daemon, { __index = { start = function() - local daemon = box[PREFIX] or daemon + local daemon = box.internal[PREFIX] or daemon if daemon.status == 'started' then error( sprintf("%s: %s", PREFIX, "Daemon is already started")) @@ -208,7 +210,7 @@ do end, stop = function() - local daemon = box[PREFIX] or daemon + local daemon = box.internal[PREFIX] or daemon if daemon.status == 'stopped' then error( sprintf('%s: %s', PREFIX, "Daemon is already stopped")) @@ -220,39 +222,32 @@ do daemon.fiber = nil end, - set_snap_period = function(snap_period) - local daemon = box[PREFIX] or daemon - log.info("%s: new snap_period: %s", PREFIX, - tostring(snap_period)) + set_snapshot_period = function(snapshot_period) + local daemon = box.internal[PREFIX] or daemon + log.info("%s: new snapshot_period: %s", PREFIX, + tostring(snapshot_period)) if daemon.fiber ~= nil then daemon.fiber:wakeup() end - return snap_period + return snapshot_period end, - set_snap_count = function(snap_count) - local daemon = box[PREFIX] or daemon - log.info("%s: new snap_count: %s", PREFIX, tostring(snap_count)) - - if daemon.fiber ~= nil then - daemon.fiber:wakeup() - end - return snap_period + set_snapshot_count = function(snapshot_count) + local daemon = box.internal[PREFIX] or daemon + log.info("%s: new snapshot_count: %s", + PREFIX, tostring(snapshot_count)) - end, - - set_snap_check_period = function(snap_check_period) - local daemon = box[PREFIX] or daemon - log.info("%s: new snap_check_period: %s", PREFIX, - tostring(snap_check_period)) - if daemon.fiber ~= nil then daemon.fiber:wakeup() end - return snap_period + return snapshot_period end } }) - box[PREFIX] = daemon + if box.internal == nil then + box.internal = { [PREFIX] = daemon } + else + box.internal[PREFIX] = daemon + end end diff --git a/test/box/snap_daemon.result b/test/box/snap_daemon.result index 0306b78949182d3acbdfeeb5c1adf739de6397b2..164ef5994ff2b5cfd7c4484584aeed08f48d24c9 100644 --- a/test/box/snap_daemon.result +++ b/test/box/snap_daemon.result @@ -49,7 +49,7 @@ space = box.schema.create_space('snap_daemon') space:create_index('pk', { type = 'tree', parts = { 1, 'num' }}) --- ... -box.cfg{snap_period = PERIOD, snap_check_period = PERIOD, snap_count = 2 } +box.cfg{snapshot_period = PERIOD, snapshot_count = 2 } --- ... no = 1 @@ -98,7 +98,7 @@ fio.basename(snaps[1], '.snap') >= fio.basename(xlogs[1], '.xlog') - true ... -- restore default options -box.cfg{snap_period = 3600 * 4, snap_check_period = 15, snap_count = 4 } +box.cfg{snapshot_period = 3600 * 4, snapshot_count = 4 } --- ... space:drop() diff --git a/test/box/snap_daemon.test.lua b/test/box/snap_daemon.test.lua index 7360e38bea68936203b4fa63a679ee5108001e23..82eb4385640416b351de2673113962dfc5060bfc 100644 --- a/test/box/snap_daemon.test.lua +++ b/test/box/snap_daemon.test.lua @@ -27,7 +27,7 @@ space = box.schema.create_space('snap_daemon') space:create_index('pk', { type = 'tree', parts = { 1, 'num' }}) -box.cfg{snap_period = PERIOD, snap_check_period = PERIOD, snap_count = 2 } +box.cfg{snapshot_period = PERIOD, snapshot_count = 2 } no = 1 @@ -54,7 +54,7 @@ xlogs = fio.glob(fio.pathjoin(box.cfg.wal_dir, '*.xlog')) fio.basename(snaps[1], '.snap') >= fio.basename(xlogs[1], '.xlog') -- restore default options -box.cfg{snap_period = 3600 * 4, snap_check_period = 15, snap_count = 4 } +box.cfg{snapshot_period = 3600 * 4, snapshot_count = 4 } space:drop() PERIOD