From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from [87.239.111.99] (localhost [127.0.0.1]) by dev.tarantool.org (Postfix) with ESMTP id 360F612292DA; Thu, 13 Feb 2025 14:14:04 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 360F612292DA DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1739445244; bh=Qfsk6e4FY35vdSR5sVNGsx+AdSLRnNf9TgJSckGXGCQ=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=ewgjq10YdJ1VrZFJwOZ346GBnF+wOoLKbhFqhoLUhueaU6vNz70cb7npJ+Uf6jVQn AbwID67RcRckLN8Pg5c3x9cQue4sOJcv3Rk8AcmHlPSlh7nZqHb9V0g5HF3PdbW+RE aVUhJ2Fb8XNGqrnscCM+K562t/bmqOjBzDwrKtHY= Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.49]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 2C17F12292DA for ; Thu, 13 Feb 2025 14:11:50 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 2C17F12292DA Received: by mail-ej1-f49.google.com with SMTP id a640c23a62f3a-ab7e1286126so145167266b.0 for ; Thu, 13 Feb 2025 03:11:50 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739445109; x=1740049909; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ew7iLTQ5oC4YU6M3oCRT5/nZcGZGc/kpI3rBrbLpHdY=; b=o1y+g9/khLOgW3TBrXiKHhY5ksYBeVOahsYdmpeH85tl6UF7cm40EobzSYw34QxqUi m3N4+iutq0QRjqqmhQpmUMv7wlHwSxaCMg4vhg5lWaPryF+CQrIUstl95pbDWF+k/xD7 rN4P0kMTLjj4eh9QSiF4/JJZNX1A6OkqToK5C8q81mvU+LQDs+Nosc21XSqAQ9qMhPt1 Wi3E9+v5tqW/0MQ44twp3tcfe9ESnCkc1BVev1yQ8SvwDtbYjk1dOV2AaT1txxtE6OI6 tSv9MwtcN/SnhNGb0v+RKwdJGIT+uUJ0RS9Afb7uJuqpruvAHvj5mL0ETrZpKaCGionU m2+Q== X-Gm-Message-State: AOJu0YyyQFHa9zLlVrk6i4wmN3FDE3ucHwZwVaZH4+6VS+UTX0NzXOQh pWXK0QKCa0aGr6XX1YLNmmLsXvRQ0T+jkK3flUVpwIRMQNMQDoMftsS17wzu X-Gm-Gg: ASbGnctx91wpFKIhI0HOcqPU+WW3nTshJwUmClWe93PzHksO0iPG22fM7kwps/yK/Dw V/0nfF12R3Z+wBqc2jos2pSiyHfyZMyFBnXUB0MZcLPlBZF0xFKoWUOMPjE/PmzLn2vzlke17ly vrJ2NcCaGtB5QnygrjBK/qJB17oYLQ+Q0lR2cA5KocLRaxUTIIMCmmXNYEjwB0HfZOxFAzGbu+b gFsW2/FiEuJWC8HENsFrPGxO4g8WGE/2MwxX3cskbpB3XM2sxw9bSuUhkuaOSmydJmwQJSCARa3 Bgyl8g== X-Google-Smtp-Source: AGHT+IHY6OlAQp7srhSEiapcE1NOlDp8jP7ORn9w8cF7aUnm4BAOADuXwCmgg6VRfQ0TMnttdOXArw== X-Received: by 2002:a17:907:3ea2:b0:ab7:c43f:8382 with SMTP id a640c23a62f3a-ab7f33cab3bmr718959466b.31.1739445108927; Thu, 13 Feb 2025 03:11:48 -0800 (PST) Received: from localhost ([5.181.62.98]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-aba5337698asm108206166b.120.2025.02.13.03.11.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Feb 2025 03:11:48 -0800 (PST) X-Google-Original-From: Sergey Bronnikov To: tarantool-patches@dev.tarantool.org, Sergey Kaplun Date: Thu, 13 Feb 2025 14:10:49 +0300 Message-Id: <7f83ca101b76bba7b5789a6c5a7e9acb8044fed1.1739444510.git.sergeyb@tarantool.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [Tarantool-patches] [PATCH luajit 6/7] misc: specific message for disabled profilers X-BeenThere: tarantool-patches@dev.tarantool.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Sergey Bronnikov via Tarantool-patches Reply-To: Sergey Bronnikov Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" sysprof and memprof Lua API functions returns an error message "profiler misuse", when appropriate profiler is disabled in build. It is not possible to easily distinquish whether it is really misuse or profiler was not enabled in build. The patch changes errors messages, so when profiler was not enabled in build message is the following: "profiler misuse: profiler is disabled". --- src/lib_misc.c | 27 ++++++++++++++++- src/lj_errmsg.h | 1 + .../misclib-memprof-lapi-disabled.test.lua | 22 ++++++++++++++ .../misclib-sysprof-lapi-disabled.test.lua | 29 +++++++++++++++++++ 4 files changed, 78 insertions(+), 1 deletion(-) 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 d71904e4..7666d85f 100644 --- a/src/lib_misc.c +++ b/src/lib_misc.c @@ -315,10 +315,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; +#if !LJ_HASSYSPROF + err_details = err2msg(LJ_ERR_PROF_DETAILS_DISABLED); + return sysprof_error(L, PROFILE_ERRUSE, err_details); +#endif /* !LJ_HASSYSPROF */ + int status = PROFILE_SUCCESS; struct luam_Sysprof_Options opt = {}; - const char *err_details = NULL; status = parse_sysprof_opts(L, &opt, &err_details); if (LJ_UNLIKELY(status != PROFILE_SUCCESS)) @@ -336,6 +341,11 @@ LJLIB_CF(misc_sysprof_start) /* local res, err, errno = profile.sysprof_stop() */ LJLIB_CF(misc_sysprof_stop) { +#if !LJ_HASSYSPROF + const char *err_details = NULL; + err_details = err2msg(LJ_ERR_PROF_DETAILS_DISABLED); + return sysprof_error(L, PROFILE_ERRUSE, err_details); +#endif /* !LJ_HASSYSPROF */ int status = luaM_sysprof_stop(L); if (LJ_UNLIKELY(status != PROFILE_SUCCESS)) return sysprof_error(L, status, NULL); @@ -347,6 +357,11 @@ LJLIB_CF(misc_sysprof_stop) /* local counters, err, errno = sysprof.report() */ LJLIB_CF(misc_sysprof_report) { +#if !LJ_HASSYSPROF + const char *err_details = NULL; + err_details = err2msg(LJ_ERR_PROF_DETAILS_DISABLED); + return sysprof_error(L, PROFILE_ERRUSE, err_details); +#endif /* !LJ_HASSYSPROF */ struct luam_Sysprof_Counters counters = {}; GCtab *data_tab = NULL; GCtab *count_tab = NULL; @@ -386,6 +401,11 @@ LJLIB_CF(misc_sysprof_report) /* local started, err, errno = misc.memprof.start(fname) */ LJLIB_CF(misc_memprof_start) { +#if !LJ_HASMEMPROF + const char *err_details = NULL; + err_details = err2msg(LJ_ERR_PROF_DETAILS_DISABLED); + return sysprof_error(L, PROFILE_ERRUSE, err_details); +#endif /* !LJ_HASMEMPROF */ struct lj_memprof_options opt = {0}; const char *fname = strdata(lj_lib_checkstr(L, 1)); struct profile_ctx *ctx; @@ -440,6 +460,11 @@ LJLIB_CF(misc_memprof_start) /* local stopped, err, errno = misc.memprof.stop() */ LJLIB_CF(misc_memprof_stop) { +#if !LJ_HASMEMPROF + const char *err_details = NULL; + err_details = err2msg(LJ_ERR_PROF_DETAILS_DISABLED); + return sysprof_error(L, PROFILE_ERRUSE, err_details); +#endif /* !LJ_HASMEMPROF */ int status = lj_memprof_stop(L); if (status != PROFILE_SUCCESS) { switch (status) { 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..a0669cc6 --- /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 memprof 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 memprof 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..79707434 --- /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.34.1