|
Ran
|
Jobs
1
|
Files
518
|
Run time
81min
|
Badge
README BADGES
|
push
github
vinyl: fix space truncation being aborted by yield under load Under the hood, `space:truncate()` calls `space_vtab::build_index` to notify the engine about index recreation, see `TruncateIndex::prepare`. `space_vtab::build_index` isn't supposed to yield in this case because the space is empty (note that `TruncateIndex::prepare` passes the new space to the callback). However, there's a bug in vinyl that makes this callback yield for no good reason, aborting `space:truncate()` with `ER_TRANSACTION_YIELD`. The problem lies in `vy_tx_manager_abort_writers_for_ddl()`, which is called by `vinyl_space_build_index()` to abort all transactions that write to the target space. If a transaction can't be aborted because it has reached WAL, the function sets the `need_wal_sync` flag which indicates the caller that they should call `wal_sync()` to flush all unconfirmed transactions. In case of a space truncation, the function should do nothing because there can't possibly be a transaction writing to the new space, but actually it sets `need_wal_sync` if there's any transaction waiting for WAL. This mistake doesn't lead to any problems during an actual index build, but in case of a space truncation it results in the transaction being aborted by a fiber yield. Let's fix this problem by setting the `need_wal_sync` flag only if there are transactions that actually write to the target space. Closes #11249 NO_DOC=bug fix (cherry picked from commit b145c0c89)
69849 of 123715 branches covered (56.46%)
8 of 8 new or added lines in 1 file covered. (100.0%)
49 existing lines in 17 files now uncovered.102882 of 117624 relevant lines covered (87.47%)
2178261.31 hits per line
| Lines | Coverage | ∆ | File |
|---|---|---|---|
| 1 |
90.51 |
-0.63% | src/box/engine.c |
| 1 |
94.74 |
-1.75% | src/box/engine.h |
| 1 |
90.14 |
-0.08% | src/box/vy_log.c |
| 1 |
87.5 |
-1.59% | src/box/xlog.h |
| 1 |
92.94 |
-0.1% | src/lib/core/fiber.c |
| 1 |
96.55 |
-1.15% | src/lib/core/histogram.c |
| 1 |
90.38 |
-1.92% | src/lib/core/trigger.cc |
| 1 |
91.68 |
-0.11% | src/lib/swim/swim.c |
| 2 |
87.43 |
0.13% | src/box/vy_run.c |
| 2 |
84.51 |
0.08% | src/box/xlog.c |
| 2 |
95.45 |
-4.55% | src/lib/json/json.h |
| 2 |
97.26 |
0.1% | src/lib/msgpuck/msgpuck.h |
| 3 |
92.42 |
-0.09% | src/box/vinyl.c |
| 3 |
22.64 |
-0.06% | src/lib/uri/uri_parser.c |
| 4 |
93.62 |
-2.13% | src/box/vy_range.c |
| 4 |
81.82 |
-12.12% | src/lua/minifio.c |
| 19 |
90.78 |
-0.61% | src/box/box.cc |
| ID | Job ID | Ran | Files | Coverage | |
|---|---|---|---|---|---|
| 1 | 13837328311.1 | 518 |
87.47 |
GitHub Action Run |
| Coverage | ∆ | File | Lines | Relevant | Covered | Missed | Hits/Line | Branch Hits | Branch Misses |
|---|