From: Olga Arkhangelskaia <krishtal.olja@gmail.com> To: tarantool-patches@freelists.org Cc: Olga Arkhangelskaia <krishtal.olja@gmail.com> Subject: [tarantool-patches] [PATCH] box: fix assertion with duplication in repl. source Date: Tue, 28 Aug 2018 19:22:26 +0300 [thread overview] Message-ID: <20180828162226.53550-1-krishtal.olja@gmail.com> (raw) When we try to connect one master more than once we used to have assertion instead of error. Closes #3610 --- https://github.com/tarantool/tarantool/issues/3610 https://github.com/tarantool/tarantool/tree/OKriw/assert_fail_when_connect_master_twice src/box/box.cc | 14 ++++++++++++++ test/box-tap/cfg.test.lua | 8 +++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/box/box.cc b/src/box/box.cc index 8d7454d1f..3a571ae3c 100644 --- a/src/box/box.cc +++ b/src/box/box.cc @@ -369,9 +369,23 @@ static void box_check_replication(void) { int count = cfg_getarr_size("replication"); + char *repl[count-1]; for (int i = 0; i < count; i++) { const char *source = cfg_getarr_elem("replication", i); box_check_uri(source, "replication"); + repl[i] = strdup(source); + if (repl[i] == NULL) { + tnt_raise(OutOfMemory, sizeof(*source), "source", "malloc"); + } + for (int j = i; j >= 1; j--) { + if (strcmp(repl[i], repl[j-1]) == 0) { + tnt_raise(ClientError, ER_CFG, "replication", + "duplication of replication source"); + } + } + } + for (int i = 0; i < count; i++) { + free(repl[i]); } } diff --git a/test/box-tap/cfg.test.lua b/test/box-tap/cfg.test.lua index 5e72004ca..b227c5edb 100755 --- a/test/box-tap/cfg.test.lua +++ b/test/box-tap/cfg.test.lua @@ -6,7 +6,7 @@ local socket = require('socket') local fio = require('fio') local uuid = require('uuid') local msgpack = require('msgpack') -test:plan(90) +test:plan(91) -------------------------------------------------------------------------------- -- Invalid values @@ -446,5 +446,11 @@ code = string.format(code_fmt, dir, instance_uuid, uuid.new()) test:is(run_script(code), PANIC, "replicaset_uuid mismatch") fio.rmdir(dir) +-- +--gh-3610: assertion failure when trying to connect to the same master more than once +-- +status, reason = pcall(box.cfg, {listen = 3303, replication={3303,3303}}) +test:ok(not status and reason:match("Incorrect"), "Duplication of replication source") + test:check() os.exit(0) -- 2.14.3 (Apple Git-98)
next reply other threads:[~2018-08-28 16:22 UTC|newest] Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-08-28 16:22 Olga Arkhangelskaia [this message] 2018-08-29 9:03 ` Vladimir Davydov 2018-08-29 9:36 ` Olga Krishtal 2018-08-29 10:00 ` Vladimir Davydov
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=20180828162226.53550-1-krishtal.olja@gmail.com \ --to=krishtal.olja@gmail.com \ --cc=tarantool-patches@freelists.org \ --subject='Re: [tarantool-patches] [PATCH] box: fix assertion with duplication in repl. source' \ /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