- 20 Aug, 2020 8 commits
-
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Thirunarayanan Balathandayuthapani authored
in buf_page_set_sticky - Adding os_thread_yield() in buf_page_create() to avoid the continuous buffer pool mutex acquistions.
-
Thirunarayanan Balathandayuthapani authored
in buf_page_set_sticky commit a1f899a8 (MDEV-23233) added the code to make page sticky. So that InnoDB can't allow the page to be grabbed by other thread while doing lazy drop of ahi. But the block could be in flush list and it could have io_fix value as BUF_IO_WRITE. It could lead to the failure in buf_page_set_sticky(). buf_page_create(): If btr_search_drop_page_hash_index() must be invoked, take x-latch on the block. If the block io_fix value is other than BUF_IO_NONE, release the buffer pool mutex and page hash lock and wait for I/O to complete.
-
Marko Mäkelä authored
Since commit 15093639 (MDEV-23484) the rollback of InnoDB transactions is no longer protected by dict_operation_lock. Removing that protection revealed a race condition between transaction rollback and the rollback of an online table-rebuilding operation (OPTIMIZE TABLE, or any online ALTER TABLE that is rebuilding the table). row_undo_mod_clust(): Re-check dict_index_is_online_ddl() after acquiring index->lock, similar to how row_undo_ins_remove_clust_rec() is doing it. Because innobase_online_rebuild_log_free() is holding exclusive index->lock while invoking row_log_free(), this re-check will ensure that row_log_table_low() will not be invoked when index->online_log=NULL. A different race condition is possible between the rollback of a recovered transaction and the start of online secondary index creation. Because prepare_inplace_alter_table_dict() is not acquiring an InnoDB table lock in this case, and because recovered transactions are not covered by metadata locks (MDL), the dict_table_t::indexes could be modified by prepare_inplace_alter_table_dict() while the rollback of a recovered transaction is being executed. Normal transactions would be covered by MDL, and during prepare_inplace_alter_table_dict() we do hold MDL_EXCLUSIVE, that is, an online ALTER TABLE operation may not execute concurrently with other transactions that have accessed the table. row_undo(): To prevent a race condition with prepare_inplace_alter_table_dict(), acquire dict_operation_lock for all recovered transactions. Before MDEV-23484 we used to acquire it for all transactions, not only recovered ones. Note: row_merge_drop_indexes() would not invoke dict_index_remove_from_cache() while transactional locks exist on the table, or while any thread is holding an open table handle. OK, it does that for FULLTEXT INDEX, but ADD FULLTEXT INDEX is not supported as an online operation, and therefore prepare_inplace_alter_table_dict() would acquire a table S lock, which cannot succeed as long as recovered transactions on the table exist, because they would hold a conflicting IX lock on the table.
-
Marko Mäkelä authored
-
- 19 Aug, 2020 6 commits
-
-
Marko Mäkelä authored
Ever since MDEV-15053 changed something in the page flushing, we are occasionally observing pending I/O for a data file that is about to be deleted. fil_check_pending_io(): Change the Warning to a note. This message was already made less frequent in commit dcc0baf5 (10.5.4) and commit 65f831d1 (10.3.24, 10.4.14).
-
Daniele Sciascia authored
SELECT WSREP_LAST_SEEN_GTID aborts the server if no provider is loaded.
-
Daniele Sciascia authored
Some invalid wsrep_provider paths may be interpreted as a valid directory. For example '/invalid/libgalera_smm.so' with UTF character set is interpreted as '/', which is a valid directory. A early check that wsrep_provider should not be a directory fixes it.
-
Daniele Sciascia authored
This happens with global wsrep_on disabled and local wsrep_on enabled. The fix consists in avoiding sync wait when global wsrep_on is disabled.
-
Marko Mäkelä authored
In commit fe39d02f (MDEV-20638) we removed some wake-up signaling of the master thread that should have been there, to ensure a steady log checkpointing workload. Common sense suggests that the commit omitted some necessary calls to srv_inc_activity_count(). But, an attempt to add the call to trx_flush_log_if_needed_low() as well as to reinstate the function innobase_active_small() did not restore the performance for the case where sync_binlog=1 is set. Therefore, we will revert the entire commit in MariaDB Server 10.2. In MariaDB Server 10.5, adding a srv_inc_activity_count() call to trx_flush_log_if_needed_low() did restore the performance, so we will not revert MDEV-20638 across all versions.
-
Daniele Sciascia authored
-
- 18 Aug, 2020 7 commits
-
-
Marko Mäkelä authored
InnoDB transaction rollback includes an unnecessary work-around for a data corruption bug that was fixed by me in MySQL 5.6.12 mysql/mysql-server@935ba09d52c1908bde273ad1940b5ab919d9763d and ported to MariaDB 10.0.8 by commit c291ddfd in 2013 and 2014, respectively. By acquiring and releasing dict_operation_lock in shared mode, row_undo() hopes to prevent the table from being dropped while the undo log record is being rolled back. But, thanks to mentioned fix, debug assertions (that we are adding) show that the rollback is protected by transactional locks (table IX lock, in addition to implicit or explicit exclusive locks on the records that had been modified). Because row_drop_table_for_mysql() would invoke row_add_table_to_background_drop_list() if any locks exist on the table, the mere existence of locks (which is guaranteed during ROLLBACK) is enough to protect the table from disappearing. Hence, acquiring and releasing dict_operation_lock for every row that is being rolled back is unnecessary. row_undo(): Remove the unnecessary acquisition and release of dict_operation_lock. Note: row_add_table_to_background_drop_list() is mostly working around bugs outside InnoDB: MDEV-21175 (insufficient MDL protection of FOREIGN KEY operations) MDEV-21602 (incorrect error handling of CREATE TABLE...SELECT).
-
Marko Mäkelä authored
Regretfully, the parameter innodb_log_checksums was introduced in MySQL 5.7.9 (the first GA release of that series) by mysql/mysql-server@af0acedd885eb7103e319f79d25fda7386ef1506 which partly replaced a parameter that had been introduced in 5.7.8 mysql/mysql-server@22ba38218e1d76c24f69b5a5595ad3bf5933acb0 as innodb_log_checksum_algorithm. Given that the CRC-32C operations are accelerated on many processor implementations (AMD64 with SSE4.2; since MDEV-22669 also on IA-32 with SSE4.2, POWER 8 and later, ARMv8 with some extensions) and by lookup tables when only generic SISD instructions are available, there should be no valid reason to disable checksums. In MariaDB 10.5.2, as a preparation for MDEV-12353, MDEV-19543 deprecated and ignored the parameter innodb_log_checksums altogether. This should imply that after a clean shutdown with innodb_log_checksums=OFF one cannot upgrade to MariaDB Server 10.5 at all. Due to these problems, let us deprecate the parameter innodb_log_checksums and honor it only during server startup. The command SET GLOBAL innodb_log_checksums will always set the parameter to ON.
-
Marko Mäkelä authored
dict_col_t::same_encoding(), dict_col_t::same_format(): Allow an instantaneous change of a column to a compatible encoding, just like ha_innobase::can_convert_string() and similar functions do.
-
Thirunarayanan Balathandayuthapani authored
Problem: ======= InnoDB drops the column which has foreign key relations on it. So it tries to load the foreign key during rename process of copy algorithm even though the foreign_key_check is disabled. Solution: ======== During alter copy algorithm, InnoDB ignores the error while loading the foreign key constraint if foreign key check is disabled. It should throw the warning about failure of the foreign key constraint when foreign key check is disabled.
-
Thirunarayanan Balathandayuthapani authored
This problem is caused by 6697135c (MDEV-21572). During recovery, InnoDB prefetches the siblings of change buffer index leaf page. It does asynchronous page read and recovery scenario wasn't handled in buf_read_page_background(). It leads to the refusal of startup of the server. Solution: ========= InnoDB shouldn't allow the change buffer index page siblings to be prefetched.
-
Oleksandr Byelkin authored
Remove __bss_start & Co, because systen call "write" check buffer address and return EFAULT if it is wrong.
-
Julius Goryavsky authored
Adding any unknown option to the "[mysqld_safe]" section makes mysqld impossible to start with mysqld_multi. For example, after adding the unknown option "numa_interleave" to the "[mysqld_safe]" section, mysqld_multi exits with the following diagnostics: [ERROR] /usr/local/mysql/bin/mysqld: unknown option '--numa_interleave' To get rid of this behavior, this patch by default adds the "--loose-" prefix to all unknown (for mysqld_safe) options. This behavior can be enabled explicitly with the --ignore-unknown option and disabled with the --no-ignore-unknown option.
-
- 17 Aug, 2020 2 commits
-
-
Kentoku SHIBA authored
-
Kentoku SHIBA authored
-
- 15 Aug, 2020 3 commits
-
-
Eugene Kosov authored
btr_validate_index(): do not stop checking after some level failed. That way it'll become possible to see errors in leaf pages even when uppers layers are corrupted too. page_validate(): check info_bits and status_bits more
-
Vladislav Vaintroub authored
Fix : Do not INSTALL anything with cmake from data folder.
-
Daniel Black authored
Since MDEV-18778, timezone tables get changed to innodb to allow them to be replicated to other galera nodes. Even without galera, timezone tables could be declared innodb. With the standalone innodb tables, the mysql_tzinfo_to_sql takes approximately 27 seconds. With the transactions enabled in this patch, 1.2 seconds is the approximate load time. While explicit checks for the engine of the time zone tables could be done, or checks against !opt_skip_write_binlog, non-transactional storage engines will just ignore the transactional state without even a warning so its safe to enact globally. Leap seconds are pretty much ignored as they are a single insert statement and have gone out of favour as they have caused MariaDB stalls in the past.
-
- 13 Aug, 2020 1 commit
-
-
Kentoku SHIBA authored
-
- 14 Aug, 2020 2 commits
-
-
Jan Lindström authored
-
Jan Lindström authored
During SST we need to let FTWRL to use normal timeout method even when client is disconnected.
-
- 13 Aug, 2020 1 commit
-
-
Kentoku SHIBA authored
-
- 14 Aug, 2020 10 commits
-
-
Alexey Botchkov authored
Protocol_local fixed so it can be used now. Some Protocol:: methods made virtual so they can adapt. as well as net_ok and net_send_error functions. execute_sql_string function is exported to the plugins. To be changed with the mysql_use_result.
-
Sergei Petrunia authored
It allows to skip db and table name when printing table column references.
-
Sergei Petrunia authored
Print the condition being pushed.
-
Jan Lindström authored
During SST we need to let FTWRL to use normal timeout method even when client is disconnected.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Alexander Barkov authored
The previous commit was erroneously marked as MDEV-23162. The correct issue is MDEV-23478.
-
Alexander Barkov authored
An alternative implementation (replacing the one based on repertoire). This implementation makes Field send itself to Protocol_text using data type specific Protocol methods rather than field->val_str() followed by protocol_text->store_str(). As now Field sends itself in the same way to all protocol types (e.g. Protocol_binary, Protocol_text, Protocol_local), the method Field::send_binary() was renamed just to Field::send(). Note, this change introduces symmetry between Field and Item, because Items also send themself using a single method Item::send(), which is used for *all* protocol types. Performance improvement is achieved by the fact that Protocol_text implements these data type specific methods using store_numeric_string_aux() rather than store_string_aux(). The conversion now happens only when character_set_results is not ASCII compatible character sets (e.g. UCS2, UTF16, UTF32). In the old code (before any MDEV-23162 work, e.g. as of 10.5.4), Protocol_text::store(Field*) used val_str() for all data types. So the execution went through the character set conversion routines even for numeric and temporal data types. Benchmarking summary (see details in MDEV-23478): The new approach stably demonstrates additional improvement comparing to the previous implementation (the smaller time - the better): Original - the commit before MDEV-23162 be98036f 1m9.336s 1m9.290s 1m9.300s MDEV-23162 - the repertoire optimization 1m6.101s 1m5.988s 1m6.264s MDEV-23478 - this commit 1m2.150s 1m2.079s 1m2.099s
-
Alexander Barkov authored
This reverts commit eb2eaba7. A different implementation of MDEV-23162 is coming.
-
Alexander Barkov authored
-