summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* fixup 7ecee0c35af8085a8730fce9f2f5917c65406bb0bb-10.5-MDEV-24949Marko Mäkelä2021-03-092-8/+40
| | | | | Ensure that the page cleaner will be woken up even if the server becomes idle again.
* MDEV-24949: Enable idle flushing (after MDEV-23855 disabled it)Marko Mäkelä2021-03-081-3/+15
| | | | | | | | | | | | | | | | | | Thanks to Krunal Bauskar for noticing this regression and providing a suggested fix that this one is based on. After MDEV-23855, the page cleaner thread will stop flushing if dirty_pct < innodb_max_dirty_pages_pct_lwm. The page cleaner used to flush all pages when the server is idle (no write transactions have been committed recently). That is useful, because it will limit the maximum checkpoint age and thus reduce the likelihood of log_free_check() stalls during a write burst. With this change, the page cleaner will avoid entering untimed sleep when the server is not executing write transactions, and it will keep writing up to innodb_io_capacity pages per second until the buffer pool is clean or some write activity is recognized.
* After-merge fix: GCC -WconversionMarko Mäkelä2021-03-081-1/+1
|
* Merge 10.4 into 10.5Marko Mäkelä2021-03-0820-77/+468
|\
| * Merge 10.3 into 10.4Marko Mäkelä2021-03-0816-75/+184
| |\
| | * Fixed that unit.pcre_test works again.Monty2021-03-051-2/+2
| | |
| | * Merge 10.2 into 10.3Marko Mäkelä2021-03-057-61/+42
| | |\
| | | * MDEV-22929 fixup. Print "completed OK!" if page corruption and ↵Vladislav Vaintroub2021-03-053-14/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | --log-innodb-page-corruption Since we do not stop at corrupted page error, there is no reason to log a backup error.
| | | * fixup 58b56f14a096285a0e51b2233fc35398f1b01f5a: Remove dead codeMarko Mäkelä2021-03-043-33/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | row_prebuilt_t::m_no_prefetch: Remove (it was always false). row_prebuilt_t::m_read_virtual_key: Remove (it was always false). Only ha_innopart ever set these fields.
| | | * MDEV-25051 Race condition between persistent statistics and RENAME TABLE or ↵Marko Mäkelä2021-03-041-14/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | TRUNCATE innobase_rename_table(): Invoke dict_stats_wait_bg_to_stop_using_table() to ensure that dict_stats_update() cannot be accessing the table name that we will be modifying. If we are executing RENAME rather than TRUNCATE, reset the flag at the end so that persistent statistics can be calculated again. The race condition was encountered with ASAN and rr. Sorry, there is no test case, like there is for nothing related to dict_stats_wait_bg_to_stop_using_table(). The entire code is an ugly work-around for the failure of dict_stats_process_entry_from_recalc_pool() to acquire MDL. Note: It appears that an ALTER TABLE that is not rebuilding the table will fail to reset the flag that blocks the processing of statistics.
| | * | Merge branch '10.2' into 10.3Vicențiu Ciorbaru2021-03-048-10/+140
| | |\ \ | | | |/
| | | * MDEV-25032: Window functions without column references get removed from ORDER BYVicențiu Ciorbaru2021-03-044-0/+73
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | row_number() over () window function can be used without any column in the OVER clause. Additionally, the item doesn't reference any tables, as it's not effectively referencing any table. Rather it is specifically built based on the end temporary table used for window function computation. This caused remove_const function to wrongly drop it from the ORDER list. Effectively, we shouldn't be dropping any window function from the ORDER clause, so adjust remove_const to account for that. Reviewed by: Sergei Petrunia sergey@mariadb.com
| | | * MDEV-24748 extern column check missing in btr_index_rec_validate()Thirunarayanan Balathandayuthapani2021-03-033-0/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In btr_index_rec_validate(), externally stored column check is missing while matching the length of the field with the length of the field data stored in record. Fetch the length of the externally stored part and compare it with the fixed field length.
| | | * MDEV-20648 InnoDB: Failing assertion: !(*node)->being_extended, ↵bb-10.2-MDEV-20648Thirunarayanan Balathandayuthapani2021-03-031-14/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | innodb.log_data_file_size failed in buildbot, assertion `!space->is_stopping()' InnoDB should check whether the tablespace is being deleted while extending the tablespace.
| * | | Merge 10.3 into 10.4Marko Mäkelä2021-03-085-10/+305
| |\ \ \ | | |/ /
| | * | MDEV-22786 Crashes with nested table value constructorsIgor Babaev2021-03-037-13/+333
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The bug caused crashes of the server when processing queries with nested table value constructors (TVC) . It happened because the grammar rules to parse TVC used the same global lists for both nested TVC and nesting TVC. As a result invalid select trees were constructed for queries with nested TVC and this led to crashes at the prepare stage. This patch provides its own lists structures for each TVC nest level. Besides the patch fixes a bug in the function wrap_tvc() that missed inheritance of the SELECT_LEX::exclude_from_table_unique_test for selects that wrapped TVCs. This inheritance is critical for specifications of derived tables that employ nested TVCs. Approved by dmitry.shulga@mariadb.com
* | | | Cleanup: add override qualifiers to item.hMarko Mäkelä2021-03-051-910/+909
| | | |
* | | | MDEV-24600 fixup: Remove unused trx_register_for_2pc()Marko Mäkelä2021-03-051-12/+0
| | | |
* | | | Merge 10.4 into 10.5Marko Mäkelä2021-03-0540-275/+771
|\ \ \ \ | |/ / /
| * | | Remove unused HA_EXTRA_FAKE_START_STMTMarko Mäkelä2021-03-054-13/+3
| | | | | | | | | | | | | | | | This is fixup for commit f06a0b5338694755842a58798bb3a9a40da78bfd.
| * | | Merge 10.3 into 10.4Marko Mäkelä2021-03-0534-264/+743
| |\ \ \ | | |/ /
| | * | MDEV-24811 Assertion find(table) failed with innodb_evict_tables_on_commit_debugMarko Mäkelä2021-03-032-46/+37
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a backport of commit 18535a402817d8a2b8452df0f75c15dda9199acb from 10.6. lock_release(): Implement innodb_evict_tables_on_commit_debug. Before releasing any locks, collect the identifiers of tables to be evicted. After releasing all locks, look up for the tables and evict them if it is safe to do so. trx_commit_in_memory(): Invoke trx_update_mod_tables_timestamp() before lock_release(), so that our locks will protect the tables from being evicted.
| | * | Merge 10.2 into 10.3Marko Mäkelä2021-03-0315-127/+293
| | |\ \ | | | |/
| | | * MDEV-24532 Table corruption ER_NO_SUCH_TABLE_IN_ENGINE .. on table with ↵Monty2021-03-025-1/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | foreign key When doing a truncate on an Innodb under lock tables, InnoDB would rename the old table to #sql-... and recreate a new 't1' table. The table lock would still be on the #sql-table. When doing ALTER TABLE, Innodb would do the changes on the #sql table (which would disappear on close). When the SQL layer, as part of inline alter table, would close the original t1 table (#sql in InnoDB) and then reopen the t1 table, Innodb would notice that this does not match it's own (old) t1 table and generate an error. Fixed by adding code in truncate table that if we are under lock tables and truncating an InnoDB table, we would close, reopen and lock the table after truncate. This will remove the #sql table and ensure that lock tables is using the new empty table. Reviewer: Marko Mäkelä
| | | * MDEV-25006: Failed assertion on executing EXPLAIN DELETE statement as a ↵Dmitry Shulga2021-03-023-0/+34
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | prepared statement Attempt to execute EXPLAIN statement on multi-table DELETE statement leads to firing firing of the assertion DBUG_ASSERT(! is_set()); in the method Diagnostics_area::set_eof_status. For example, above mentioned assertion failure happens in case any of the following statements EXPLAIN DELETE FROM t1.* USING t1 EXPLAIN DELETE b FROM t1 AS a JOIN t1 AS b are executed in prepared statement mode provided the table t1 does exist. This assertion is hit by the reason that a status of Diagnostics_area is set twice. The first time it is set from the function do_select() when the method multi_delete::send_eof() called. The second time it is set when the method Explain_query::send_explain() calls the method select_send::send_eof (this method invokes the method Diagnostics_area::set_eof_status that finally hits assertion) The second invocation for a setter method of the class Diagnostics_area is correct and run to send a response containing explain data. But first invocation of a setter method of the class Diagnostics_area is wrong since the function do_select() shouldn't be called at all for handling of the EXPLAIN statement. The reason by that the function do_select() is called during handling of the EXPLAIN statement is that the flag SELECT_DESCRIBE not set in the data member JOIN::select_options. The flag SELECT_DESCRIBE if is copied from values select_lex->options. During parsing of EXPLAIN statement this flag is set but latter reset from the function reinit_stmt_before_use() that is called on execution of prepared statement. void reinit_stmt_before_use(THD *thd, LEX *lex) { ... for (; sl; sl= sl->next_select_in_list()) { if (sl->changed_elements & TOUCHED_SEL_COND) { /* remove option which was put by mysql_explain_union() */ sl->options&= ~SELECT_DESCRIBE; ... } ... } So, to fix the issue the flag SELECT_DESCRIBE is set forcibly at the mysql_select() function in case thd->lex->describe set, that is in case EXPLAIN being executed.
| | | * mtr --gdb: fix for --rr and for a warningSergei Golubchik2021-03-012-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | use _RR_TRACE_DIR=dir instead of -o dir, as the former can store multiple traces in dir (if, e.g., the test restarts mysqld) suppress uninitialized warning when $exe is undefined (--manual-XXX)
| | | * MDEV-24860: Incorrect behaviour of SET STATEMENT in case it is executed as a ↵Dmitry Shulga2021-02-255-120/+212
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | prepared statement Running statements with SET STATEMENT FOR clause is handled incorrectly in case the whole statement is executed in prepared statement mode. For example, running of the following statement SET STATEMENT sql_mode = 'NO_ENGINE_SUBSTITUTION' FOR CREATE TABLE t1 AS SELECT CONCAT('abc') AS c1; results in different definition of the table t1 depending on whether the statement is executed as a prepared or as a regular statement. In first case the column c1 is defined as `c1` varchar(3) DEFAULT NULL in the last case the column c1 is defined as `c1` varchar(3) NOT NULL Different definition for the column c1 arise due to the fact that a value of the data memeber Item_func_concat::maybe_null depends on whether strict mode is on or off. Below is definition of the method fix_fields() of the class Item_str_func that is base class for the class Item_func_concat that is created on parsing the SET STATEMENT FOR clause. bool Item_str_func::fix_fields(THD *thd, Item **ref) { bool res= Item_func::fix_fields(thd, ref); /* In Item_str_func::check_well_formed_result() we may set null_value flag on the same condition as in test() below. */ maybe_null= maybe_null || thd->is_strict_mode(); return res; } Although the clause SET STATEMENT sql_mode = 'NO_ENGINE_SUBSTITUTION' FOR is parsed on PREPARE phase during processing of the prepared statement, real setting of the sql_mode system variable is done on EXECUTION phase. On the other hand, the method Item_str_func::fix_fields is called on PREPARE phase. In result, thd->is_strict_mode() returns true during calling the method Item_str_func::fix_fields(), the data member maybe_null is assigned the value true and column c1 is defined as DEFAULT NULL. To fix the issue the system variables listed in the SET STATEMENT FOR clause are set at the beginning of handling the PREPARE phase just right before calling the function check_prepared_statement() and their original values restored immediate after return from this function. Additionally, to avoid code duplication the source code used in the function mysql_execute_command for setting variables, specified by SET STATEMENT clause, were extracted to the standalone functions run_set_statement_if_requested(). This new function is called from the function mysql_execute_command() and the method Prepared_statement::prepare().
| | * | MDEV-24919 Crash with subselect formed by table value constructor andIgor Babaev2021-03-013-10/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | used in set function If a subselect is formed by a table value constructor (TVC) then the following transformation is applied at the prepare stage: VALUES (v1), ... (vn) => SELECT * FROM (VALUES (v1), ... (vn)) tvc_x. The transformation is performed by the function wrap_tvc() that resets THD::LEX::current select to the top level select of the result of the transformation. After the call of wrap_tvc() in the function Item_subselect::wrap_tvc_into_select() the field THD::LEX::current must be reset to the same select as before the call. It was not done. As a result if the subselect formed by a TVC was an argument of a set function then an assertion was hit in the function Item_sum::check_sum_func(). Approved by Oleksandr Byelkin <sanja@mariadb.com>
| | * | Fixed typo in commentMonty2021-03-011-1/+1
| | | |
| | * | Fixed unit test to not 'bail out' if some tests are not compiled.Monty2021-03-011-6/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Before the changes two things could happen: - "path required name explain_filename path" error - unit test never finishead (as it tried to execute just /bin/sh as a test case)
| | * | MDEV-24958 Server crashes in my_strtod ... with DEFAULT(blob)Monty2021-03-015-5/+129
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes also: MDEV-24942 Server crashes in _ma_rec_pack... with DEFAULT() on BLOB This was caused by two different bugs, both related to that the default value for the blob was not calculated before it was used: - There where now Item_default_value::..result() wrappers, which is needed as item in HAVING uses these. This causes crashes when using a reference to a DEFAULT(blob_field) in HAVING. It also caused wrong results when used with other fields with default value expressions that are not constants. - create_tmp_field() did not take into account that blob fields with default expressions are not yet initialized. Fixed by treating Item_default_value(blob) like a normal item expression.
| | * | MDEV-24710 Uninitialized value upon CREATE .. SELECT ... VALUE...Monty2021-03-014-10/+135
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The failure happened for group by queries when all tables where marked as 'const tables' (tables with 0-1 matching rows) and no row matched the where clause and there was in addition a direct reference to a field. In this case the field would not be properly reset and the query would return 'random data' that happended to be in table->record[0]. Fixed by marking all const tables as null tables in this particular case. Sergei also provided an extra test case for the code. @reviewer Sergei Petrunia <psergey@askmonty.org>
| | * | Fixed printing of wring filname "maria_open" in maria.maria-recovery2.testMonty2021-03-012-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | eprintf() was missing a va_start(), which caused wrong filename to be printed when printing recovery trace. Added also missing new line when printing "Table is crashed" to trace file
| | * | MDEV-24965 With ALTER USER ...IDENTIFIED BY command, password doesn't ↵Alexey Botchkov2021-03-011-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | replaced by asterisks in audit log. Test result fixed.
| | * | MDEV-24965 With ALTER USER ...IDENTIFIED BY command, password doesn't ↵Alexey Botchkov2021-02-263-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | replaced by asterisks in audit log. Check for the ALTER USER command added.
| | * | MENT-1098 Crash during update on 10.4.17 after upgrade from 10.4.10Monty2021-02-252-62/+97
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The reason for the crash was that there was not a write lock to protect against file rotations in the server_audit plugin after an audit plugin patch to changed audit mutexes to read & write locks. The fixes are: * Moving server_audit.c to use read & write locks (which improves performance). * Added functionality in file_logger.c to not do file rotations until it is allowed by the caller (done without any interface changes for the logging service). * Move checking of file size limit to server_audit.c and if it is time to do a rotation change the read lock to a write lock and tell file_logger that it is now allowed to rotate the log files.
| * | | MDEV-23843 Assertions in Diagnostics_area upon table operations under FTWRLMonty2021-03-023-0/+27
| | | | | | | | | | | | | | | | Fixed binary logging in ANALYZE TABLE to work as optimize table
* | | | MDEV-25018 [FATAL] InnoDB: Unable to read page (of a dropped tablespace)bb-10.5-MDEV-25018Thirunarayanan Balathandayuthapani2021-03-031-24/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - This issue is caused by commit deadec4e689c9435e20ebb89fd8f84d3f0f90ff3 (MDEV-24569). InnoDB fails to read the change buffer bitmap page from dropped tablespace. In ibuf_bitmap_get_map_page_func(), InnoDB should fetch the page using BUF_GET_POSSIBLY_FREED mode. Callers of ibuf_bitmap_get_map_page() should be adjusted in that case.
* | | | MDEV-24863 AHI entries mismatch with the index while reloading the evicted ↵Thirunarayanan Balathandayuthapani2021-03-031-10/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | tables. This is after-merge fix of f33e57a9e66f7e1790cb84b141381bb668e281a0. In btr_search_drop_page_hash_index(), InnoDB should take the exclusive lock on the AHI latch if index is already freed to avoid the freed memory access during buf_pool_resize()
* | | | MDEV-25026 Various code paths are accessing freed pagesbb-10.5-MDEV-25026Marko Mäkelä2021-03-025-10/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The test case encryption.innodb_encrypt_freed was failing in MemorySanitizer builds. recv_recover_page(): Mark non-recovered pages as freed. fil_crypt_rotate_page(): Before comparing the block->frame contents, check if the block was marked as freed. Other places: Whenever using BUF_GET_POSSIBLY_FREED, check the block->page.status before accessing the page frame. (Both uses of BUF_GET_IF_IN_POOL should be correct now.)
* | | | MDEV-24858 SIGABRT in DbugExit from my_malloc in Query_cache::init_cache ↵Sergei Golubchik2021-03-012-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Regression disable warnings, as they're different on 32bit platforms Closes #1757
* | | | MDEV-24858 SIGABRT in DbugExit from my_malloc in Query_cache::init_cache ↵Nayuta Yanagisawa2021-03-013-1/+12
| | | | | | | | | | | | | | | | | | | | | | | | Regression Add missing DBUG_RETURN to my_malloc.
* | | | MDEV-24997 Assertion mtr->is_named_space(page_id.space()) in ibuf0ibuf.cc:624Thirunarayanan Balathandayuthapani2021-02-261-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | - This is caused by commit deadec4e689c9435e20ebb89fd8f84d3f0f90ff3 (MDEV-24569). InnoDB fails to set the tablespace associated with mini-transacton while resetting the change buffer bitmap bits of the page.
* | | | Merge remote-tracking branch 10.4 into 10.5Daniel Black2021-02-262-1/+2
|\ \ \ \ | |/ / /
| * | | Merge 10.3 into 10.4Marko Mäkelä2021-02-252-1/+2
| |\ \ \ | | |/ /
| | * | Merge 10.2 into 10.3Marko Mäkelä2021-02-252-1/+2
| | |\ \ | | | |/
| | | * Fixed the innodb_ext_key test by adding replace_columnVarun Gupta2021-02-252-1/+2
| | | |
* | | | Merge remote-tracking branch 'origin/10.4' into 10.5Daniel Black2021-02-2610-55/+272
|\ \ \ \ | |/ / /
| * | | Merge branch '10.3' into 10.4Daniel Black2021-02-251-1/+1
| |\ \ \ | | |/ /
| | * | mysys: lf_hash - fix l_search size_t keylenDaniel Black2021-02-251-1/+1
| | | | | | | | | | | | | | | | Correcting an incorrect merge from 10.2