summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Merge 10.5 into 10.6Marko Mäkelä2022-02-227-16/+22
|\
| * Merge 10.4 into 10.5Vlad Lesin2022-02-226-6/+20
| |\
| | * Merge 10.3 into 10.4Vlad Lesin2022-02-2130-398/+771
| | |\
| | | * MDEV-20605 Awaken transaction can miss inserted by other transaction records ↵Vlad Lesin2022-02-2112-198/+324
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | due to wrong persistent cursor restoration Backported from 10.5 20e9e804c131c6522bc7c469e4863e8d1eaa3ee0 and 5948d7602ec7f61937c368dcb134e6ec226a2990. sel_restore_position_for_mysql() moves forward persistent cursor position after btr_pcur_restore_position() call if cursor relative position is BTR_PCUR_ON and the cursor points to the record with NOT the same field values as in a stored record(and some other not important for this case conditions). It was done because btr_pcur_restore_position() sets page_cur_mode_t mode to PAGE_CUR_LE for cursor->rel_pos == BTR_PCUR_ON before opening cursor. So we are searching for the record less or equal to stored one. And if the found record is not equal to stored one, then it is less and we need to move cursor forward. But there can be a situation when the stored record was purged, but the new one with the same key but different value was inserted while row_search_mvcc() was suspended. In this case, when the thread is awaken, it will invoke sel_restore_position_for_mysql(), which, in turns, invoke btr_pcur_restore_position(), which will return false because found record don't match stored record, and sel_restore_position_for_mysql() will move forward cursor position. The above can lead to the case when awaken row_search_mvcc() do not see records inserted by other transactions while it slept. The mtr test case shows the example how it can be. The fix is to return special value from persistent cursor restoring function which would notify its caller that uniq fields of restored record and stored record are the same, and in this case sel_restore_position_for_mysql() don't move cursor forward. Delete-marked records are correctly processed in row_search_mvcc(). Non-unique secondary indexes are "uniquified" by adding the PK, the index->n_uniq should then be index->n_fields. So there is no need in additional checks in the fix. If transaction's readview can't see the changes made in secondary index record, it requests clustered index record in row_search_mvcc() to check its transaction id and get the correspondent record version. After this row_search_mvcc() commits mtr to preserve clustered index latching order, and starts mtr. Between those mtr commit and start secondary index pages are unlatched, and purge has the ability to remove stored in the cursor record, what causes rows duplication in result set for non-locking reads, as cursor position is restored to the previously visited record. To solve this the changes are just switched off for non-locking reads, it's quite simple solution, besides the changes don't make sense for non-locking reads. The more complex and effective from performance perspective solution is to create mtr savepoint before clustered record requesting and rolling back to that savepoint after that. See MDEV-27557. One more solution is to have per-record transaction id for secondary indexes. See MDEV-17598. If any of those is implemented, just remove select_lock_type argument in sel_restore_position_for_mysql().
| | | * MDEV-27550: Disable galera.MW-328DMarko Mäkelä2022-02-211-0/+1
| | | | | | | | | | | | | | | | (cherry picked from commit 66465914c1a22ae30f96a57aca7e8635a2506f8d)
| | | * MDEV-27025 insert-intention lock conflicts with waiting ORDINARY lockVlad Lesin2022-02-2112-195/+426
| | | | | | | | | | | | | | | | | | | | The code was backported from 10.5 be8113861c2d12bb0f7048523f886cab53326d8e commit. See that commit message for details.
| | | * MDEV-27730 Add PLUGIN_VAR_DEPRECATED flag to plugin variablesNayuta Yanagisawa2022-02-185-5/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The sys_var class has the deprecation_substitute member to mark the deprecated variables. As it's set, the server produces warnings when these variables are used. However, the plugin has no means to utilize that functionality. So, the PLUGIN_VAR_DEPRECATED flag is introduced to set the deprecation_substitute with the empty string. A non-empty string can make the warning more informative, but there's no nice way seen to specify it, and not that needed at the moment.
| | * | MDEV-24175 Windows - fix detection of whether file is on SSDVladislav Vaintroub2022-02-171-1/+1
| | | | | | | | | | | | | | | | Fix detection. SSD is when storage does *not* incur a seek penalty.
| * | | MDEV-26645: Fix UB in Item_func_plus and Item_func_minusMarko Mäkelä2022-02-181-10/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | An integer overflow in an expression like a+b or a-b is undefined behavior. The compiler is allowed to assume that no such overflow is possible, and optimize away some code accordingly. Item_func_plus::int_op(), Item_func_minus::int_op(): Always check for overflow. Depending on the compiler and the compilation options, a test might fail: CURRENT_TEST: main.func_math mysqltest: At line 425: query 'SELECT 9223372036854775807 + 9223372036854775807' succeeded - should have failed with errno 1690... A similar bug had been fixed earlier in commit 328edf8560dbf1941ce314fa112e0db05d9f97f1.
* | | | MDEV-27394 added memset to zero out addr.un.sun_path stringHaidong Ji2022-02-221-0/+1
| | | | | | | | | | | | | | | | | | | | If this char[] is not zeroed out, inaccurate log message described in MDEV-27394 will show up.
* | | | MDEV-26476: Implement futex for FreeBSD, DragonFly BSDMarko Mäkelä2022-02-182-5/+24
| | | |
* | | | Merge 10.5 into 10.6Marko Mäkelä2022-02-1742-782/+678
|\ \ \ \ | |/ / /
| * | | Merge 10.4 into 10.5Marko Mäkelä2022-02-1742-775/+676
| |\ \ \ | | |/ /
| | * | MDEV-27723 innodb.instant_alter,8k.rdiff does not apply on FreeBSDMarko Mäkelä2022-02-174-90/+82
| | | | | | | | | | | | | | | | | | | | The .rdiff files were not correctly adjusted in commit 8f4a3bf07cc9d3f42899314411da344dabd66c5e (MDEV-25057).
| | * | Merge 10.3 into 10.4Marko Mäkelä2022-02-1736-663/+594
| | |\ \ | | | |/
| | | * Merge 10.2 into 10.3Marko Mäkelä2022-02-1729-660/+452
| | | |\
| | | | * MDEV-27583 InnoDB uses different constants for FK cascade error message in ↵Marko Mäkelä2022-02-173-3/+45
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | SQL vs error log convert_error_code_to_mysql(): Use the correct limit FK_MAX_CASCADE_DEL in the error message. The DICT_FK_MAX_RECURSIVE_LOAD applies to the number of foreign key constraints in table definitions, not to the number of rows that are visited while processing a foreign key constraint.
| | | | * MDEV-27722 innodb_fts.innodb-fts-ddl fails with a wrong message on FreeBSDMarko Mäkelä2022-02-171-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | On FreeBSD, the error message would say "Resource deadlock avoided". Let us simply replace the error message string in the test.
| | | | * fix: Fix 'unknown type usermodehelper_t' issue after upgrading to MariaDB ↵Jonathan Sabbe2022-02-171-0/+1
| | | | | | | | | | | | | | | | | | | | 10.4.24
| | | | * MDEV-27548 session_tracker_last_gtid.test fails with --repeat, added cleanup ↵forkfun2022-02-162-0/+2
| | | | | | | | | | | | | | | | | | | | after the test
| | | | * MDEV-27634 innodb_zip tests failing on s390xMarko Mäkelä2022-02-1620-652/+383
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some GNU/Linux distributions ship a zlib that is modified to use the s390x DFLTCC instruction. That modification would essentially redefine compressBound(sourceLen) as (sourceLen * 16 + 2308) / 8 + 6. Let us relax the tests for InnoDB ROW_FORMAT=COMPRESSED to cope with such a weaker compression guarantee. create_table_info_t::row_size_is_acceptable(): Remove a bogus debug-only assertion that would fail to hold for the test innodb_zip.bug36169. The function page_zip_empty_size() may indeed return 0.
| | | | * MDEV-16091: Seconds_Behind_Master spikes to millions of secondsBrandon Nesterenko2022-02-152-4/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The rpl.rpl_seconds_behind_master_spike test would sometimes timeout or take a very long time to complete. This happened because an MTR DEBUG_SYNC signal would be lost due to a subsequent call to RESET. I.e., the slave SQL thread would be paused due to the WAIT_FOR signal being lost, resulting in either a failed test if the `select master_pos_wait` timeout occurs first, or a very long run-time if the DBUG_SYNC timeout occurs first. The fix ensures that the MTR signal is processed by the slave SQL thread before issuing the call to RESET Reviewed By: ============ Andrei Elkin <andrei.elkin@mariadb.com>
| | | | * Fix typo in mysqadmin manpageUstun Ozgur2022-02-151-1/+1
| | | | |
| | | * | MDEV-17223 Assertion `thd->killed != 0' failed in ha_maria::enable_indexesMonty2022-02-163-3/+73
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | MDEV-22500 Assertion `thd->killed != 0' failed in ha_maria::enable_indexes For MDEV-17223 the issue was an assert that didn't take into account that we could get duplicate key errors when enablling unique indexes. Fixed by not retrying repair in case of duplicate key error for this case, which avoids the assert. For MDEV-22500 I removed the assert, as it's not critical (just a way to find potential wrong code) and we will anyway get things logged in the error log if this happens. This case cannot triggered an assert in 10.3 but I verified that it would trigger in 10.5 and that this patch fixes it.
| | | * | MDEV-27691: make working view-protocolLena Startseva2022-02-164-0/+69
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Added ability to disable/enable (--disable_view_protocol/--enable_view_protocol) view-protocol in tests. When the option "--disable_view_protocol" is used util connections are closed. Added new test for checking view-protocol
| | * | | Removed dead code.Alexey Yurchenko2022-02-172-22/+0
| | | | |
* | | | | MDEV-26789 Fix stall of group commit waitersVladislav Vaintroub2022-02-172-10/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixed a condition where designated group commit lead was woken in release, but returned early without trying to take over the lock. So, the group commit locks would be unowned, and the waiters could be stalled, until another thread comes that would on whatever reasons flush the redo log. Also, use better criteria for choosing potential next group commit lead.
* | | | | Merge 10.5 into 10.6Vlad Lesin2022-02-153-71/+1
|\ \ \ \ \ | |/ / / /
| * | | | MDEV-20605 Awaken transaction can miss inserted by other transaction records ↵Vlad Lesin2022-02-153-71/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | due to wrong persistent cursor restoration Post-push fix: remove unstable test. The test was developed to find the reason of duplicated rows caused by MDEV-20605 fix. The test is not necessary as the reason was found and the bug was fixed.
* | | | | Merge 10.5 into 10.6Vlad Lesin2022-02-1421-215/+404
|\ \ \ \ \ | |/ / / /
| * | | | MDEV-20605 Awaken transaction can miss inserted by other transaction records ↵Vlad Lesin2022-02-1414-207/+396
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | due to wrong persistent cursor restoration sel_restore_position_for_mysql() moves forward persistent cursor position after btr_pcur_restore_position() call if cursor relative position is BTR_PCUR_ON and the cursor points to the record with NOT the same field values as in a stored record(and some other not important for this case conditions). It was done because btr_pcur_restore_position() sets page_cur_mode_t mode to PAGE_CUR_LE for cursor->rel_pos == BTR_PCUR_ON before opening cursor. So we are searching for the record less or equal to stored one. And if the found record is not equal to stored one, then it is less and we need to move cursor forward. But there can be a situation when the stored record was purged, but the new one with the same key but different value was inserted while row_search_mvcc() was suspended. In this case, when the thread is awaken, it will invoke sel_restore_position_for_mysql(), which, in turns, invoke btr_pcur_restore_position(), which will return false because found record don't match stored record, and sel_restore_position_for_mysql() will move forward cursor position. The above can lead to the case when awaken row_search_mvcc() do not see records inserted by other transactions while it slept. The mtr test case shows the example how it can be. The fix is to return special value from persistent cursor restoring function which would notify its caller that uniq fields of restored record and stored record are the same, and in this case sel_restore_position_for_mysql() don't move cursor forward. Delete-marked records are correctly processed in row_search_mvcc(). Non-unique secondary indexes are "uniquified" by adding the PK, the index->n_uniq should then be index->n_fields. So there is no need in additional checks in the fix. If transaction's readview can't see the changes made in secondary index record, it requests clustered index record in row_search_mvcc() to check its transaction id and get the correspondent record version. After this row_search_mvcc() commits mtr to preserve clustered index latching order, and starts mtr. Between those mtr commit and start secondary index pages are unlatched, and purge has the ability to remove stored in the cursor record, what causes rows duplication in result set for non-locking reads, as cursor position is restored to the previously visited record. To solve this the changes are just switched off for non-locking reads, it's quite simple solution, besides the changes don't make sense for non-locking reads. The more complex and effective from performance perspective solution is to create mtr savepoint before clustered record requesting and rolling back to that savepoint after that. See MDEV-27557. One more solution is to have per-record transaction id for secondary indexes. See MDEV-17598. If any of those is implemented, just remove select_lock_type argument in sel_restore_position_for_mysql().
* | | | | Fix whitespacesVladislav Vaintroub2022-02-141-4/+4
| | | | |
* | | | | MDEV-27828 : Windows - major MSI upgrade fails, complaining that install ↵Vladislav Vaintroub2022-02-141-1/+1
| | | | | | | | | | | | | | | | | | | | directory not empty
* | | | | Merge 10.5 into 10.6Marko Mäkelä2022-02-146-1/+69
|\ \ \ \ \ | |/ / / /
| * | | | Merge 10.4 into 10.5Marko Mäkelä2022-02-144-1/+53
| |\ \ \ \ | | |/ / /
| | * | | Merge 10.3 into 10.4Marko Mäkelä2022-02-144-1/+53
| | |\ \ \ | | | |/ /
| | | * | Merge 10.2 into 10.3Marko Mäkelä2022-02-144-1/+53
| | | |\ \ | | | | |/
| | | | * bump the VERSIONDaniel Bartholomew2022-02-121-1/+1
| | | | |
| | | | * Disable innodb_gis.rtree_compress2Marko Mäkelä2022-02-111-0/+1
| | | | |
| | | | * MDEV-27746 Wrong comparision of BLOB's empty preffix with non-preffixed BLOB ↵Vlad Lesin2022-02-113-1/+52
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | causes rows count mismatch for clustered and secondary indexes during non-locking read row_sel_sec_rec_is_for_clust_rec() treats empty BLOB prefix field in secondary index as a field equal to any external BLOB field in clustered index. Row_sel_get_clust_rec_for_mysql::operator() doesn't zerro out clustered record pointer in row_search_mvcc(), and row_search_mvcc() thinks that delete-marked secondary index record has visible for "CHECK TABLE"'s read view old-versioned clustered index record, and row_scan_index_for_mysql() counts it as a row. The fix is to execute row_sel_sec_rec_is_for_blob() in row_sel_sec_rec_is_for_clust_rec() if clustered field contains BLOB's reference.
| | | * | Merge mariadb-10.3.34 into 10.3Marko Mäkelä2022-02-1424-35/+5566
| | | |\ \
| | | * | | bump the VERSIONDaniel Bartholomew2022-02-121-1/+1
| | | | | |
| | * | | | Merge mariadb-10.4.24 into 10.4Marko Mäkelä2022-02-1424-39/+5566
| | |\ \ \ \
| | * | | | | bump the VERSIONDaniel Bartholomew2022-02-121-1/+1
| | | | | | |
| * | | | | | Merge mariadb-10.5.15 into 10.5Marko Mäkelä2022-02-1423-33/+5567
| |\ \ \ \ \ \
| * | | | | | | bump the VERSIONDaniel Bartholomew2022-02-121-1/+1
| | | | | | | |
| * | | | | | | MDEV-27813 Windows, compiling : RelWithDebInfo should use /Ob2Vladislav Vaintroub2022-02-111-0/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixed inlining flags. Remove /Ob1 added by CMake for RelWithDebInfo. (the actual compiler default is /Ob2 if optimizations are enabled) Allow to define custom /Ob flag with new variable MSVC_INLINE, if desired
| * | | | | | | MDEV-27804 Fails to build - perf schema - thread id of type uintptr_t ↵Samuel Thibault2022-02-111-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | requires header While building on GNU/Hurd and kfreebsd. On the C++ standard uintptr_t can be defined in <cstdint> ref: https://www.cplusplus.com/reference/cstdint/ Fixes: 0d44792a835128a83ff07f14dbbcdd621df9f7da
* | | | | | | | MDEV-27817 InnoDB recovery of recently created files is not crash-safeMarko Mäkelä2022-02-131-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Before commit 86dc7b4d4cfe15a2d37f8b5f60c4fce5dba9491d (MDEV-24626) all tablespace ID that needed recovery were known already in recv_init_crash_recovery_spaces(). recv_sys_t::recover_deferred(): Invoke fil_names_dirty(space) on the newly initialized tablespace. In this way, if the next log checkpoint occurs at some LSN that is after the initialization of the tablespace and before the last recovered LSN, a FILE_MODIFY record will be written, so that a subsequent recovery will succeed. The recovery was broken when commit 0261eac57f137c5daae90f5bb1eaa4bf48ee431b merged the 10.5 commit f443cd11007ab89512d4141472cbd9d3b524bad6 (MDEV-27022).
* | | | | | | | Merge mariadb-10.6.7 into 10.6Marko Mäkelä2022-02-1326-39/+5576
|\ \ \ \ \ \ \ \