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 8A10812EBF82; Thu, 20 Feb 2025 14:25:37 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 8A10812EBF82 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1740050737; bh=S6m22zKJKCRd2OMbXIDDjsMS5NLlNJQ9Ik172UZsSug=; 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=lsOBACaYefBIPLU5UdgKDcxy3VXXlPBJTKwZV1WsD6kaLsP8dUvofVRN6UU5RpOCM 3xL73nnlCrX6NL32yqF220h6IYUqoYlzYxnruX6hpSEgbDCniZoo9s5ZkF2cGojKGc RdobAyWviRVk6A6FSycQJ7sV6I1YblNfNO4ocyNk= Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) (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 EBBB712EB021 for ; Thu, 20 Feb 2025 14:22:47 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org EBBB712EB021 Received: by mail-ed1-f48.google.com with SMTP id 4fb4d7f45d1cf-5e058ca6806so1380350a12.3 for ; Thu, 20 Feb 2025 03:22:47 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740050567; x=1740655367; 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=E9PAo3fU8SBqgZTwROYt7NwN9VJhrve8twFT6pIY0NI=; b=GUMMv6SzIJV54CrVw4aS7KOm1v4R+HTLCDoTnTec5Zr90lnym8XB2b5IWoLGpu1id7 +YQc3p4Hsh4Zox/gYx+aVnMc8q9XLEdO3dgM6DEXVqklwlRyFgLByuqvSYeUXGCWnZ16 X8VjyvwPj6d7KfM3MpfhGqFltUoXD/YVLEWoxkyL0fw58xtdKBfpyOF23kV6LJvFq3iC nShcGq5rHpiS+vGttoKZgf7/a9XKH62yyWNWRo0Q2MJs1w4G2YkCgeNcYqX7ORZpojyY +wfTV5FVV2QMkUBjwuea+zlGv093zK4Ukem1ILZfnhY4VtKGOCkl/Qce6gvWj9OKUO8Q 8ZHA== X-Gm-Message-State: AOJu0Yz8z9WBIoF8RV/B3XKMC9O8lqVbSNVfh0gbS35p2eE/N6v+Nvsv XIkcUHi+EoyZCsOzV6HMTFgVOtnSokDD6F1uIR0AD+rWrQfPYZO++Y0m2MBt X-Gm-Gg: ASbGncsJvyYSFPt1EvVJAF/wfhGK0jXFIGhf5XjeEaQlpC2092jSim9JjcHFSzoQYcC AOkw+NxCK2pYqXQgQtyXvqRWBMYjybRGqYiRz+G+bqh6rkvr2EMvvxPE09EnkOaaOCMW7wliGbP amiSuykIU9ysZx/bEdBgWfI5gl/cxNqWUneTf03kiDreNLalPntUSd+/3wcGJbz796gOLmn3trj 2tAwOfteaMoHuFXjQ6gTXOgeyLA4IvRP2U/C0u8XP/UTO/q+TTXjqOZarnf+2XVvXIvn4V3Sxce 6uDl X-Google-Smtp-Source: AGHT+IGkQl8wbn3tPqfwQzHBEsTvUPoybVnMLjntBPSLHgthyudVsUo/wNZPCG6UrvHCA1qffxjCxA== X-Received: by 2002:a17:906:9d2:b0:abb:6f30:32c7 with SMTP id a640c23a62f3a-abb709211e5mr1998169266b.10.1740050566757; Thu, 20 Feb 2025 03:22:46 -0800 (PST) Received: from localhost ([5.181.62.98]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-abba8b1df9bsm649383166b.114.2025.02.20.03.22.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Feb 2025 03:22:46 -0800 (PST) X-Google-Original-From: Sergey Bronnikov To: tarantool-patches@dev.tarantool.org, Sergey Kaplun , sergos@tarantool.org Date: Thu, 20 Feb 2025 14:21:54 +0300 Message-ID: <4080c2556ca20ee272c4283ff75361c43e39d674.1740050074.git.sergeyb@tarantool.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [Tarantool-patches] [PATCH luajit 7/8][v3] 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 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