From: Serge Petrenko <sergepetrenko@tarantool.org> To: v.shpilevoy@tarantool.org, gorcunov@gmail.com, sergos@tarantool.org Cc: tarantool-patches@dev.tarantool.org Subject: [Tarantool-patches] [RAFT 06/10] [tosquash] raft: don't fill raft_request manually Date: Wed, 26 Aug 2020 10:52:38 +0300 [thread overview] Message-ID: <1fb0f4b22ccfea68e73f040f5404eebc2fe0154d.1598427905.git.sergepetrenko@tarantool.org> (raw) In-Reply-To: <cover.1598427905.git.sergepetrenko@tarantool.org> From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org> At 'subscribe' the raft complete state was sent to the peer. But it was filled manually into struct raft_request. There is a function raft_serialize() exactly to avoid such manual work. The patch extends the serializer with vclock argument. Since raft does not manage vclocks and needs them provided externally (so far, perhaps that will change). --- src/box/box.cc | 5 +---- src/box/memtx_engine.c | 6 +++++- src/box/raft.c | 7 ++++++- src/box/raft.h | 2 +- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/box/box.cc b/src/box/box.cc index b871f45e2..e7eb79e9f 100644 --- a/src/box/box.cc +++ b/src/box/box.cc @@ -2056,14 +2056,11 @@ box_process_subscribe(struct ev_io *io, struct xrow_header *header) */ if (raft.state != RAFT_STATE_NONE) { struct raft_request req; - req.term = raft.term; - req.vote = raft.vote; - req.state = raft.state; /* * Omit the candidate vclock, since we've just * sent it in subscribe response. */ - req.vclock = NULL; + raft_serialize(&req, NULL); xrow_encode_raft(&row, &fiber()->gc, &req); coio_write_xrow(io, &row); } diff --git a/src/box/memtx_engine.c b/src/box/memtx_engine.c index a034baa6c..7de12a569 100644 --- a/src/box/memtx_engine.c +++ b/src/box/memtx_engine.c @@ -517,7 +517,11 @@ checkpoint_new(const char *snap_dirname, uint64_t snap_io_rate_limit) opts.free_cache = true; xdir_create(&ckpt->dir, snap_dirname, SNAP, &INSTANCE_UUID, &opts); vclock_create(&ckpt->vclock); - raft_serialize(&ckpt->raft); + /* + * Don't encode vclock, because it is stored in the snapshot header + * anyway. + */ + raft_serialize(&ckpt->raft, NULL); ckpt->touch = false; return ckpt; } diff --git a/src/box/raft.c b/src/box/raft.c index 227846596..1d25459e9 100644 --- a/src/box/raft.c +++ b/src/box/raft.c @@ -80,11 +80,16 @@ raft_process_msg(const struct raft_request *req) } void -raft_serialize(struct raft_request *req) +raft_serialize(struct raft_request *req, struct vclock *vclock) { memset(req, 0, sizeof(*req)); req->term = raft.term; req->vote = raft.vote; + req->state = raft.state; + /* + * Raft does not own vclock, so it always expects it passed externally. + */ + req->vclock = vclock; } static void diff --git a/src/box/raft.h b/src/box/raft.h index b11ae7b1d..c95a51873 100644 --- a/src/box/raft.h +++ b/src/box/raft.h @@ -72,7 +72,7 @@ void raft_process_msg(const struct raft_request *req); void -raft_serialize(struct raft_request *req); +raft_serialize(struct raft_request *req, struct vclock *vclock); void raft_free_msg(struct cmsg *msg); -- 2.20.1 (Apple Git-117)
next prev parent reply other threads:[~2020-08-26 7:53 UTC|newest] Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-08-26 7:52 [Tarantool-patches] [RAFT 00/10] raft implementation Serge Petrenko 2020-08-26 7:52 ` [Tarantool-patches] [RAFT 01/10] raft: introduce persistent raft state Serge Petrenko 2020-08-26 7:52 ` [Tarantool-patches] [RAFT 02/10] raft: relay status updates to followers Serge Petrenko 2020-08-27 20:36 ` Vladislav Shpilevoy 2020-08-28 10:10 ` Sergey Petrenko 2020-08-26 7:52 ` [Tarantool-patches] [RAFT 03/10] [tosquash] raft: return raft_request to xrow Serge Petrenko 2020-08-26 7:52 ` [Tarantool-patches] [RAFT 04/10] [tosquash] raft: introduce IPROTO_RAFT_VCLOCK Serge Petrenko 2020-08-26 7:52 ` [Tarantool-patches] [RAFT 05/10] [tosquash] xrow: refactor raft request codec Serge Petrenko 2020-08-26 7:52 ` Serge Petrenko [this message] 2020-08-26 7:52 ` [Tarantool-patches] [RAFT 07/10] [tosquash] raft: rename curr_leader to leader Serge Petrenko 2020-08-26 7:52 ` [Tarantool-patches] [RAFT 08/10] [tosquash] raft: rename raft_process to raft_process_recovery Serge Petrenko 2020-08-26 7:52 ` [Tarantool-patches] [RAFT 09/10] [tosquash] applier: handler error at raft row appliance Serge Petrenko 2020-08-26 7:53 ` [Tarantool-patches] [RAFT 10/10] [tosquash] relay: move raft broadcast details into relay Serge Petrenko
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=1fb0f4b22ccfea68e73f040f5404eebc2fe0154d.1598427905.git.sergepetrenko@tarantool.org \ --to=sergepetrenko@tarantool.org \ --cc=gorcunov@gmail.com \ --cc=sergos@tarantool.org \ --cc=tarantool-patches@dev.tarantool.org \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [Tarantool-patches] [RAFT 06/10] [tosquash] raft: don'\''t fill raft_request manually' \ /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