From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
To: Cyrill Gorcunov <gorcunov@gmail.com>
Cc: tarantool-patches@dev.tarantool.org
Subject: Re: [Tarantool-patches] [PATCH 2/6] raft: factor out the code to wakeup worker fiber
Date: Thu, 15 Oct 2020 00:40:36 +0200 [thread overview]
Message-ID: <e99ec658-8318-3888-3ba3-759d5af146b4@tarantool.org> (raw)
In-Reply-To: <20201014132939.GA173841@grain>
Hi! Thanks for the review!
On 14.10.2020 15:29, Cyrill Gorcunov wrote:
> On Wed, Oct 14, 2020 at 01:28:28AM +0200, Vladislav Shpilevoy wrote:
>> -raft_schedule_broadcast(void)
>> +raft_worker_wakeup(void)
>> {
>> - raft.is_broadcast_scheduled = true;
>> + if (raft.worker == NULL) {
>> + raft.worker = fiber_new("raft_worker", raft_worker_f);
>> + fiber_set_joinable(raft.worker, true);
>> + }
>
> When fiber_new return NULL you'll get nil dereference in fiber_set_joinable.
Indeed, you are right! It seems it was there always. There is no a
beautiful way to fix it now, so I added a panic() here in case of OOM:
====================
--- a/src/box/raft.c
+++ b/src/box/raft.c
@@ -1010,6 +1010,21 @@ raft_worker_wakeup(void)
{
if (raft.worker == NULL) {
raft.worker = fiber_new("raft_worker", raft_worker_f);
+ if (raft.worker == NULL) {
+ /*
+ * XXX: should be handled properly, no need to panic.
+ * The issue though is that most of the Raft state
+ * machine functions are not supposed to fail, and also
+ * they usually wakeup the fiber when their work is
+ * finished. So it is too late to fail. On the other
+ * hand it looks not so good to create the fiber when
+ * Raft is initialized. Because then it will occupy
+ * memory even if Raft is not used.
+ */
+ diag_log();
+ panic("Could't create Raft worker fiber");
+ return;
+ }
fiber_set_joinable(raft.worker, true);
}
/*
next prev parent reply other threads:[~2020-10-14 22:40 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-13 23:28 [Tarantool-patches] [PATCH 0/6] Raft auto-commit Vladislav Shpilevoy
2020-10-13 23:28 ` [Tarantool-patches] [PATCH 1/6] test: add '_stress' suffix to election_qsync test Vladislav Shpilevoy
2020-10-13 23:28 ` [Tarantool-patches] [PATCH 2/6] raft: factor out the code to wakeup worker fiber Vladislav Shpilevoy
2020-10-14 13:29 ` Cyrill Gorcunov
2020-10-14 22:40 ` Vladislav Shpilevoy [this message]
2020-10-15 6:50 ` Cyrill Gorcunov
2020-10-13 23:28 ` [Tarantool-patches] [PATCH 3/6] raft: new candidate should wait for leader death Vladislav Shpilevoy
2020-10-13 23:28 ` [Tarantool-patches] [PATCH 4/6] raft: introduce on_update trigger Vladislav Shpilevoy
2020-10-13 23:28 ` [Tarantool-patches] [PATCH 5/6] raft: auto-commit transactions of the old leader Vladislav Shpilevoy
2020-10-13 23:28 ` [Tarantool-patches] [PATCH 6/6] qsync: reset confirmed lsn in limbo on owner change Vladislav Shpilevoy
2020-11-24 23:23 ` Vladislav Shpilevoy
2020-10-14 7:34 ` [Tarantool-patches] [PATCH 0/6] Raft auto-commit Serge Petrenko
2020-10-14 22:40 ` Vladislav Shpilevoy
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=e99ec658-8318-3888-3ba3-759d5af146b4@tarantool.org \
--to=v.shpilevoy@tarantool.org \
--cc=gorcunov@gmail.com \
--cc=tarantool-patches@dev.tarantool.org \
--subject='Re: [Tarantool-patches] [PATCH 2/6] raft: factor out the code to wakeup worker fiber' \
/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