From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp54.i.mail.ru (smtp54.i.mail.ru [217.69.128.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 338B6469719 for ; Wed, 11 Nov 2020 08:21:38 +0300 (MSK) From: "Alexander V. Tikhonov" Date: Wed, 11 Nov 2020 08:21:33 +0300 Message-Id: <8424e8274230da97c79a05c554daf5cc46866a85.1605071861.git.avtikhon@tarantool.org> In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Subject: [Tarantool-patches] [PATCH v1 1/2] tarantoolctl: add signal in stop/restart options List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alexander Turenko , Kirill Yukhin Cc: tarantool-patches@dev.tarantool.org Found that some of the instances could not be killed with SIGTERM signal and it really needed SIGKILL signal to be sure that the instance would be terminated. Otherwise some tests may fail, like: No output during 120 seconds. Will abort after 120 seconds without output. List of workers not reporting the status: - 001_engine [engine/json.test.lua, memtx] at var/001_engine/json.result:598 Test hung! Result content mismatch: --- engine/json.result Fri Nov 6 08:35:45 2020 +++ var/001_engine/json.result Mon Nov 9 03:48:40 2020 @@ -596,248 +596,3 @@ - ok ... test_run:cmd("restart server default") -engine = test_run:get_cfg('engine') ---- -… Test run uses 'tarantoolctl' tool for commands in format "restart server default", and 'tarantoolctl' had only single way to kill it using SIGTERM signal. To implement ability to use it with SIGKILL was added additional non-mandatory option to stop and restart 'tarantoolctl' commands, like: tarantoolctl stop [--signal=SIGKILL] tarantoolctl restart [--signal=SIGKILL] This options didn't change the backward compatibility of 'tarantoolctl' tool, but gave the tests ability to stop and restart instances in the following way: test_run:cmd("stop server default with signal=KILL") test_run:cmd("restart server default with signal=KILL") It helped to fix the issue with hanging instances in the needed tests. Closes #5510 --- extra/dist/tarantoolctl.in | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/extra/dist/tarantoolctl.in b/extra/dist/tarantoolctl.in index 0726e7f46..1666b1005 100755 --- a/extra/dist/tarantoolctl.in +++ b/extra/dist/tarantoolctl.in @@ -47,6 +47,7 @@ local positional_arguments local keyword_arguments local lua_arguments = arg local language +local signal -- function for printing usage reference local usage @@ -162,6 +163,10 @@ local function load_default_file(default_file) os.exit(1) end + -- SIGTERM by default + signal = d.signal or 15 + d.signal = nil + default_cfg = d if not usermode then @@ -595,8 +600,10 @@ local function stop() return 1 end - if ffi.C.kill(pid, 15) < 0 then - log.error("Can't kill process %d: %s", pid, errno.strerror()) + signal = keyword_arguments.signal or signal + if ffi.C.kill(pid, 0) and ffi.C.kill(pid, signal) < 0 then + log.error("Can't kill process %d with signal %d: %s", + pid, signal, errno.strerror()) fio.unlink(pid_file) return 1 end @@ -1010,11 +1017,14 @@ local commands = setmetatable({ } }, stop = { func = exit_wrapper(stop), process = process_local, help = { - header = "%s stop INSTANCE", + header = "%s stop INSTANCE [--signal=signal]", linkmode = "%s stop", description = [=[ Stop a Tarantool instance. + + Supported options: + * --signal=signal use to the stop the instance. ]=], weight = 20, deprecated = false, @@ -1065,11 +1075,14 @@ local commands = setmetatable({ } }, restart = { func = restart, process = process_local, help = { - header = "%s restart INSTANCE", + header = "%s restart INSTANCE [--signal=signal]", linkmode = "%s restart", description = [=[ Stop and start a Tarantool instance. + + Supported options: + * --signal=signal use to the stop the instance. ]=], weight = 40, deprecated = false, @@ -1288,6 +1301,7 @@ local function populate_arguments() { 'format', 'string' }, { 'replica', 'number+' }, { 'language', 'string' }, + { 'signal', 'number' }, }) local cmd_name -- 2.25.1