Previously, the lua stats collection was building its own paths to the cgroup files, which could be wrong depending on what --with-cgroup-pattern was passed to configure. Fix it to use the get_cgroup_item api so it always finds the files.
Remove cgroup_path_get since it is not used anymore. Signed-off-by: Dwight Engen <dwight.en...@oracle.com> --- src/lua-lxc/lxc.lua | 71 +++++++++++++---------------------------------------- 1 file changed, 17 insertions(+), 54 deletions(-) diff --git a/src/lua-lxc/lxc.lua b/src/lua-lxc/lxc.lua index 7c9580e..5a3b49e 100755 --- a/src/lua-lxc/lxc.lua +++ b/src/lua-lxc/lxc.lua @@ -29,7 +29,6 @@ local io = require("io") module("lxc", package.seeall) local lxc_path -local cgroup_path local log_level = 3 -- lua 5.1 compat @@ -70,31 +69,6 @@ function string:split(delim, max_cols) return cols end -function cgroup_path_get() - local f,line,cgroup_path - - f = io.open("/proc/mounts", "r") - if (f) then - while true do - local c - line = f:read() - if line == nil then - break - end - c = line:split(" ", 6) - if (c[1] == "cgroup") then - cgroup_path = core.dirname(c[2]) - break - end - end - f:close() - end - if (not cgroup_path) then - cgroup_path = "/sys/fs/cgroup" - end - return cgroup_path -end - -- container class container = {} container_mt = {} @@ -261,20 +235,19 @@ end -- methods for stats collection from various cgroup files -- read integers at given coordinates from a cgroup file -function container:stat_get_ints(controller, item, coords) - local f = io.open(cgroup_path.."/"..controller.."/"..self.ctname.."/"..item, "r") +function container:stat_get_ints(item, coords) local lines = {} local result = {} + local flines = self:get_cgroup_item(item) - if (not f) then + if (flines == nil) then for k,c in ipairs(coords) do table.insert(result, 0) end else - for line in f:lines() do + for line in flines:gmatch("[^\r\n]+") do table.insert(lines, line) end - f:close() for k,c in ipairs(coords) do local col @@ -287,27 +260,18 @@ function container:stat_get_ints(controller, item, coords) end -- read an integer from a cgroup file -function container:stat_get_int(controller, item) - local f = io.open(cgroup_path.."/"..controller.."/"..self.ctname.."/"..item, "r") - if (not f) then - return 0 - end - - local line = f:read() - f:close() +function container:stat_get_int(item) + local line = self:get_cgroup_item(item) -- if line is nil (on an error like Operation not supported because -- CONFIG_MEMCG_SWAP_ENABLED isn't enabled) return 0 return tonumber(line) or 0 end -function container:stat_match_get_int(controller, item, match, column) +function container:stat_match_get_int(item, match, column) local val - local f = io.open(cgroup_path.."/"..controller.."/"..self.ctname.."/"..item, "r") - if (not f) then - return 0 - end + local lines = self:get_cgroup_item(item) - for line in f:lines() do + for line in lines:gmatch("[^\r\n]+") do if (string.find(line, match)) then local col @@ -315,20 +279,20 @@ function container:stat_match_get_int(controller, item, match, column) val = tonumber(col[column]) or 0 end end - f:close() + return val end function container:stats_get(total) local stat = {} - stat.mem_used = self:stat_get_int("memory", "memory.usage_in_bytes") - stat.mem_limit = self:stat_get_int("memory", "memory.limit_in_bytes") - stat.memsw_used = self:stat_get_int("memory", "memory.memsw.usage_in_bytes") - stat.memsw_limit = self:stat_get_int("memory", "memory.memsw.limit_in_bytes") - stat.cpu_use_nanos = self:stat_get_int("cpuacct", "cpuacct.usage") + stat.mem_used = self:stat_get_int("memory.usage_in_bytes") + stat.mem_limit = self:stat_get_int("memory.limit_in_bytes") + stat.memsw_used = self:stat_get_int("memory.memsw.usage_in_bytes") + stat.memsw_limit = self:stat_get_int("memory.memsw.limit_in_bytes") + stat.cpu_use_nanos = self:stat_get_int("cpuacct.usage") stat.cpu_use_user, - stat.cpu_use_sys = self:stat_get_ints("cpuacct", "cpuacct.stat", {{1, 2}, {2, 2}}) - stat.blkio = self:stat_match_get_int("blkio", "blkio.throttle.io_service_bytes", "Total", 2) + stat.cpu_use_sys = self:stat_get_ints("cpuacct.stat", {{1, 2}, {2, 2}}) + stat.blkio = self:stat_match_get_int("blkio.throttle.io_service_bytes", "Total", 2) if (total) then total.mem_used = total.mem_used + stat.mem_used @@ -427,6 +391,5 @@ function M.default_config_path_get() end lxc_path = core.default_config_path_get() -cgroup_path = cgroup_path_get() return M -- 1.8.3.1 ------------------------------------------------------------------------------ Android is increasing in popularity, but the open development platform that developers love is also attractive to malware creators. Download this white paper to learn more about secure code signing practices that can help keep Android apps secure. http://pubads.g.doubleclick.net/gampad/clk?id=65839951&iu=/4140/ostg.clktrk _______________________________________________ Lxc-devel mailing list Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel