From: "Илья Конюхов" <runsfor@gmail.com> To: Vladislav Shpilevoy <v.shpilevoy@tarantool.org> Cc: tarantool-patches@dev.tarantool.org, alexander.turenko@tarantool.org Subject: Re: [Tarantool-patches] [PATCH 1/2] feedback: determine runtime platform info Date: Wed, 10 Jun 2020 02:05:44 +0300 [thread overview] Message-ID: <FF623ED6-D428-4637-BF3F-26AC0B9598C0@gmail.com> (raw) In-Reply-To: <36bc5d2e-1981-54ed-befa-095debab6805@tarantool.org> Hi, thanks for your review! > On 7 Jun 2020, at 19:45, Vladislav Shpilevoy <v.shpilevoy@tarantool.org> wrote: > > Hi! Thanks for the patch! > > See 4 comments below. > > On 05/06/2020 10:35, Ilya Konyukhov wrote: >> This patch detect which platform instance is running on. >> It uses luajit `jit` module to get OS name and architecture. >> Se more in [docs page](https://luajit.org/ext_jit.html). >> >> Also it tries to figure out whether instance is running >> inside docker container or not. It's difficult know >> accurately but one of the most stable and simple ways >> at the same time is to look in >> [`/proc/1/cgroup`](https://stackoverflow.com/a/20012536/1881632) >> file. >> >> Closes #3608 >> Related to #4943 >> --- >> cmake/os.cmake | 2 +- >> src/box/lua/feedback_daemon.lua | 29 ++++++++++++++++++++++++++- >> test/box-tap/feedback_daemon.test.lua | 3 +-- >> 3 files changed, 30 insertions(+), 4 deletions(-) >> >> diff --git a/cmake/os.cmake b/cmake/os.cmake >> index 905be61df..462bdccc3 100644 >> --- a/cmake/os.cmake >> +++ b/cmake/os.cmake >> @@ -78,7 +78,7 @@ elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") >> >> # >> # Default build type is None, which uses depends by Apple >> -# command line tools. Also supportting install with MacPorts. >> +# command line tools. Also supporting install with MacPorts. > > 1. Lets better avoid unnecessary diff, not related to the patch > subject. Got it. > >> # >> if (NOT DARWIN_BUILD_TYPE) >> set(DARWIN_BUILD_TYPE None CACHE STRING >> diff --git a/src/box/lua/feedback_daemon.lua b/src/box/lua/feedback_daemon.lua >> index 95130d696..2ce49fb22 100644 >> --- a/src/box/lua/feedback_daemon.lua >> +++ b/src/box/lua/feedback_daemon.lua >> @@ -26,13 +26,40 @@ local function get_fiber_id(f) >> return fid >> end >> >> -local function fill_in_feedback(feedback) >> +local function detect_docker_environment() >> + local fh = fio.open('/proc/1/cgroup', {'O_RDONLY'}) >> + if not fh then return false end > > 2. Please, write conditions and their bodies on > separate lines. In the second patch too. Done. I’ve adjusted ifs and simplified function code a bit. > >> + >> + -- fh:read() doesn't read empty files >> + local big_enough_chunk = 4096 >> + local ok = fh:read(big_enough_chunk) >> + fh:close() >> + if not ok then return false end >> + >> + if not string.find(ok, 'docker') then return false end >> + >> + return true >> +end >> + >> +local function fill_in_base_info(feedback) >> if box.info.status ~= "running" then >> return nil, "not running" >> end >> feedback.tarantool_version = box.info.version >> feedback.server_id = box.info.uuid >> feedback.cluster_id = box.info.cluster.uuid >> +end >> + >> +local function fill_in_platform_info(feedback) >> + feedback.os = jit.os >> + feedback.arch = jit.arch >> + feedback.is_docker = detect_docker_environment() > > 3. detect_docker_environment() involves file reading, up to 4KB. > On my machine it was 1KB. It would be better to avoid calling it > multiple times. I suggest you to call this function only once, and > then re-use the result. It can't change anyway. Thanks for a suggestion about caching. I’ve splitted the function into two parts and added caching part. Now file reading will be invoked only once. > >> +end >> + >> +local function fill_in_feedback(feedback) >> + fill_in_base_info(feedback) >> + fill_in_platform_info(feedback) >> + >> return feedback >> end >> >> diff --git a/test/box-tap/feedback_daemon.test.lua b/test/box-tap/feedback_daemon.test.lua >> index d4adb71f1..c36b2a694 100755 >> --- a/test/box-tap/feedback_daemon.test.lua >> +++ b/test/box-tap/feedback_daemon.test.lua >> @@ -131,5 +131,4 @@ daemon.start() >> daemon.send_test() >> daemon.stop() >> >> -test:check() >> -os.exit(0) >> +os.exit(test:check() and 0 or 1) > > 4. Unnecessary diff, not related to the issue. Reverted back diff --git a/src/box/lua/feedback_daemon.lua b/src/box/lua/feedback_daemon.lua index 95130d696..21e69d511 100644 --- a/src/box/lua/feedback_daemon.lua +++ b/src/box/lua/feedback_daemon.lua @@ -26,13 +26,49 @@ local function get_fiber_id(f) return fid end -local function fill_in_feedback(feedback) +local function detect_docker_environment_impl() + local fh = fio.open('/proc/1/cgroup', {'O_RDONLY'}) + if not fh then + return false + end + + -- fh:read() doesn't read empty "proc" files + local big_enough_chunk = 4096 + local s = fh:read(big_enough_chunk) + fh:close() + + return s and s:find('docker') and true or false +end + +local cached_detect_docker_env + +local function detect_docker_environment() + if cached_detect_docker_env == nil then + cached_detect_docker_env = detect_docker_environment_impl() + end + + return cached_detect_docker_env +end + +local function fill_in_base_info(feedback) if box.info.status ~= "running" then return nil, "not running" end feedback.tarantool_version = box.info.version feedback.server_id = box.info.uuid feedback.cluster_id = box.info.cluster.uuid +end + +local function fill_in_platform_info(feedback) + feedback.os = jit.os + feedback.arch = jit.arch + feedback.is_docker = detect_docker_environment() +end + +local function fill_in_feedback(feedback) + fill_in_base_info(feedback) + fill_in_platform_info(feedback) + return feedback end
next prev parent reply other threads:[~2020-06-09 23:05 UTC|newest] Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-06-05 8:35 [Tarantool-patches] [PATCH 0/2] Extend feedback module report Ilya Konyukhov 2020-06-05 8:35 ` [Tarantool-patches] [PATCH 1/2] feedback: determine runtime platform info Ilya Konyukhov 2020-06-07 16:45 ` Vladislav Shpilevoy 2020-06-09 23:05 ` Илья Конюхов [this message] 2020-06-11 19:32 ` Vladislav Shpilevoy 2020-07-01 0:16 ` Alexander Turenko 2020-07-05 2:14 ` Alexander Turenko 2020-06-05 8:35 ` [Tarantool-patches] [PATCH 2/2] feedback: collect db engines and index features Ilya Konyukhov 2020-06-07 16:45 ` Vladislav Shpilevoy 2020-06-09 23:06 ` Илья Конюхов 2020-06-11 19:32 ` Vladislav Shpilevoy 2020-06-17 8:59 ` Илья Конюхов 2020-06-17 22:53 ` Vladislav Shpilevoy 2020-06-18 15:42 ` Илья Конюхов 2020-06-18 23:02 ` Vladislav Shpilevoy 2020-06-19 14:01 ` Илья Конюхов 2020-06-19 23:49 ` Vladislav Shpilevoy 2020-06-22 8:55 ` Илья Конюхов 2020-07-01 0:15 ` Alexander Turenko 2020-07-03 12:05 ` Илья Конюхов 2020-07-05 2:10 ` Alexander Turenko 2020-06-23 21:23 ` [Tarantool-patches] [PATCH 0/2] Extend feedback module report Vladislav Shpilevoy 2020-07-13 13:47 ` Kirill Yukhin
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=FF623ED6-D428-4637-BF3F-26AC0B9598C0@gmail.com \ --to=runsfor@gmail.com \ --cc=alexander.turenko@tarantool.org \ --cc=tarantool-patches@dev.tarantool.org \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH 1/2] feedback: determine runtime platform info' \ /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