[Tarantool-patches] [PATCH v2 0/7] applier: handle synchronous transactions during final
Serge Petrenko
sergepetrenko at tarantool.org
Wed Mar 24 15:24:10 MSK 2021
Initially this patches idea was to ignore synchronous rows on applier side and
make it so that there are no rolled back transactions in final join stream on
master side.
Unfortunately, this easy fix didn't work. The reason for it is that once the
replica receives initial data, up to `start_vclock`, the final join stream has
to start right at `start_vclock` so that we do not lose any transactions.
This means that once master encounters a synchro rollback and makes replica
retry final join to get rid of the rollback, it still has to send it together
with other data. And this rollback must be processed by applier to avoid
conflicts.
In order to let applier process synchro requests (CONFIRM and ROLLBACK) we need
to make final join transactional, obviously. This is what this patchset does.
An alternative would be to retry not only final, but also initial join every
time master receives a rollback during final join stage. This would be too
violent due to possibly huge data amounts being sent during initial join.
Changes in v2:
- Make applier transactional on final join stage
- Remove guards for rollback during final join on master side
- Some refactoring in preparation to #5874
https://github.com/tarantool/tarantool/issues/5566
https://github.com/tarantool/tarantool/tree/sp/gh-5566-final-join-synchro-v2
Serge Petrenko (7):
replication: fix a hang on final join retry
applier: extract tx boundary checks from applier_read_tx into a
separate routine
applier: extract plain tx application from applier_apply_tx()
applier: remove excess last_row_time update from subscribe loop
applier: make final join transactional
replication: tolerate synchro rollback during final join
replication: do not ignore replica vclock on register
changelogs/unreleased/synchro-final-join.md | 4 +
src/box/applier.cc | 461 +++++++++---------
src/box/box.cc | 38 +-
src/box/relay.cc | 1 +
.../gh-5566-final-join-synchro.result | 139 ++++++
.../gh-5566-final-join-synchro.test.lua | 61 +++
test/replication/suite.cfg | 1 +
7 files changed, 449 insertions(+), 256 deletions(-)
create mode 100644 changelogs/unreleased/synchro-final-join.md
create mode 100644 test/replication/gh-5566-final-join-synchro.result
create mode 100644 test/replication/gh-5566-final-join-synchro.test.lua
--
2.24.3 (Apple Git-128)
More information about the Tarantool-patches
mailing list