From: Serge Petrenko <sergepetrenko@tarantool.org> To: gorcunov@gmail.com, v.shpilevoy@tarantool.org Cc: tarantool-patches@dev.tarantool.org Subject: [Tarantool-patches] [PATCH] relay: move relay_schedule_pending_gc before status update Date: Thu, 16 Apr 2020 15:06:58 +0300 [thread overview] Message-ID: <20200416120658.33777-1-sergepetrenko@tarantool.org> (raw) relay_schedule_pending_gc() is executed after relay status update, which made perfect sense before we've introduced local spaces rework, making local space operations use a special instance id: 0. Relay status update is performed only when the remote instance has reported a bigger vclock, than its previous one. However, we may have an entire WAL file filled with local space changes, in which case the changes won't be transmitted to replica, and it will report the same vclock as before, postponing the scheduled gc until a non-local row is created on master. Fix this by reordering relay_schedule_pending_gc() and relay status update. In case nothing new is added to pending_gc queue and replica clock is not updated, relay_schedule_pending_gc() will exit on the first loop iteration, so it doesn't add an overhead. Also make relay_schedule_pending_gc() use vclock_compare_ignore0() instead of plain vclock_compare(). Follow-up #4114 --- This code was present in v5 of the patchset regarding local space replication rework, but I accidentally threw it away during the review. Sorry. The letter was "[PATCH v5 2/4] replication: hide 0-th vclock components in replication responses" Branch: https://github.com/tarantool/tarantool/tree/sp/relay-gc-fix src/box/relay.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/box/relay.cc b/src/box/relay.cc index dd6c3a580..2ad02cb8a 100644 --- a/src/box/relay.cc +++ b/src/box/relay.cc @@ -464,7 +464,7 @@ relay_schedule_pending_gc(struct relay *relay, const struct vclock *vclock) * the greater signatures is due to changes pulled * from other members of the cluster. */ - if (vclock_compare(&curr->vclock, vclock) > 0) + if (vclock_compare_ignore0(&curr->vclock, vclock) > 0) break; stailq_shift(&relay->pending_gc); free(gc_msg); @@ -638,6 +638,10 @@ relay_subscribe_f(va_list ap) send_vclock = &r->vclock; else send_vclock = &relay->recv_vclock; + + /* Collect xlog files received by the replica. */ + relay_schedule_pending_gc(relay, send_vclock); + if (vclock_sum(&relay->status_msg.vclock) == vclock_sum(send_vclock)) continue; @@ -648,8 +652,6 @@ relay_subscribe_f(va_list ap) vclock_copy(&relay->status_msg.vclock, send_vclock); relay->status_msg.relay = relay; cpipe_push(&relay->tx_pipe, &relay->status_msg.msg); - /* Collect xlog files received by the replica. */ - relay_schedule_pending_gc(relay, send_vclock); } /* -- 2.21.1 (Apple Git-122.3)
next reply other threads:[~2020-04-16 12:07 UTC|newest] Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-04-16 12:06 Serge Petrenko [this message] 2020-04-16 12:37 ` Kirill Yukhin 2020-04-16 12:38 ` Cyrill Gorcunov 2020-04-16 12:42 ` [Tarantool-patches] [PATCH] relay: move relay_schedule_pending_gc before status Cyrill Gorcunov 2020-04-17 7:02 ` Kirill Yukhin 2020-04-17 7:10 ` Cyrill Gorcunov
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=20200416120658.33777-1-sergepetrenko@tarantool.org \ --to=sergepetrenko@tarantool.org \ --cc=gorcunov@gmail.com \ --cc=tarantool-patches@dev.tarantool.org \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH] relay: move relay_schedule_pending_gc before status update' \ /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