From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTP id 9405E270CB for ; Wed, 18 Jul 2018 05:19:16 -0400 (EDT) Received: from turing.freelists.org ([127.0.0.1]) by localhost (turing.freelists.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id nrx3U7nz3Ku3 for ; Wed, 18 Jul 2018 05:19:16 -0400 (EDT) Received: from smtp2.mail.ru (smtp2.mail.ru [94.100.179.91]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTPS id 48A012708C for ; Wed, 18 Jul 2018 05:19:16 -0400 (EDT) Subject: [tarantool-patches] Re: [PATCH] tarantoolctl: return an error on enter to a dead socket. References: <20180716082655.42311-1-sergepetrenko@tarantool.org> <20180718051953.GA31091@chai> From: Sergey Petrenko Message-ID: <865891b0-f41e-342c-6a02-309502ff1b8a@tarantool.org> Date: Wed, 18 Jul 2018 12:19:42 +0300 MIME-Version: 1.0 In-Reply-To: <20180718051953.GA31091@chai> Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: 8bit Content-Language: ru Sender: tarantool-patches-bounce@freelists.org Errors-to: tarantool-patches-bounce@freelists.org Reply-To: tarantool-patches@freelists.org List-help: List-unsubscribe: List-software: Ecartis version 1.0.0 List-Id: tarantool-patches List-subscribe: List-owner: List-post: List-archive: To: Konstantin Osipov , tarantool-patches@freelists.org Hi! 18.07.2018 8:19, Konstantin Osipov пишет: > * Serge Petrenko [18/07/16 15:14]: > >> Tarantoolctl enter didn't check whether connection to a socket was established >> if a socket file existed. It just executed a local console. >> Fix this by adding a check and an error, also add a test case. >> >> Closes #3364 >> extra/dist/tarantoolctl.in | 19 ++++++++++++------- >> test/app-tap/tarantoolctl.test.lua | 29 ++++++++++++++++++++++++++++- >> 2 files changed, 40 insertions(+), 8 deletions(-) >> >> + local status, err = pcall(function() >> + test:test("check error codes in case of enter", function(test_i) >> + test_i:plan(6) >> + check_ok(test_i, dir, 'enter', 'script', 1, nil, "Can't connect to") >> + check_ok(test_i, dir, 'start', 'script', 0) >> + os.execute(("kill $(cat %s/script.pid)"):format(dir)) > I don't understand how this works. Simply sending > SIGTERM to tarantool would should it down gracefully and remove > the socket. If it doesn't, it's a bug. You should use SIGKILL if Doing   tarantoolctl start testctl   kill (tarantool instance pid) Leaves the socket intact on my pc. tarantoolctl stop also first explicitly deletes the socket file and then sends SIGTERM to the instance. Don't know if it's ok. > you wanted to create a dead socket. But then again why do you need > to start an instance in order to get a dead socket? Can't you make > it simpler and create a dead socket with fio API? Do you mean create a file with fio.open(sock, 'O_CREAT')? It won't be a 'real' socket, but I tried it, and the tests seem to work. Because AFAIU there is no way to create a unix socket without starting to listen on it. That's what I'm doing now:         test_i:plan(4)         check_ok(test_i, dir, 'enter', 'script', 1, nil, "Can't connect to")         local console_sock = 'script.control'         console_sock = fio.pathjoin(fio.dirname(dir), console_sock)         fio.open(console_sock, 'O_CREAT')         check_ok(test_i, dir, 'enter', 'script', 1, nil, "Can't connect to")         fio.unlink(console_sock)