From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from [87.239.111.99] (localhost [127.0.0.1]) by dev.tarantool.org (Postfix) with ESMTP id A0EEA6BD14; Sun, 11 Apr 2021 21:00:42 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org A0EEA6BD14 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1618164042; bh=Sv2jr6C86w5XLouTGsS+BpYY5OJdzs5nh67FhCCO/aM=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=nYrymTfegF6kNBfZ083IpVu/MwiY5PKLDG9y8v56OUuPVty3q1KoAaveG2rcB3iix mvlabGhFHRenSuy/97felPelPW5IBGMcotbDW9Q0It6o+7d5RP7Hi4rzPMCcvyIqa+ vItPTVUeTyaSwWbGPt+2CgKDpZBGJrd7+WOyqdfA= Received: from smtp42.i.mail.ru (smtp42.i.mail.ru [94.100.177.102]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 0D0D66BD17 for ; Sun, 11 Apr 2021 20:56:19 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 0D0D66BD17 Received: by smtp42.i.mail.ru with esmtpa (envelope-from ) id 1lVeJm-0001Ua-9d; Sun, 11 Apr 2021 20:56:18 +0300 To: v.shpilevoy@tarantool.org, gorcunov@gmail.com Date: Sun, 11 Apr 2021 20:56:04 +0300 Message-Id: X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-7564579A: 646B95376F6C166E X-77F55803: 4F1203BC0FB41BD92FFCB8E6708E74806859AC5FE18436AEED970E897805ADA4182A05F53808504096E72708EFB6D79B934AE01D3076C535BC97A3AAC567B25E5CC58F07922F3C9F X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE7729620CF28AB8309EA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F79006378CCCB41504E044EE8638F802B75D45FF914D58D5BE9E6BC1A93B80C6DEB9DEE97C6FB206A91F05B25A3B43D32F7C135A8A22B13F5E8E6C8B79373A8315E4CF65D2E47CDBA5A96583C09775C1D3CA48CF4964A708C60C975A117882F4460429724CE54428C33FAD30A8DF7F3B2552694AC26CFBAC0749D213D2E47CDBA5A9658378DA827A17800CE709B92020B71E24959FA2833FD35BB23DF004C90652538430302FCEF25BFAB3454AD6D5ED66289B5278DA827A17800CE7BC4FC0CD0F5A7289D32BA5DBAC0009BE395957E7521B51C20BC6067A898B09E4090A508E0FED6299176DF2183F8FC7C0AB21AB2B3BFE6FE0CD04E86FAF290E2D7E9C4E3C761E06A71DD303D21008E298D5E8D9A59859A8B6B372FE9A2E580EFC725E5C173C3A84C30584FF81F342DA0735872C767BF85DA2F004C90652538430E4A6367B16DE6309 X-B7AD71C0: AC4F5C86D027EB782CDD5689AFBDA7A24209795067102C07E8F7B195E1C9783191471F51605917AD57D12FD7D753A721 X-C1DE0DAB: C20DE7B7AB408E4181F030C43753B8186998911F362727C4C7A0BC55FA0FE5FCFD80A448CD634CA58BB384B108AABB99D32B952B3E12908EB1881A6453793CE9C32612AADDFBE061C61BE10805914D3804EBA3D8E7E5B87ABF8C51168CD8EBDB63AF70AF8205D7DCDC48ACC2A39D04F89CDFB48F4795C241BDAD6C7F3747799A X-C8649E89: 4E36BF7865823D7055A7F0CF078B5EC49A30900B95165D341E08D7EE1804B763DD406C58DADEB49B6190B702723102B6C3BE253362F807B0ED5EB353933AB3B91D7E09C32AA3244C737BD6DA6D1B31BC36DBF268B9C31D5BD9ADFF0C0BDB8D1F927AC6DF5659F194 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5ycPtXkTV4k65bRjmOUUP8cvGozZ33TWg5HZplvhhXbhDGzqmQDTd6OAevLeAnq3Ra9uf7zvY2zzsIhlcp/Y7m53TZgf2aB4JOg4gkr2biojbL9S8ysBdXjz3uqod8pbheVzBOOpPpp+ X-Mailru-Sender: 583F1D7ACE8F49BDD2846D59FC20E9F8A3D5B6EFD6943869FF78EB63BC6180B387CEEC9A6C6A8AD5424AE0EB1F3D1D21E2978F233C3FAE6EE63DB1732555E4A8EE80603BA4A5B0BC112434F685709FCF0DA7A0AF5A3A8387 X-Mras: Ok Subject: [Tarantool-patches] [PATCH 9/9] box.ctl: rename clear_synchro_queue to promote X-BeenThere: tarantool-patches@dev.tarantool.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Serge Petrenko via Tarantool-patches Reply-To: Serge Petrenko Cc: tarantool-patches@dev.tarantool.org Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" New function name will be `box.ctl.promote()`. It's much shorter and closer to the function's now enriched functionality. Old name `box.ctl.clear_synchro_queue()` remains in Lua for the sake of backward compatibility. Follow-up #5445 Closes #3055 @TarantoolBot document Title: deprecate `box.ctl.clear_synchro_queue()` in favor of `box.ctl.promote()` Replace all the mentions of `box.ctl.clear_synchro_queue()` with `box.ctl.promote()` and add a note that `box.ctl.clear_synchro_queue()` is a deprecated alias to `box.ctl.promote()` --- changelogs/unreleased/box-ctl-promote.md | 8 ++++++++ src/box/box.cc | 20 ++++++++++---------- src/box/box.h | 2 +- src/box/lua/ctl.c | 8 +++++--- src/box/raft.c | 4 ++-- 5 files changed, 26 insertions(+), 16 deletions(-) create mode 100644 changelogs/unreleased/box-ctl-promote.md diff --git a/changelogs/unreleased/box-ctl-promote.md b/changelogs/unreleased/box-ctl-promote.md new file mode 100644 index 000000000..15f6fb206 --- /dev/null +++ b/changelogs/unreleased/box-ctl-promote.md @@ -0,0 +1,8 @@ +## feature/replication + +* Introduce `box.ctl.promote()` and the concept of manual elections (enabled + with `election_mode='manual'`). Once the instance is in `manual` election + mode, it acts like a `voter` most of the time, but may trigger elections and + become a leader, once `box.ctl.promote()` is called. + When `election_mode ~= 'manual'`, `box.ctl.promote()` replaces + `box.ctl.clear_synchro_queue()`, which is now deprecated (gh-3055). diff --git a/src/box/box.cc b/src/box/box.cc index 41d2ff0f8..40467805b 100644 --- a/src/box/box.cc +++ b/src/box/box.cc @@ -1509,12 +1509,12 @@ box_wait_quorum(uint32_t lead_id, int64_t target_lsn, int quorum, } int -box_clear_synchro_queue(bool try_wait) +box_promote(bool try_wait) { /* A guard to block multiple simultaneous function invocations. */ - static bool in_clear_synchro_queue = false; - if (in_clear_synchro_queue) { - diag_set(ClientError, ER_UNSUPPORTED, "clear_synchro_queue", + static bool in_promote = false; + if (in_promote) { + diag_set(ClientError, ER_UNSUPPORTED, "promote", "simultaneous invocations"); return -1; } @@ -1564,7 +1564,7 @@ box_clear_synchro_queue(bool try_wait) int64_t wait_lsn = txn_limbo.confirmed_lsn; int rc = 0; int quorum = replication_synchro_quorum; - in_clear_synchro_queue = true; + in_promote = true; if (run_elections) { /* @@ -1581,13 +1581,13 @@ box_clear_synchro_queue(bool try_wait) raft_cfg_is_candidate(box_raft(), false, false); if (!box_raft()->is_enabled) { diag_set(ClientError, ER_RAFT_DISABLED); - in_clear_synchro_queue = false; + in_promote = false; return -1; } if (box_raft()->state != RAFT_STATE_LEADER) { diag_set(ClientError, ER_INTERFERING_PROMOTE, box_raft()->leader); - in_clear_synchro_queue = false; + in_promote = false; return -1; } } @@ -1611,13 +1611,13 @@ box_clear_synchro_queue(bool try_wait) if (former_leader_id != txn_limbo.owner_id) { diag_set(ClientError, ER_INTERFERING_PROMOTE, txn_limbo.owner_id); - in_clear_synchro_queue = false; + in_promote = false; return -1; } } /* - * clear_synchro_queue() is a no-op on the limbo owner, so all the rows + * promote() is a no-op on the limbo owner, so all the rows * in the limbo must've come through the applier meaning they already * have an lsn assigned, even if their WAL write hasn't finished yet. */ @@ -1654,7 +1654,7 @@ promote: req.lsn); } } - in_clear_synchro_queue = false; + in_promote = false; return rc; } diff --git a/src/box/box.h b/src/box/box.h index e2321b9b0..89c6fe1a1 100644 --- a/src/box/box.h +++ b/src/box/box.h @@ -274,7 +274,7 @@ extern "C" { typedef struct tuple box_tuple_t; int -box_clear_synchro_queue(bool try_wait); +box_promote(bool try_wait); /* box_select is private and used only by FFI */ API_EXPORT int diff --git a/src/box/lua/ctl.c b/src/box/lua/ctl.c index d039a059f..f06af8588 100644 --- a/src/box/lua/ctl.c +++ b/src/box/lua/ctl.c @@ -82,9 +82,9 @@ lbox_ctl_on_schema_init(struct lua_State *L) } static int -lbox_ctl_clear_synchro_queue(struct lua_State *L) +lbox_ctl_promote(struct lua_State *L) { - if (box_clear_synchro_queue(true) != 0) + if (box_promote(true) != 0) return luaT_error(L); return 0; } @@ -124,7 +124,9 @@ static const struct luaL_Reg lbox_ctl_lib[] = { {"wait_rw", lbox_ctl_wait_rw}, {"on_shutdown", lbox_ctl_on_shutdown}, {"on_schema_init", lbox_ctl_on_schema_init}, - {"clear_synchro_queue", lbox_ctl_clear_synchro_queue}, + {"promote", lbox_ctl_promote}, + /* An old alias. */ + {"clear_synchro_queue", lbox_ctl_promote}, {"is_recovery_finished", lbox_ctl_is_recovery_finished}, {"set_on_shutdown_timeout", lbox_ctl_set_on_shutdown_timeout}, {NULL, NULL} diff --git a/src/box/raft.c b/src/box/raft.c index 47d4fd56d..45baf5dd8 100644 --- a/src/box/raft.c +++ b/src/box/raft.c @@ -91,7 +91,7 @@ box_raft_update_synchro_queue(struct raft *raft) * If the node became a leader, it means it will ignore all records from * all the other nodes, and won't get late CONFIRM messages anyway. Can * clear the queue without waiting for confirmations. - * It's alright that the user may have called clear_synchro_queue + * It's alright that the user may have called promote * manually. In this case the call below will exit immediately and we'll * simply log a warning. */ @@ -100,7 +100,7 @@ box_raft_update_synchro_queue(struct raft *raft) int rc = 0; uint32_t errcode = 0; do { - rc = box_clear_synchro_queue(false); + rc = box_promote(false); if (rc != 0) { struct error *err = diag_last_error(diag_get()); errcode = box_error_code(err); -- 2.24.3 (Apple Git-128)