Tarantool development patches archive
 help / color / mirror / Atom feed
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
 

  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