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

tarantool / tarantool / 12067043374
88%

Build:
DEFAULT BRANCH: master
Ran 28 Nov 2024 10:41AM UTC
Jobs 1
Files 518
Run time 2min
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

28 Nov 2024 10:27AM UTC coverage: 87.323%. Remained the same
12067043374

push

github

locker
memtx: do not abort unrelated transactions on DDL

Currently we simply abort all concurrent transactions on any DDL. We've
already done a few workarounds for these problems - filter that prevents
DDL on temporary spaces from aborting fully remote transactions and vice
versa, and an engine flag `ENGINE_TXM_HANDLES_DDL` to prevent memtx DDL
from aborting vinyl transactions. The commit removes above-mentioned
temporary solutions and makes memtx abort only related transactions on DDL.

The new approach is to abort all writers and readers when a space is
invalidated (it happens on replace in space cache). To abort all
writers, we can iterate over all transactions and inspect their
statements. To abort all readers, MVCC trackers can be used. When MVCC
is disabled, we don't abort any transactions since memtx ones cannot yield.
Note that we swap indexes on DDL before the old space is invalidated, so
all index read gaps are actually moved to the new space. It's actually
incorrect but didn't break anything - we delete all transaction's
trackers when it is prepared or aborted, and we used to abort all
in-progress transactions on DDL. But with the new approach, we need
those gaps in the old space in order to find all space readers, so the
commit swaps read gaps back when moving space indexes.

A primary memtx difference is that it contains all system spaces, and
any schema change is a replace in a system space, hence, in memtx. So
the question is whether we should abort any active transactions on
schema changes that don't affect any space directly (for example, bump
of schema version on upgrade, replace in space `_schema`). The answer is
we shouldn't - all resources used by spaces are pinned, so we cannot
change, for example, a collation when it is used by a space, so let's
abort concurrent transactions only when a space is invalidated - it
happens on DDL operations directly affecting spaces (`space:format(...)`,
`space:create_index(...)` and so on).

Note that d... (continued)

69504 of 123342 branches covered (56.35%)

39 of 39 new or added lines in 3 files covered. (100.0%)

45 existing lines in 14 files now uncovered.

102418 of 117287 relevant lines covered (87.32%)

2872727.88 hits per line

Jobs
ID Job ID Ran Files Coverage
1 12067043374.1 28 Nov 2024 10:41AM UTC 0
87.32
GitHub Action Run
Source Files on build 12067043374
Detailed source file information is not available for this build.
  • Back to Repo
  • 3ac35eae on github
  • Prev Build on master (#12064244871)
  • Next Build on master (#12067661226)
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