[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