[Tarantool-patches] [PATCH] relay: move relay_schedule_pending_gc before status update
Cyrill Gorcunov
gorcunov at gmail.com
Thu Apr 16 15:38:02 MSK 2020
On Thu, Apr 16, 2020 at 03:06:58PM +0300, Serge Petrenko wrote:
> 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
Maybe it worth to have two commits?
- use vclock_compare_ignore0 in relay_schedule_pending_gc
- reorder relay_schedule_pending_gc
More information about the Tarantool-patches
mailing list