Commits


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


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>


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>


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>


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