Commits
- Commit:
daae0f08f3108f97920bef50eb93472b203a5a7f
- From:
- Serge Petrenko <sergepetrenko@tarantool.org>
- Via:
- Serge Petrenko <35663196+sergepetrenko@users.noreply.github.com>
- Date:
changelog: cleanup 3.2.0 changelogs
Remove all changelogs reported in release notes for 3.2.0.
Also, add missing downgrade versions to the downgrade versions list.
NO_DOC=changelog
NO_TEST=changelog
NO_CHANGELOG=changelog
- Commit:
17b11601a45060523120fb6102e02b1a30332fbe
- From:
- Georgiy Lebedev <g.lebedev@tarantool.org>
- Via:
- Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
- Date:
test: fix #5430 test
The test blocked on the `wait_log` for registering replica2 on the master
node. The `wait_log` does not throw an error on timeout, and its return
value is ignored in the test, so the test simply continued after the
timeout and succeeded.
The reason the test blocked was that after 70a6883 we are unable to
register an anonymous replica while its relay has not stopped:
https://github.com/tarantool/tarantool/blob/9e616ab6f2f94ba2bcad3044187c474a1c05a8c5/src/box/box.cc#L4422-L4427
At the same time, the anonymous replica's relay cannot finish, because it
is blocked by `cbus_unpair` in `wal_clear_watcher`:
https://github.com/tarantool/tarantool/blob/9e616ab6f2f94ba2bcad3044187c474a1c05a8c5/src/box/relay.cc#L1068-L1074
https://github.com/tarantool/tarantool/blob/9e616ab6f2f94ba2bcad3044187c474a1c05a8c5/src/lib/core/cbus.h#L440-L442
To fix this let's move `ERRINJ_REPLICA_JOIN_DELAY` before
`box_register_replica`. This error injection is not used right now, so we
can reuse it here instead of `ERRINJ_WAL_DELAY`. This way the WAL won't get
blocked, and we will be able to get 2 concurrent replica registrations.
Let's also echo the `wait_log` result to make sure the fails in the future.
Closes #9617
NO_CHANGELOG=<test fix>
NO_DOC=<test fix>
- Commit:
6e1e1d50a703a26b4dbf4d7d4bcd4ba788d97864
- From:
- Georgiy Lebedev <g.lebedev@tarantool.org>
- Via:
- Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
- Date:
box: filter out tmp and remote txs when aborting all txs for DDL
Currently, we lack support of DDL in transactions, so now we simply apply
the strongest restriction and abort all other transactions when preparing a
DDL transaction (8f4be32).
However, we can relax this restriction for concurrent nop
(particularly, those using fully-temporary spaces) and remote (applier)
transactions, since they cannot possibly conflict each other by definition.
There can be 2 cases:
1. If the `ddl_owner` uses only fully-temporary spaces, we can allow
transactions containing only applier rows to continue. Since we do this in
`engine_prepare`, we can be sure that `ddl`_owner will not have any other
statements, while the transaction containing only applier rows, by
definition, cannot use `fully-temporary` spaces, so there can never be a
conflict. Regarding `before_replace` or `on_replace` triggers of the
applier transactions: although no DDL can be used inside them, they can
still use obsolete fully-temporary space definitions. However, if we see
that an applier transaction contains only applier rows at the moment of the
`ddl_owner` preparation, it is safe to let them continue, since later usage
of the prepared fully-temporary space DDL changes by triggers of the
applier transactions will be consistent.
2. If the `ddl_owner` contains only applier rows, we can allow transactions
that use only fully-temporary spaces to continue. It is safe to do so,
since later usage of the committed DDL changes by the in-progress
transactions will be consistent.
Both of these checks conform to this rule (8f4be32):
> In fact we should only abort transactions that have read dirty (i.e.
modified) objects.
Closes #9720
NO_DOC=<bugfix>
- Commit:
284cc37913fd528f08603942ef01b3726e38e260
- From:
- Georgiy Lebedev <g.lebedev@tarantool.org>
- Via:
- Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
- Date:
box: add a helper for detecting where a transaction is barely nop
In the scope of #9720 we will need to detect whether a transaction is
barely nop (particularly, whether it operates only on fully-temporary
spaces), so let's add a helper for this.
Needed for #9720
NO_CHANGELOG=<refactoring>
NO_DOC=<refactoring>
NO_TEST=<refactoring>
- Commit:
de59504c2bdb0369cdd27af892301f8515293fe1
- From:
- Vladimir Davydov <vdavydov@tarantool.org>
- Via:
- Vladimir Davydov <vdavydov.dev@gmail.com>
- Date:
vinyl: do not discard run on dump/compaction abort if index was dropped
If an index is dropped while a dump or compaction task is in progress
we must not write any information about it to the vylog when the task
completes otherwise there's a risk of getting a vylog recovery failure
in case the garbage collector manages to purge the index from the vylog.
We disabled logging on successful completion of a dump task quite a
while ago, in commit 29e2931c66c5 ("vinyl: fix race between compaction
and gc of dropped LSM"), and for compaction only recently, in commit
ae6a02ebab0b ("vinyl: do not log dump if index was dropped"), but the
issue remains for a dump/compaction failure, when we log a discard
record for a run file we failed to write. These results in errors like:
```
ER_INVALID_VYLOG_FILE: Invalid VYLOG file: Run 6 deleted twice
```
or
```
ER_INVALID_VYLOG_FILE: Invalid VYLOG file: Run 5768 deleted but not registered
```
Let's fix these issues in exactly the same way as we fixed them for
successful dump/compaction completion - by skipping writing to vylog
in case the index is marked as dropped.
Closes #10452
NO_DOC=bug fix