|
Ran
|
Jobs
1
|
Files
519
|
Run time
2min
|
Badge
README BADGES
|
push
github
box: forbid concurrent invocation of `box_raft_try_promote` Currently, we allow concurrent invocation of `box_raft_try_promote`, since we either disable the `is_in_promote` guard in `box_promote` or omit it in `box_cfg_xc`, while `box_raft_try_promote` yields to write the raft state. This leads to a race over the `diag` of the fiber executing the `box_raft_try_promote_f` trigger, and can lead to more bugs. Let's forbid concurrent execution of `box_raft_try_promote` by enabling the `is_in_promote` guard while `box_raft_try_promote` is called. One potential caveat is the concurrent execution of `box_promote_qsync` which is also guarded by the `is_in_promote`. However, it is executed in the raft worker fiber and can be retried until `box_raft_try_promote` execution finishes. To be on the safer side, let's: 1. Call `raft_restore` before setting the fiber's `diag` to prevent any potential tampering with it from `raft->on_update` triggers. 2. Set `is_box_configured` right before calling `box_raft_try_promote` to maintain the invariant that it is always called by `box.cfg` first. Also move `box_broadcast_ballot` for consistency. The `raft_leader_promote` test from the gh-6033 test group should now test that a concurrent promote fails rather than succeeds. Closes #11703 Closes #11708 NO_DOC=<bugfix> (cherry picked from commit b59284539)
68760 of 116365 branches covered (59.09%)
9 of 9 new or added lines in 2 files covered. (100.0%)
36 existing lines in 16 files now uncovered.103472 of 118176 relevant lines covered (87.56%)
1617255.59 hits per line
| Lines | Coverage | ∆ | File |
|---|---|---|---|
| 1 |
95.84 |
-0.12% | src/box/replication.cc |
| 1 |
94.68 |
-0.53% | src/box/vy_range.c |
| 1 |
90.38 |
-1.77% | src/lib/core/trigger.cc |
| 1 |
91.68 |
0.0% | src/lib/swim/swim.c |
| 2 |
94.25 |
-0.41% | src/box/vy_read_iterator.c |
| 2 |
84.35 |
-0.07% | src/box/xlog.c |
| 2 |
89.34 |
-0.11% | src/box/xrow.c |
| 2 |
92.83 |
-0.2% | src/lib/core/fiber.c |
| 2 |
85.71 |
-9.52% | src/lib/core/tt_sigaction.c |
| 2 |
94.22 |
-0.39% | src/lua/fiber.c |
| 3 |
92.48 |
0.0% | src/box/vinyl.c |
| 3 |
86.96 |
-0.2% | src/box/vy_run.c |
| 3 |
97.05 |
-0.3% | src/lib/msgpuck/msgpuck.h |
| 3 |
22.64 |
-0.04% | src/lib/uri/uri_parser.c |
| 4 |
90.76 |
0.06% | src/box/box.cc |
| 4 |
81.82 |
-12.12% | src/lua/minifio.c |
| ID | Job ID | Ran | Files | Coverage | |
|---|---|---|---|---|---|
| 1 | 19630358081.1 | 519 |
87.56 |
GitHub Action Run |
| Coverage | ∆ | File | Lines | Relevant | Covered | Missed | Hits/Line | Branch Hits | Branch Misses |
|---|