From: Serge Petrenko via Tarantool-patches <tarantool-patches@dev.tarantool.org> To: v.shpilevoy@tarantool.org, gorcunov@gmail.com Cc: tarantool-patches@dev.tarantool.org Subject: [Tarantool-patches] [PATCH 9/9] box.ctl: rename clear_synchro_queue to promote Date: Sun, 11 Apr 2021 20:56:04 +0300 [thread overview] Message-ID: <aaafb207b342098240a6c193f9154e20dc78aed7.1618163409.git.sergepetrenko@tarantool.org> (raw) In-Reply-To: <cover.1618163409.git.sergepetrenko@tarantool.org> 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)
next prev parent reply other threads:[~2021-04-11 18:00 UTC|newest] Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-04-11 17:55 [Tarantool-patches] [PATCH 0/9] raft: introduce manual elections and fix a bug with re-applying rolled back transactions Serge Petrenko via Tarantool-patches 2021-04-11 17:55 ` [Tarantool-patches] [PATCH 1/9] wal: enrich row's meta information with sync replication flags Serge Petrenko via Tarantool-patches 2021-04-12 13:06 ` Cyrill Gorcunov via Tarantool-patches 2021-04-13 13:26 ` Serge Petrenko via Tarantool-patches 2021-04-12 19:21 ` Serge Petrenko via Tarantool-patches 2021-04-11 17:55 ` [Tarantool-patches] [PATCH 2/9] xrow: introduce a PROMOTE entry Serge Petrenko via Tarantool-patches 2021-04-11 17:55 ` [Tarantool-patches] [PATCH 3/9] box: actualise iproto_key_type array Serge Petrenko via Tarantool-patches 2021-04-11 17:55 ` [Tarantool-patches] [PATCH 4/9] box: make clear_synchro_queue() write a PROMOTE entry instead of CONFIRM + ROLLBACK Serge Petrenko via Tarantool-patches 2021-04-11 17:56 ` [Tarantool-patches] [PATCH 5/9] box: write PROMOTE even for empty limbo Serge Petrenko via Tarantool-patches 2021-04-11 17:56 ` [Tarantool-patches] [PATCH 6/9] raft: keep track of greatest known term and filter replication sources based on that Serge Petrenko via Tarantool-patches 2021-04-12 19:23 ` Serge Petrenko via Tarantool-patches 2021-04-11 17:56 ` [Tarantool-patches] [PATCH 7/9] replication: introduce a new election mode: "manual" Serge Petrenko via Tarantool-patches 2021-04-11 17:56 ` [Tarantool-patches] [PATCH 8/9] Support manual elections in `box.ctl.clear_synchro_queue()` Serge Petrenko via Tarantool-patches 2021-04-12 19:23 ` Serge Petrenko via Tarantool-patches 2021-04-11 17:56 ` Serge Petrenko via Tarantool-patches [this message] 2021-04-12 19:24 ` [Tarantool-patches] [PATCH 9/9] box.ctl: rename clear_synchro_queue to promote Serge Petrenko via Tarantool-patches
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=aaafb207b342098240a6c193f9154e20dc78aed7.1618163409.git.sergepetrenko@tarantool.org \ --to=tarantool-patches@dev.tarantool.org \ --cc=gorcunov@gmail.com \ --cc=sergepetrenko@tarantool.org \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH 9/9] box.ctl: rename clear_synchro_queue to promote' \ /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