applier: follow vclock to the last tx row
Since the introduction of transaction boundaries in replication
protocol, appliers follow replicaset.applier.vclock to the lsn of the
first row in an arrived batch. This is enough and doesn't lead to errors
when replicating from other instances, respecting transaction boundaries
(instances with version 2.1.2 and up).
However, if there's a 1.10 instance in 2.1.2+ cluster, it sends every
single tx row as a separate transaction, breaking the comparison with
replicaset.applier.vclock and making the applier apply part of the
changes, it has already applied when processing a full transaction
coming from another 2.x instance. Such behaviour leads to
ER_TUPLE_FOUND errors in the scenario described above.
In order to guard from such cases, follow replicaset.applier.vclock to
the lsn of the last row in tx.
Closes #4924
Reviewed-by:
Cyrill Gorcunov <gorcunov@gmail.com>
Loading
Please register or sign in to comment