- 26 Apr, 2021 2 commits
-
-
Daniel Bartholomew authored
-
Marko Mäkelä authored
-
- 25 Apr, 2021 3 commits
-
-
Marko Mäkelä authored
In the SUX_LOCK_GENERIC implementation, we can remember at most one pending exclusive lock request. If multiple exclusive lock requests are pending, the WRITER_WAITING flag will be cleared when the first waiting writer acquires the exclusive lock. ssux_lock_low::update_lock(): If WRITER_WAITING is set, wake up the writer even if the UPDATER flag is set, because the waiting writer may be in the process of upgrading its U lock to X. rw_lock::read_unlock(): Also indicate that an X lock waiter must be woken up if an U lock exists. This fix may cause unnecessary wake-ups and system calls, but this is the best that we can do. Ideally we would use the MDEV-25404 idea of a separate 'writer' mutex, but there is no portable way to request that a non-recursive mutex be created, and InnoDB requires the ability to transfer buf_block_t::lock ownership to an I/O thread. To allow problems like this to be caught more reliably in the future, we add a unit test for srw_mutex, srw_lock, ssux_lock, sux_lock.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
- 24 Apr, 2021 4 commits
-
-
Igor Babaev authored
complemented the fix for MDEV-24823 in 10.2. As it is the only call of this function in 10.3 the commit also has added the code of the function.
-
Marko Mäkelä authored
except commit 1288dfff
-
Marko Mäkelä authored
It is possible that an object that was originally created by open_purge_table() will remain cached and reused for SQL execution. Our previous fix wrongly assumed that ha_innobase::open() would always be called before SQL execution starts. Therefore, we must invoke dict_stats_init() in ha_innobase::info_low() instead of only doing it in ha_innobase::open(). Note: Concurrent execution of dict_stats_init() on the same table is possible, but it also was possible between two calls to ha_innobase::open(), with no ill effects observed. This should fix the assertion failure on stat_initialized. A possibly easy way to reproduce it would have been to run the server with innodb_force_recovery=2 (disable the purge of history), update a table so that an indexed virtual column will be affected, and finally restart the server normally (purge enabled), to observe a crash when the table is accessed from SQL. The problem was first observed and this fix verified by Elena Stepanova. Also Thirunarayanan Balathandayuthapani repeated the problem.
-
Marko Mäkelä authored
row_sel_sec_rec_is_for_clust_rec(): If the field in the clustered index record stored off page, always fetch it, also when the secondary index field has been built on the entire column. This was broken ever since the InnoDB Plugin for MySQL Server 5.1 introduced ROW_FORMAT=DYNAMIC and ROW_FORMAT=COMPRESSED for InnoDB tables. That code was first introduced in this tree in commit 3945d5e5. For the original ROW_FORMAT=REDUNDANT and the MySQL 5.0.3 ROW_FORMAT=COMPRESSED, there was no problem, because for those tables we always stored at least a 768-byte prefix of each column in the clustered index record. row_sel_sec_rec_is_for_blob(): Allow prefix_len==0 for matching the full column.
-
- 23 Apr, 2021 7 commits
-
-
Igor Babaev authored
-
Aleksey Midenkov authored
Before FRM is written walk vcol expressions through check_table_name_processor() and check if field items match (db, table_name) qualifier. We cannot do this in check_vcol_func_processor() as there is already no table name qualifiers in expressions of written and loaded FRM.
-
Aleksey Midenkov authored
Buffer overflow in ib_push_warning() fixed by using vsnprintf(). InnoDB parser was obsoleted by MDEV-16417. Thanks to Nikita Malyavin for review and suggestion.
-
Sergei Golubchik authored
It's Oracle libmysqlclient license exception, we no longer include, build or ship libmysqlclient
-
Marko Mäkelä authored
row_ins_clust_index_entry_low(): Do not enable bulk insert if any record locks exist on the table. Bulk insert is assumed to be covered only by an exclusive table lock, with no row-level locking or undo logging.
-
Sujatha authored
Remove garbage files.
-
Igor Babaev authored
Before this patch mergeable derived tables / view used in a multi-table update / delete were merged before the preparation stage. When the merge of a derived table / view is performed the on expression attached to it is fixed and ANDed with the where condition of the select S containing this derived table / view. It happens after the specification of the derived table / view has been merged into S. If the ON expression refers to a non existing field an error is reported and some other mergeable derived tables / views remain unmerged. It's not a problem if the multi-table update / delete statement is standalone. Yet if it is used in a stored procedure the select with incompletely merged derived tables / views may cause a problem for the second call of the procedure. This does not happen for select queries using derived tables / views, because in this case their specifications are merged after the preparation stage at which all ON expressions are fixed. This patch makes sure that merging of the derived tables / views used in a multi-table update / delete statement is performed after the preparation stage. Approved by Oleksandr Byelkin <sanja@mariadb.com>
-
- 22 Apr, 2021 18 commits
-
-
Igor Babaev authored
Before this patch mergeable derived tables / view used in a multi-table update / delete were merged before the preparation stage. When the merge of a derived table / view is performed the on expression attached to it is fixed and ANDed with the where condition of the select S containing this derived table / view. It happens after the specification of the derived table / view has been merged into S. If the ON expression refers to a non existing field an error is reported and some other mergeable derived tables / views remain unmerged. It's not a problem if the multi-table update / delete statement is standalone. Yet if it is used in a stored procedure the select with incompletely merged derived tables / views may cause a problem for the second call of the procedure. This does not happen for select queries using derived tables / views, because in this case their specifications are merged after the preparation stage at which all ON expressions are fixed. This patch makes sure that merging of the derived tables / views used in a multi-table update / delete statement is performed after the preparation stage. Approved by Oleksandr Byelkin <sanja@mariadb.com>
-
Sergei Golubchik authored
-
Sergei Golubchik authored
* MSVC check was lost in a bad merge * add a comment * move AIX check where it belongs and where it would still allow -Werror, if desired
-
Marko Mäkelä authored
While MDEV-24589 causes the regression MDEV-25491 Race condition between DROP TABLE and purge of SYS_INDEXES record we must not revert it from 10.6, because MDEV-24589 is a prerequisite for MDEV-25180 Atomic ALTER TABLE that is targeting 10.6. The regression will be dealt with later.
-
Marko Mäkelä authored
-
Vladislav Vaintroub authored
-
Vladislav Vaintroub authored
Fix is to changed message to be [WARNING] for backup
-
Vladislav Vaintroub authored
There is new Yukon Standard time Windows timezone. Also fix the powershell script that generates the Windows locale mapping, tell powershell to use TLSv1.2 to access the github (on some reason it is TLS1.1 that powershell is using by default, and it does no work)
-
Marko Mäkelä authored
The U-to-X upgrade turned out to be incorrect. A debug assertion failed in wr_wait(), called from mtr_defer_drop_ahi() in a stress test with innodb_adaptive_hash_index=ON. A correct upgrade procedure ought to be readers.fetch_add(WRITER-1) to register ourselves as a WRITER (or waiting writer) and to release the reference that was being held for the U lock. Thanks to Matthias Leich for catching the problem.
-
Marko Mäkelä authored
This reverts commit e731a283. A crash occurred during the test stress.ddl_innodb when fil_delete_tablespace() for DROP TABLE was waiting in fil_check_pending_operations() and a purge thread for handling an earlier DROP INDEX was attempting to load the index root page in btr_free_if_exists() and btr_free_root_check(). The function buf_page_get_gen() would write out several times "trying to read...being-dropped tablespace" before giving up and committing suicide. It turns out that during any page access in btr_free_if_exists(), fil_space_t::set_stopping() could have been invoked by fil_check_pending_operations(), as part of dropping the tablespace. Preventing this race condition would require extensive changes to the allocation code or some locking mechanism that would ensure that we only set the flag if btr_free_if_exists() is not in progress. Either way, that could be a too risky change in a GA release. Because MDEV-24589 is not strictly necessary in the 10.5 release series and it only is a requirement for MDEV-25180 in a later major release, we will revert the change from 10.5.
-
sachin authored
Issue:- Since there is no waiting for the actual disconnection of the con_tmp (which does XA prepare of test1), We can have a issue when test1 is not prepared and we are calling rollback on test1 , giving XAER_NOTA: Unknown XID error Solution:- Wait for the complete disconnection of con_tmp
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
buf_resize_callback(): Correct an invalid assertion, and enable the assertion in debug builds only. Between buf_resize_start() and buf_resize_shutdown(), srv_shutdown_state must be less than SRV_SHUTDOWN_CLEANUP. The incorrect assertion had been introduced in commit 5e62b6a5 (MDEV-16264). As a result, the server could crash if shutdown was initiated concurrently with initiating a change of innodb_buffer_pool_size.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
- 21 Apr, 2021 6 commits
-
-
Thirunarayanan Balathandayuthapani authored
to mysql interpreter InnoDB returns uninitialized statistics to mysql interpreter when background thread is opening the table. So it leads to assertion failure. In that case, InnoDB avoid sending innodb statistics information to mysql interpreter.
-
Eugene Kosov authored
node->index was NULL. But it's possible to get dict_table_t* from another source.
-
Andrei Elkin authored
There was race between a committing transaction and the following in binlog order FLUSH LOGS that could create a 2nd Binlog checkpoint (BCP) event in the new file *before* the first logged-in-old-binlog transaction gets committed in Innodb. That would cause the transaction loss at recovery, should the server stop right after the BCP. The race is tackled by enforcing the necessary set of mutexes to be acquired by FLUSH-LOGS handler in the correct order (of the group commit leader pattern). Note, there remain two cases where a similar race is still possible: - the above race as it is when the server is run with ("unlikely") non-default `--binlog-optimize-thread-scheduling=0` (MDEV-24530), and - at unlikely event of bin-logging of Incident event (MDEV-24531) that also triggers binlog rotation, in both cases though with lesser chances after the current fixes.
-
Vicențiu Ciorbaru authored
-
Vicențiu Ciorbaru authored
-
Vicențiu Ciorbaru authored
Pushing LIMIT to temp aggregation table is possible, but not when WITH TIES is used. In a degenerate case with constant ORDER BY, the constant gets removed and the code assumed the limit is push-able. Ensure that if WITH TIES is present, that this does not happen.
-