From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf1-f49.google.com (mail-lf1-f49.google.com [209.85.167.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 983A74765E0 for ; Mon, 21 Dec 2020 23:12:23 +0300 (MSK) Received: by mail-lf1-f49.google.com with SMTP id h22so17121036lfu.2 for ; Mon, 21 Dec 2020 12:12:23 -0800 (PST) Date: Mon, 21 Dec 2020 23:12:20 +0300 From: Cyrill Gorcunov Message-ID: <20201221201220.GC81750@grain> References: <20201214113935.1040421-1-gorcunov@gmail.com> <20201214113935.1040421-3-gorcunov@gmail.com> <619b78fe-d559-7eb6-5e28-e239ed7f6e46@tarantool.org> <20201221200226.GB81750@grain> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20201221200226.GB81750@grain> Subject: Re: [Tarantool-patches] [PATCH v4 2/3] cfg: support symbolic evaluation of replication_synchro_quorum List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Vladislav Shpilevoy Cc: Mons Anderson , tml On Mon, Dec 21, 2020 at 11:02:26PM +0300, Cyrill Gorcunov wrote: > On Mon, Dec 21, 2020 at 06:48:04PM +0100, Vladislav Shpilevoy wrote: > > > + > > > + if (lua_isnumber(tarantool_L, -1)) > > > + quorum = (int)lua_tonumber(tarantool_L, -1); > > > > 1. There is a small issue: > > > > tarantool> box.cfg{replication_synchro_quorum='4294967297'} > > 2020-12-21 18:33:16.015 [47366] main/103/interactive I> set 'replication_synchro_quorum' configuration option to "4294967297" > > Actually nope. When we pass this value it is treated > as a plain number and cfg_geti trims it :( > > Here is a master branch output > > | tarantool> box.cfg{replication_synchro_quorum=4294967297} > | ... > | 2020-12-21 22:59:00.614 [176552] main/103/interactive I> set 'replication_synchro_quorum' configuration option to 4294967297 > > Note that on master branch I have to pass real numebr not string, > but issue is the same... > > Need to think how to deal with it. I think we might need something like below, but I'm not sure if this won't break backward compatibility... --- [cyrill@grain tarantool.git] git diff diff --git a/src/cfg.c b/src/cfg.c index 46cff1999..f896c6974 100644 --- a/src/cfg.c +++ b/src/cfg.c @@ -49,10 +49,18 @@ cfg_geti(const char *param) { cfg_get(param); int val; - if (lua_isboolean(tarantool_L, -1)) + if (lua_isboolean(tarantool_L, -1)) { val = lua_toboolean(tarantool_L, -1); - else - val = lua_tointeger(tarantool_L, -1); + } else { + double dv = lua_tointeger(tarantool_L, -1); + errno = 0; + long long lv = llrint(dv); + if (errno != 0) + panic("cfg_geti('%s') round failed", param); + if (lv > INT_MAX || lv < INT_MIN) + panic("cfg_geti('%s') out of bounds", param); + val = (int)lv; + } lua_pop(tarantool_L, 1); return val; } --- [cyrill@grain tarantool.git] ./src/tarantool Tarantool 2.7.0-112-g4c558a4ba type 'help' for interactive help tarantool> box.cfg{replication_synchro_quorum=4294967297} cfg_geti('replication_synchro_quorum') out of bounds