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 9B3D6283D2 for ; Tue, 31 Jul 2018 10:35:52 -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 PNJGZGxfgqCp for ; Tue, 31 Jul 2018 10:35:52 -0400 (EDT) Received: from smtp50.i.mail.ru (smtp50.i.mail.ru [94.100.177.110]) (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 581CD26DE9 for ; Tue, 31 Jul 2018 10:35:52 -0400 (EDT) Received: by smtp50.i.mail.ru with esmtpa (envelope-from ) id 1fkVkc-0003Xm-5j for tarantool-patches@freelists.org; Tue, 31 Jul 2018 17:35:50 +0300 From: Konstantin Belyavskiy Subject: [tarantool-patches] [PATCH v2] lua: fix for option pid_file overwritten by tarantoolctl Date: Tue, 31 Jul 2018 17:35:49 +0300 Message-Id: <20180731143549.28159-1-k.belyavskiy@tarantool.org> 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: tarantool-patches@freelists.org During startup tarantoolctl ignores 'pid_file' option and set it to default value. This cause a fault if user tries to execute config with option set. In case of being started with tarantoolctl shadow this option with additional wrapper around box.cfg. Changes in V2: Use local defined closure instead of a global function with a variable (based on @GeorgyKirichenko proposal). Closes #3214 --- ticket: https://github.com/tarantool/tarantool/issues/3214 branch: https://github.com/tarantool/tarantool/tree/kbelyavs/gh-3214-tarantoolctl-pidfile-fix extra/dist/tarantoolctl.in | 7 +++++++ test/box/cfg.result | 30 ++++++++++++++++++++++++++++++ test/box/cfg.test.lua | 12 ++++++++++++ 3 files changed, 49 insertions(+) diff --git a/extra/dist/tarantoolctl.in b/extra/dist/tarantoolctl.in index 507ebe8bf..4c7dfa2f1 100755 --- a/extra/dist/tarantoolctl.in +++ b/extra/dist/tarantoolctl.in @@ -527,6 +527,13 @@ local function start() end os.exit(1) end + local old_call = getmetatable(box.cfg).__call + getmetatable(box.cfg).__call = function(old_cfg, cfg) + if old_cfg.pid_file ~= nil and cfg ~= nil and cfg.pid_file ~= nil then + cfg.pid_file = old_cfg.pid_file + end + old_call(old_cfg, cfg) + end return 0 end diff --git a/test/box/cfg.result b/test/box/cfg.result index cda7aa0d3..a2df83310 100644 --- a/test/box/cfg.result +++ b/test/box/cfg.result @@ -365,6 +365,36 @@ test_run:cmd("cleanup server cfg_tester4") - true ... -------------------------------------------------------------------------------- +-- Check fix for pid_file option overwritten by tarantoolctl +-------------------------------------------------------------------------------- +test_run:cmd('create server cfg_tester5 with script = "box/lua/cfg_test1.lua"') +--- +- true +... +test_run:cmd("start server cfg_tester5") +--- +- true +... +test_run:cmd('switch cfg_tester5') +--- +- true +... +box.cfg{pid_file = "current.pid"} +--- +... +test_run:cmd("switch default") +--- +- true +... +test_run:cmd("stop server cfg_tester5") +--- +- true +... +test_run:cmd("cleanup server cfg_tester5") +--- +- true +... +-------------------------------------------------------------------------------- -- Check that 'vinyl_dir' cfg option is not checked as long as -- there is no vinyl indexes (issue #2664) -------------------------------------------------------------------------------- diff --git a/test/box/cfg.test.lua b/test/box/cfg.test.lua index dbb463025..712a165bb 100644 --- a/test/box/cfg.test.lua +++ b/test/box/cfg.test.lua @@ -69,6 +69,18 @@ test_run:cmd("switch default") test_run:cmd("stop server cfg_tester4") test_run:cmd("cleanup server cfg_tester4") +-------------------------------------------------------------------------------- +-- Check fix for pid_file option overwritten by tarantoolctl +-------------------------------------------------------------------------------- + +test_run:cmd('create server cfg_tester5 with script = "box/lua/cfg_test1.lua"') +test_run:cmd("start server cfg_tester5") +test_run:cmd('switch cfg_tester5') +box.cfg{pid_file = "current.pid"} +test_run:cmd("switch default") +test_run:cmd("stop server cfg_tester5") +test_run:cmd("cleanup server cfg_tester5") + -------------------------------------------------------------------------------- -- Check that 'vinyl_dir' cfg option is not checked as long as -- there is no vinyl indexes (issue #2664) -- 2.14.3 (Apple Git-98)