From: Sergey Bronnikov via Tarantool-patches <tarantool-patches@dev.tarantool.org> To: tarantool-patches@dev.tarantool.org, Sergey Kaplun <skaplun@tarantool.org>, sergos@tarantool.org Subject: [Tarantool-patches] [PATCH luajit 7/8][v3] misc: specific message for disabled profilers Date: Thu, 20 Feb 2025 14:21:54 +0300 [thread overview] Message-ID: <4080c2556ca20ee272c4283ff75361c43e39d674.1740050074.git.sergeyb@tarantool.org> (raw) In-Reply-To: <cover.1740050074.git.sergeyb@tarantool.org> sysprof and memprof Lua API functions return an error message "profiler misuse", when the corresponding profiler is disabled in the build. It is not possible to easily distinguish whether it is really misuse or if the profiler was not enabled in the build. The patch changes error messages, so when profiler is not enabled in the build, the message is the following: "profiler misuse: profiler is disabled". --- src/lib_misc.c | 25 ++++++++++++++-- src/lj_errmsg.h | 1 + .../misclib-memprof-lapi-disabled.test.lua | 22 ++++++++++++++ .../misclib-sysprof-lapi-disabled.test.lua | 29 +++++++++++++++++++ 4 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 test/tarantool-tests/profilers/misclib-memprof-lapi-disabled.test.lua create mode 100644 test/tarantool-tests/profilers/misclib-sysprof-lapi-disabled.test.lua diff --git a/src/lib_misc.c b/src/lib_misc.c index 1fd06dd1..d98cf3f0 100644 --- a/src/lib_misc.c +++ b/src/lib_misc.c @@ -306,10 +306,15 @@ static int sysprof_error(lua_State *L, int status, const char *err_details) /* local res, err, errno = sysprof.start(options) */ LJLIB_CF(misc_sysprof_start) { + const char *err_details = NULL; int status = PROFILE_SUCCESS; struct luam_Sysprof_Options opt = {}; - const char *err_details = NULL; + + if (!LJ_HASSYSPROF) { + err_details = err2msg(LJ_ERR_PROF_DETAILS_DISABLED); + return sysprof_error(L, PROFILE_ERRUSE, err_details); + } status = parse_sysprof_opts(L, &opt, &err_details); if (LJ_UNLIKELY(status != PROFILE_SUCCESS)) @@ -328,6 +333,10 @@ LJLIB_CF(misc_sysprof_start) LJLIB_CF(misc_sysprof_stop) { int status = luaM_sysprof_stop(L); + if (!LJ_HASSYSPROF) { + const char *err_details = err2msg(LJ_ERR_PROF_DETAILS_DISABLED); + return sysprof_error(L, PROFILE_ERRUSE, err_details); + } if (LJ_UNLIKELY(status != PROFILE_SUCCESS)) return sysprof_error(L, status, NULL); @@ -341,8 +350,12 @@ LJLIB_CF(misc_sysprof_report) struct luam_Sysprof_Counters counters = {}; GCtab *data_tab = NULL; GCtab *count_tab = NULL; - int status = luaM_sysprof_report(&counters); + if (!LJ_HASSYSPROF) { + const char *err_details = err2msg(LJ_ERR_PROF_DETAILS_DISABLED); + return sysprof_error(L, PROFILE_ERRUSE, err_details); + } + if (status != PROFILE_SUCCESS) return sysprof_error(L, status, NULL); @@ -381,6 +394,10 @@ LJLIB_CF(misc_memprof_start) const char *fname = strdata(lj_lib_checkstr(L, 1)); struct profile_ctx *ctx; int memprof_status; + if (!LJ_HASMEMPROF) { + const char *err_details = err2msg(LJ_ERR_PROF_DETAILS_DISABLED); + return sysprof_error(L, PROFILE_ERRUSE, err_details); + } /* ** FIXME: more elegant solution with ctx. @@ -432,6 +449,10 @@ LJLIB_CF(misc_memprof_start) LJLIB_CF(misc_memprof_stop) { int status = lj_memprof_stop(L); + if (!LJ_HASMEMPROF) { + const char *err_details = err2msg(LJ_ERR_PROF_DETAILS_DISABLED); + return sysprof_error(L, PROFILE_ERRUSE, err_details); + } if (status != PROFILE_SUCCESS) { switch (status) { case PROFILE_ERRUSE: diff --git a/src/lj_errmsg.h b/src/lj_errmsg.h index b5c3a275..e26f5e38 100644 --- a/src/lj_errmsg.h +++ b/src/lj_errmsg.h @@ -193,6 +193,7 @@ ERRDEF(PROF_DETAILS_BADINTERVAL, "profiler interval must be greater than 1") ERRDEF(PROF_DETAILS_BADPATH, "profiler path does not exist") ERRDEF(PROF_DETAILS_BADTABLE, "profiler expects a table with parameters") +ERRDEF(PROF_DETAILS_DISABLED, "profiler is disabled") #undef ERRDEF /* Detecting unused error messages: diff --git a/test/tarantool-tests/profilers/misclib-memprof-lapi-disabled.test.lua b/test/tarantool-tests/profilers/misclib-memprof-lapi-disabled.test.lua new file mode 100644 index 00000000..de0aa136 --- /dev/null +++ b/test/tarantool-tests/profilers/misclib-memprof-lapi-disabled.test.lua @@ -0,0 +1,22 @@ +local tap = require('tap') +local test = tap.test('misclib-memprof-lapi-disabled'):skipcond({ + ['Memprof is enabled'] = not os.getenv('LUAJIT_DISABLE_MEMPROF'), +}) + +test:plan(6) + +-- Attempt to start memprof when it is disabled. +local res, err, errno = misc.memprof.start() +test:is(res, nil, 'result status on start when memprof is disabled') +test:ok(err:match('profiler is disabled'), + 'error on start when memprof is disabled') +test:ok(type(errno) == 'number', 'errno on start when memprof is disabled') + +-- Attempt to stop memprof when it is disabled. +res, err, errno = misc.memprof.stop() +test:is(res, nil, 'result status on stop when memprof is disabled') +test:ok(err:match('profiler is disabled'), + 'error on stop when memprof is disabled') +test:ok(type(errno) == 'number', 'errno on start when memprof is disabled') + +test:done(true) diff --git a/test/tarantool-tests/profilers/misclib-sysprof-lapi-disabled.test.lua b/test/tarantool-tests/profilers/misclib-sysprof-lapi-disabled.test.lua new file mode 100644 index 00000000..2a9ce796 --- /dev/null +++ b/test/tarantool-tests/profilers/misclib-sysprof-lapi-disabled.test.lua @@ -0,0 +1,29 @@ +local tap = require('tap') +local test = tap.test('misclib-sysprof-lapi-disabled'):skipcond({ + ['Sysprof is enabled'] = not os.getenv('LUAJIT_DISABLE_SYSPROF'), +}) + +test:plan(9) + +-- Attempt to start sysprof when sysprof is disabled. +local res, err, errno = misc.sysprof.start() +test:is(res, nil, 'result status on start when sysprof is disabled') +test:ok(err:match('profiler is disabled'), + 'error on start when sysprof is disabled') +test:ok(type(errno) == 'number', 'errno on start when sysprof is disabled') + +-- Attempt to stop sysprof when sysprof is disabled. +res, err, errno = misc.sysprof.stop() +test:is(res, nil, 'result status on stop when sysprof is disabled') +test:ok(err:match('profiler is disabled'), + 'error on stop when sysprof is disabled') +test:ok(type(errno) == 'number', 'errno on start when sysprof is disabled') + +-- Attempt to report when sysprof is disabled. +res, err, errno = misc.sysprof.report() +test:is(res, nil, 'result status on report when sysprof is disabled') +test:ok(err:match('profiler is disabled'), + 'error on stop when sysprof is disabled') +test:ok(type(errno) == 'number', 'errno on start when sysprof is disabled') + +test:done(true) -- 2.43.0
next prev parent reply other threads:[~2025-02-20 11:25 UTC|newest] Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top 2025-02-20 11:21 [Tarantool-patches] [PATCH luajit 0/8][v3] Fix profilers issues Sergey Bronnikov via Tarantool-patches 2025-02-20 11:21 ` [Tarantool-patches] [PATCH luajit 1/8][v3] test: add descriptions to sysprof testcases Sergey Bronnikov via Tarantool-patches 2025-02-20 11:21 ` [Tarantool-patches] [PATCH luajit 2/8][v3] test: align test title with test filename Sergey Bronnikov via Tarantool-patches 2025-02-20 11:21 ` [Tarantool-patches] [PATCH luajit 3/8][v3] sysprof: fix typo in the comment Sergey Bronnikov via Tarantool-patches 2025-02-20 11:21 ` [Tarantool-patches] [PATCH luajit 4/8][v3] sysprof: introduce specific errors and default mode Sergey Bronnikov via Tarantool-patches 2025-02-20 11:21 ` [Tarantool-patches] [PATCH luajit 5/8][v3] test: introduce flag LUAJIT_DISABLE_MEMPROF Sergey Bronnikov via Tarantool-patches 2025-02-20 11:21 ` [Tarantool-patches] [PATCH luajit 6/8][v3] ci: add workflow with disabled profilers Sergey Bronnikov via Tarantool-patches 2025-02-20 11:21 ` Sergey Bronnikov via Tarantool-patches [this message] 2025-02-20 11:21 ` [Tarantool-patches] [PATCH luajit 8/8][v3] memprof: set default path to profiling output file Sergey Bronnikov via Tarantool-patches
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=4080c2556ca20ee272c4283ff75361c43e39d674.1740050074.git.sergeyb@tarantool.org \ --to=tarantool-patches@dev.tarantool.org \ --cc=estetus@gmail.com \ --cc=sergos@tarantool.org \ --cc=skaplun@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH luajit 7/8][v3] misc: specific message for disabled profilers' \ /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