• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

tarantool / tarantool / 7843717522
86%
master: 88%

Build:
Build:
LAST BUILD BRANCH: m.kostoev/xrow-tests
DEFAULT BRANCH: master
Ran 09 Feb 2024 12:42PM UTC
Jobs 1
Files 478
Run time 52s
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

09 Feb 2024 12:09PM UTC coverage: 85.819% (+0.008%) from 85.811%
7843717522

push

github

sergepetrenko
replication: fix ER_PROTOCOL in relay

We've had numerous problems with transaction boundaries in replication.
They were mostly caused by various cases when either the beginning or
end of the transaction happened to be a local row. Local rows are not
replicated, so the peer saw "corrupted" transactions with either no
beginning or no end flag, even though the transaction contents were
fine.

The problem with starting a transaction with a local row was solved in
commit f41d1ddd5faf ("wal: fix tx boundaries"), and that fix seems to
continue working fine to this day.

The problem with ending transactions with a local row was first fixed
in commit 25382617b957 ("replication: append NOP as the last tx row"),
however there were problems with this approach: when a user tried to
write to local spaces on a replica from a replication trigger, it made
it impossible to ever start replicating from replica back to master.

Another fix was proposed: in commit f96782b53214 ("relay: send rows
transactionally") we made relay read a full transaction into memory and
then send it all at once mangling with transanction start and end flags
when necessary.

After that the NOPs were removed in commit f5e52b2c2cf5 ("box: get rid
of dummy NOPs after transactions ending with local rows"), since relay
became capable of fixing transaction boundaries itself.

Turns out the assumption that relay always sees a full transaction and
may correctly set transaction boundaries is wrong: when a replica
reconnects to master we set its starting vclock[0] to the one master has
at the moment of reconnect, so when recovery reads local rows with lsns
less than vclock[0] it silently skips them without showing them to
relay. When such skipped rows contain the is_commit flag for a currently
sent transaction we get the same problem as described before.

Let's make recovery track whether it has pushed any transaction rows to
relay or not, and if yes, recover rows with is_commit flag regardless of
wheth... (continued)

62430 of 113514 branches covered (0.0%)

93277 of 108690 relevant lines covered (85.82%)

2801360.02 hits per line

Jobs
ID Job ID Ran Files Coverage
1 7843717522.1 09 Feb 2024 12:42PM UTC 0
85.82
GitHub Action Run
Source Files on build 7843717522
Detailed source file information is not available for this build.
  • Back to Repo
  • a708a94a on github
  • Prev Build on release/2.11 (#7784189224)
  • Next Build on release/2.11 (#7845292168)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc