Commits
- Commit:
f611002bfe0d87a6d14641663875a78f41937197
- From:
- Sergey Bronnikov <sergeyb@tarantool.org>
- Date:
test/cmake: add a function for generating unit test targets
Commit 9adedc1f00d2 ("test: add new `make` test targets") introduced new
targets for running test-run.py with unit tests. However, this target
doesn't depend on changes in tested libraries and changes in unit tests.
Proposed patch introduces a function that creates a build targets for
unit tests and fixes the described problem with dependencies.
Additionally, patch added missed dependence for popen and popen-child.
NO_CHANGELOG=internal
NO_DOC=internal
- Commit:
f8a27936db0c42c798770d91eb4bf944ffaa7801
- From:
- Sergey Bronnikov <sergeyb@tarantool.org>
- Date:
test/cmake: refactoring for unit tests
NO_CHANGELOG=internal
NO_DOC=internal
NO_TEST=refactoring
Needed for the next commit
- Commit:
c9155ac8636264ce6d1b10a2937a6ad3844db50a
- From:
- Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
- Date:
raft: persist new term and vote separately
If a node persisted a foreign term + vote request at the same
time, it increased split-brain probability. A node could vote for
a candidate having smaller vclock than the local one. For example,
via the following scenario:
- Node1, node2, node3 are started;
- Node1 becomes a leader;
- The topology becomes node1 <-> node2 <-> node3 due to network
issues;
- Node1 sends a synchro txn to node2. The txn starts a WAL write;
- Node3 bumps term and votes for self. Sends it all to node2;
- Node2 votes for node3, because their vclocks are equal;
- Node2 finishes all pending WAL writes, including the txn from
node1. Now its vclock is > node3's one and the vote was wrong.
- Node3 wins, writes PROMOTE, and it conflicts with node1 writing
CONFIRM.
This patch makes so a node can't persist a vote in a new term in
the same WAL write as the term bump. Term bump is written first
and alone. It serves as a WAL sync after which the node's vclock
is not supposed to change except for the 0 (local) component.
The vote requests are re-checked after term bump is persisted to
see if they still can be applied.
Part of #7253
NO_DOC=bugfix
- Commit:
ec6281002f3b6ffa7735f99199bfba4e6d880c70
- From:
- Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
- Date:
qsync: fix txn fiber hang on fencing at CONFIRM
If the limbo was fenced during CONFIRM WAL write, then the
confirmed txn was committed just fine, but its author-fiber kept
hanging. This is because when it was woken up, it checked if the
limbo is frozen and went to infinite waiting before actually
checking if the txn is completed.
The fiber would unfreeze if would be woken up explicitly as a
workaround.
The fix is simple - change the checks order.
Part of #7253
NO_DOC=bugfix
- Commit:
ab08dad9503873768dc673a1e594c7bddc58b01b
- From:
- Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
- Date:
promote: abort it when become non-candidate
box.ctl.promote() bumps the term, makes the node a candidate, and
waits for the term outcome. The waiting used to be until there is
a leader elected or the node lost connection quorum or the term
was bumped again.
There was a bug that a node could hang in box.ctl.promote() even
when became a voter. It could happen if the quorum was still there
and a leader couldn't be elected in the current term at all. For
instance, others could have `election_mode='off'`.
The fix is to stop waiting for the term outcome if the node can't
win anyway.
NO_DOC=bugfix