- 11 Feb, 2020 6 commits
-
-
Marko Mäkelä authored
During native table rebuild or index creation, InnoDB used to skip redo logging and write MLOG_INDEX_LOAD records to inform crash recovery and Mariabackup of the gaps in redo log. This is fragile and prohibits some optimizations, such as skipping the doublewrite buffer for newly (re)initialized pages (MDEV-19738). row_merge_write_redo(): Remove. We do not write MLOG_INDEX_LOAD records any more. Instead, we write full redo log. FlushObserver: Remove. fseg_free_page_func(): Remove the parameter log. Redo logging cannot be disabled. fil_space_t::redo_skipped_count: Remove. We cannot remove buf_block_t::skip_flush_check, because PageBulk will temporarily generate invalid B-tree pages in the buffer pool.
-
Marko Mäkelä authored
Let us define page_id_t as a thin wrapper of uint64_t so that the comparison operators can be simplified. This is a follow-up to the original commit 14be8143. The comparison operator for recv_sys.pages.emplace() turned out to be a busy spot in a recovery benchmark. That data structure was introduced in MDEV-19586 in commit 177a571e.
-
Marko Mäkelä authored
The linear scan of recv_sys_t::blocks() in recv_sys_t::free() turns out to dominate the execution time in crash recovery. Let us scan the much shorter buf_pool->chunks lists instead.
-
Jan Lindström authored
MDEV-20051: Add new mode to wsrep_OSU_method in which Galera checks storage engine of the effected table Introduced a new wsrep_strict_ddl configuration variable in which Galera checks storage engine of the effected table. If table is not InnoDB (only storage engine currently fully supporting Galera replication) DDL-statement will return error code: ER_GALERA_REPLICATION_NOT_SUPPORTED eng "DDL-statement is forbidden as table storage engine does not support Galera replication" However, when wsrep_replicate_myisam=ON we allow DDL-statements to MyISAM tables. If effected table is allowed storage engine Galera will run normal TOI. This new setting should be for now set globally on all nodes in a cluster. When this setting is set following DDL-clauses accessing tables not supporting Galera replication are refused: * CREATE TABLE (e.g. CREATE TABLE t1(a int) engine=Aria * ALTER TABLE * TRUNCATE TABLE * CREATE VIEW * CREATE TRIGGER * CREATE INDEX * DROP INDEX * RENAME TABLE * DROP TABLE Statements on PROCEDURE, EVENT, FUNCTION are allowed as effected tables are known only at execution. Furthermore, USER, ROLE, SERVER, DATABASE statements are also allowed as they do not really have effected table.
-
Igor Babaev authored
ANding of the range built from inferred NOT NULL conditions and the range built from other conditions used in WHERE/ON clauses may produce an IMPOSSIBLE range. The code of MDEV-15777 did not take into account this possibility.
-
Alexander Barkov authored
-
- 10 Feb, 2020 1 commit
-
-
Aleksey Midenkov authored
-
- 08 Feb, 2020 5 commits
-
-
Alexander Barkov authored
Rewriting GRANT/REVOKE grammar to use more bison stack and use Sql_cmd_ style 1. Removing a few members from LEX: - uint grant, grant_to_col, which_columns - List<LEX_COLUMN> columns - bool all_privileges 2. Adding classes Grand_object_name, Lex_grant_object_name 3. Adding classes Grand_privilege, Lex_grand_privilege 4. Adding struct Lex_column_list_privilege_st, class Lex_column_list_privilege 5. Rewriting the GRANT/REVOKE grammar to use new classes and pass them through bison stack (rather than directly access LEX members) 6. Adding classes Sql_cmd_grant* and Sql_cmd_revoke*, changing GRANT/REVOKE to use LEX::m_sql_cmd. 7. Adding the "sp_handler" grammar rule and removing some duplicate grammar for GRANT/REVOKE for different kinds of SP objects. 8. Adding a new rule comma_separated_ident_list, reusing it in: - with_column_list - colum_list_privilege
-
Marko Mäkelä authored
ut_align_down(): Preserve the const qualifier. Use C++ casts. ha_delete_hash_node(): Correct an assertion expression. fil_page_get_type(): Perform an assumed-aligned read. page_align(): Preserve the const qualifier. Assume (some) alignment. page_get_max_trx_id(): Check the index page type. page_header_get_field(): Perform an assumed-aligned read. page_get_autoinc(): Perform an assumed-aligned read. page_dir_get_nth_slot(): Perform an assumed-aligned read. Preserve the const qualifier.
-
Marko Mäkelä authored
recv_sys_t::ALIGNMENT: The recv_sys_t::alloc() alignment
-
Marko Mäkelä authored
-
Martin Liska authored
When using LTO, one can see optimization of stack variables that are passed to check_stack_overrun as argument buf. That prevents proper stack overrun detection.
-
- 07 Feb, 2020 6 commits
-
-
Marko Mäkelä authored
Add explicit casts when assigning ulint to m_user_space_id.
-
Marko Mäkelä authored
mtr_log_t and mtr_t::m_log_mode have the same range 0 to 3.
-
Marko Mäkelä authored
mtr_t::get_log_mode(): Use equivalent static_assert(). mtr_t::m_n_log_recs: Do not exceed the number of bits in uint16_t.
-
Marko Mäkelä authored
Use bit-fields for some mtr_t members to improve locality of reference. Because mtr_t is never shared between threads, there are no considerations regarding concurrent access.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
Since commit 5e62b6a5 (MDEV-16264), purge_sys_t::stop() no longer waited for all purge activity to stop. This caused problems on FLUSH TABLES...FOR EXPORT because of purge running concurrently with the buffer pool flush. The assertion at the end of buf_flush_dirty_pages() could fail. The, implemented by Vladislav Vaintroub, aims to eliminate race conditions when stopping or resuming purge: waitable_task::disable(): Wait for the task to complete, then replace the task callback function with noop. waitable_task::enable(): Restore the original task callback function after disable(). purge_sys_t::stop(): Invoke purge_coordinator_task.disable(). purge_sys_t::resume(): Invoke purge_coordinator_task.enable(). purge_sys_t::running(): Add const qualifier, and clarify the comment. The purge coordinator task will remain active as long as any purge worker task is active. purge_worker_callback(): Assert purge_sys.running(). srv_purge_wakeup(): Merge with the only caller purge_sys_t::resume(). purge_coordinator_task: Use static linkage.
-
- 06 Feb, 2020 2 commits
-
-
Marko Mäkelä authored
srv_export_innodb_status(): While gathering innodb_mem_adaptive_hash, acquire btr_search_latches[i] in order to prevent a race condition with buffer pool resizing.
-
Marko Mäkelä authored
Release memory as soon as redo log records are processed. Because the memory allocation and deallocation of parsed redo log records must be protected by recv_sys.mutex, it is better to avoid using a std::atomic field for bookkeeping. buf_page_t::access_time: Keep track of the recv_sys.pages record allocations. The most significant 16 bits will count allocated blocks (which were previously counted by buf_page_t::buf_fix_count in the debug version), and the least significant 16 bits indicate the number of allocated bytes in the block (which was previously managed in buf_block_t::modify_clock), which must be a positive number, up to innodb_page_size. The byte offset 65536 is represented as the value 0. recv_recover_page(): Let the caller erase the log. recv_validate_tablespace(): Acquire recv_sys_t::mutex.
-
- 05 Feb, 2020 3 commits
-
-
Oleksandr Byelkin authored
MDEV-21616: Server crash when using "SET STATEMENT max_statement_time=0 FOR desc xxx" lead to collapse Main select should be pushed first.
-
Marko Mäkelä authored
row_log_table_get_pk_old_col(): For replacing a NULL value for a column of the being-added primary key, look up the correct default value, even if columns had been instantly reordered or dropped earlier. This ought to have been broken ever since commit 0e5a4ac2 (MDEV-15562).
-
mkaruza authored
Function `signal_waiters` assigned `m_committed_seqno` variable outside of mutex lock which caused incorrect behavior of WSREP_SYNC_WAIT_UPTO_GTID. Fixed by moving assignment inside lock. Added handling of OOM and now error is reported. Remove hard-coded seqno value and read seqno directly from current node state.
-
- 04 Feb, 2020 5 commits
-
-
Sergey Vojtovich authored
Also added support for MAP_SYNC. It allows to achieve decent performance with DAX devices even when libpmem is unavailable. Fixed Windows version of my_msync(): according to manual FlushViewOfFile() may return before flush is actually completed. It is advised to issue FlushFileBuffers() after FlushViewOfFile().
-
Marko Mäkelä authored
ha_innobase::commit_inplace_alter_table(): After ALTER_STORED_COLUMN_ORDER, ensure that the virtual column metadata will be reloaded also when the table is not being rebuilt.
-
Sujatha authored
Fix: === Add "REPLICA" as an alias for "SLAVE". All commands which use "SLAVE" keyword can be used with new alias "REPLICA". List of commands: On Master: ========= SHOW REPLICA HOSTS <--> SHOW SLAVE HOSTS Privilege "SLAVE" <--> "REPLICA" On Slave: ========= START SLAVE <--> START REPLICA START ALL SLAVES <--> START ALL REPLICAS START SLAVE UNTIL <--> START REPLICA UNTIL STOP SLAVE <--> STOP REPLICA STOP ALL SLAVES <--> STOP ALL REPLICAS RESET SLAVE <--> RESET REPLICA RESET SLAVE ALL <--> RESET REPLICA ALL SLAVE_POS <--> REPLICA_POS
-
Jan Lindström authored
We need to release global system variables mutex before doing wsrep_init to avoid race with next show status and we need to save wsrep_on value as it is changed on wsrep_init. Added test case.
-
Julius Goryavsky authored
-
- 03 Feb, 2020 3 commits
-
-
Jan Lindström authored
When wsrep_on is changed to ON we might need to run wsrep_init if wsrep-provider is set and wsrep is not inited.
-
Eugene Kosov authored
-
Sachin authored
MDEV-20001 Potential dangerous regression: INSERT INTO >=100 rows fail for myisam table with HASH indexes Problem:- So the issue is when we do bulk insert with rows > MI_MIN_ROWS_TO_DISABLE_INDEXES(100) , We try to disable the indexes to speedup insert. But current logic also disables the long unique indexes. Solution:- In ha_myisam::start_bulk_insert if we find long hash index (HA_KEY_ALG_LONG_HASH) we will not disable the index. This commit also refactors the mi_disable_indexes_for_rebuild function, Since this is function is called at only one place, it is inlined into start_bulk_insert mi_clear_key_active is added into myisamdef.h because now it is also used in ha_myisam.cc file. (Same is done for Aria Storage engine)
-
- 02 Feb, 2020 2 commits
-
-
Aleksey Midenkov authored
-
Sachin Setiya authored
If we have long unique key for aria engine return too long key error, because Aria does not support key on virtual generated column.
-
- 01 Feb, 2020 3 commits
-
-
Eugene Kosov authored
main change: rename first redo log without file close second change: use os_offset_t to represent offset in a file third change: fix log texts
-
Marko Mäkelä authored
Starting with MariaDB Server 10.4, C++11 is being used. Hence, std::atomic should be preferred to my_atomic.
-
Marko Mäkelä authored
Fix up commit f5c080c7
-
- 31 Jan, 2020 3 commits
-
-
Marko Mäkelä authored
In commit 0e5a4ac2 (MDEV-15562) we introduced was a bogus debug check failure that does not affect the correctness of the release build. With a fixed-length PRIMARY KEY, we do not have to recompute the rec_get_offsets() after restarting the mini-transaction, because the offsets of DB_TRX_ID,DB_ROLL_PTR are not going to change. row_undo_mod_clust(): Invoke rec_offs_make_valid() to keep the debug check in page_zip_write_trx_id_and_roll_ptr() happy. The scenario to reproduce this bug should be rather unlikely: In the time frame when row_undo_mod_clust() has committed its first mini-transaction and has not yet started the next one, another mini-transaction must do something that causes the page to be reorganized, split or merged.
-
Marko Mäkelä authored
The variable 'dlh' was being used uninitialized if WSREP_PROVIDER is not set.
-
Sachin authored
-
- 30 Jan, 2020 1 commit
-
-
mkaruza authored
Variable `wsrep_new_cluster` should be set to false after `wsrep_init_startup`. Problem was that this was done before when mysqldump is used as SST method so option wsrep-new-cluster didn't have any effect.
-