relay: move relay_schedule_pending_gc before status update
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
Loading
Please register or sign in to comment