Tarantool development patches archive
 help / color / mirror / Atom feed
From: "Alexander V. Tikhonov" <avtikhon@tarantool.org>
To: Alexander Turenko <alexander.turenko@tarantool.org>,
	Kirill Yukhin <kyukhin@tarantool.org>
Cc: tarantool-patches@dev.tarantool.org
Subject: [Tarantool-patches] [PATCH v1] tarantoolctl: add signal in stop/restart options
Date: Tue, 10 Nov 2020 16:12:45 +0300	[thread overview]
Message-ID: <8424e8274230da97c79a05c554daf5cc46866a85.1605013942.git.avtikhon@tarantool.org> (raw)

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 <instance> [--signal=SIGKILL]
  tarantoolctl restart <instance> [--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
---

Github: https://github.com/tarantool/tarantool/tree/avtikhon/gh-5510-tarantoolctl-signals
Issue: https://github.com/tarantool/tarantool/issues/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

                 reply	other threads:[~2020-11-10 13:12 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=8424e8274230da97c79a05c554daf5cc46866a85.1605013942.git.avtikhon@tarantool.org \
    --to=avtikhon@tarantool.org \
    --cc=alexander.turenko@tarantool.org \
    --cc=kyukhin@tarantool.org \
    --cc=tarantool-patches@dev.tarantool.org \
    --subject='Re: [Tarantool-patches] [PATCH v1] tarantoolctl: add signal in stop/restart options' \
    /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