- 12 Sep, 2022 1 commit
-
-
Daniel Black authored
When InnoDB isn't using memory its polite to other system processes to allow that memory to be used. Create buf_page_t::set_os_unused, to madvise(MADV_FREE)/ DiscardVirtualMemory innodb buffer pool pages to keep virtual mapping but allow kernel to reclaim memory. set_os_unused is called by buf_LRU_block_free_non_file_page for flushing deallocations to free up memory. set_os_used is called by buf_block_t::initialise (used by buf_page_create_low and buf_LRU_get_free_only. Move MSan (memory sanitizer) directive to be associated with set_os_{un,}used so that the correctness can be determined by instrumentation and test cases rather than relying on OS behaviour at specific times. Remove existing page information poisoning in buf_LRU_block_free_non_file_page. Tested by: Matthias Leich Reviewer: Marko Mäkelä Windows Review: Vladislav Vaintroub
-
- 07 Sep, 2022 8 commits
-
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
- 06 Sep, 2022 9 commits
-
-
Marko Mäkelä authored
trx_undo_rseg_free(): Revert an inadvertent change that was done as part of the merge a42c80bd
-
Thirunarayanan Balathandayuthapani authored
- During shutdown, InnoDB fts fails to update synced doc id when there is only one doc id about to sync. While starting the server, InnoDB fetches the already synced doc id from config table. In the subsequent sync operation, InnoDB fails with DB_DUPLICATE_KEY error.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
In commit 244fdc43 (MDEV-29438) we made sure that if the preceding record is the page infimum record, no more than 8 bytes will be read from it. But, if the data payload of the being-inserted record is less than 8 bytes (this can happen in secondary indexes), we must not compare all 8 bytes. This was caught by a failure of the test gcol.innodb_virtual_basic under MemorySanitizer and some builds with AddressSanitizer.
-
Jan Lindström authored
-
Jan Lindström authored
-
Marko Mäkelä authored
-
Jan Lindström authored
-
Thirunarayanan Balathandayuthapani authored
- This is caused by commit 1bd681c8(MDEV-25506) InnoDB removes the index from the table object before freeing the leaf and non-leaf segments.
-
- 05 Sep, 2022 7 commits
-
-
Daniel Black authored
The resources like uring in MariaDB aren't intended for spawned processes so we restrict access using the io_uring_ring_dontfork liburing library call.
-
Jan Lindström authored
-
Jan Lindström authored
-
Jan Lindström authored
-
Jan Lindström authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
This bug was found in MariaDB Server 10.6 thanks to the OPT_PAGE_CHECKSUM record that was implemented in commit 4179f93d for catching this type of recovery failures. page_cur_insert_rec_low(): If the previous record is the page infimum, correctly limit the end of the record. We do not want to copy data from the header of the page supremum. This omission caused the incorrect recovery of DB_TRX_ID in an instant ALTER TABLE metadata record, because part of the DB_TRX_ID was incorrectly copied from the n_owned of the page supremum, which in recovery would be updated after the copying, but in normal operation would already have been updated at the time the common prefix was being determined. log_phys_t::apply(): If a data page is found to be corrupted, do not flag the log corrupted but instead return a new status APPLIED_CORRUPTED so that the caller may discard all log for this page. We do not want the recovery of unrelated pages to fail in recv_recover_page(). No test case is included, because the known test case would only work in 10.6, and even after this fix, it would trigger another bug in instant ALTER TABLE crash recovery.
-
- 03 Sep, 2022 2 commits
-
-
Andrei authored
The replication unsafe warning's pattern gets corrected in the punctuation part.
-
Brandon Nesterenko authored
MDEV-28530: Revoking privileges from a non-existing user on a master breaks replication on the slave in the presence of replication filters Problem: ======== Replication can break while applying a query log event if its respective command errors on the primary, but is ignored by the replication filter within Grant_tables on the replica. The bug reported by MDEV-28530 shows this with REVOKE ALL PRIVILEGES using a non-existent user. The primary will binlog the REVOKE command with an error code, and the replica will think the command executed with success because the replication filter will ignore the command while accessing the Grant_tables classes. When the replica performs an error check, it sees the difference between the error codes, and replication breaks. Solution: ======== If the replication filter check done by Grant_tables logic ignores the tables, reset thd->slave_expected_error to 0 so that Query_log_event::do_apply_event() can be made aware that the underlying query was ignored when it compares errors. Note that this bug also effects DROP USER if not all users exist in the provided list, and the patch fixes and tests this case. Reviewed By: ============ andrei.elkin@mariadb.com
-
- 02 Sep, 2022 2 commits
-
-
anson1014 authored
These files are currently not being used nor compiled in MariaDB. The use of large lists of 'case' statements in these source files are also not a great way to represent translated strings. This git history can be referred to when a better translation interface can be implemented in the future. Therefore, these files can be removed to cleanup the MariaDB codebase. All new code of the whole pull request, including one or several files that are either new files or modified ones, are contributed under the BSD-new license. I am contributing on behalf of my employer Amazon Web Services, Inc.
-
Alexander Barkov authored
Moving these members: CHARSET_INFO *cs; const MY_UCA_WEIGHT_LEVEL *level; from my_uca_scanner to a new separate structure my_uca_scanner_param. Rationale: During a comparison of two strings these members were initialized two times (one time for every string). After the change these members initialized only one time inside a shared instance of my_uca_scanner_param, and the instance is shared between two scanners (its const address is passed as new a parameter to the underlying scanner functions). This change gives a slight performance improvement (~5%).
-
- 01 Sep, 2022 3 commits
-
-
Thirunarayanan Balathandayuthapani authored
- During rollback of DDL, InnoDB should copy the collation changed column into the index heap
-
Nayuta Yanagisawa authored
Spider converts HA_READ_KEY_EXACT to the equality (=) in the function spider_db_append_key_where_internal() but the conversion is not necessarily correct for tables with prefix indices. We fix the bug by converting HA_READ_KEY_EXACT to 'LIKE "foo%"' when a target key is a prefix key. The fix is partly inspired by FEDERATED. See ha_federated::create_where_from_key() for more details.
-
Marko Mäkelä authored
btr_validate_level(): Invoke mtr.commit() after a failure. This omission was introduced in commit 0b47c126 (MDEV-13542).
-
- 31 Aug, 2022 8 commits
-
-
Marko Mäkelä authored
If multiple threads invoke buf_page_get_low() on a ROW_FORMAT=COMPRESSED page that does not reside in the buffer pool, then one of the threads will end up acquiring an exclusive page latch (the "if" statement right before the new wait_for_unzip: label) and other threads will end up waiting for a shared latch while holding a buffer-fix. The exclusive latch holder would then wait for the buffer-fixes to be released while the buffer-fix holders are waiting for the shared latch. buf_page_get_low(): Prevent the hang that was introduced in commit 9436c778 (MDEV-27058), by releasing the buffer-fix, sleeping some time, and retrying the page lookup.
-
Marko Mäkelä authored
recv_sys_t::free_corrupted_page(): Identify the corrupted page in an error or warning message. buf_page_free(): Just in case, register the page as modified. This should already have been done in mtr_t::free() as part of fseg_free_page_low(). mtr_t::memo_push(): Simplify a condition, so that when invoked with MTR_MEMO_PAGE_X_MODIFY, we will do the right thing. fseg_free_page_low(): Remove an accidentally added return statement that prevented mtr_t::free() from being called. This fixes a regression that was introduced in commit 0b47c126 (MDEV-13542).
-
sawasa authored
Reviewed by: Nayuta Yanagisawa
-
Marko Mäkelä authored
-
Aleksey Midenkov authored
Use temporary constraint names for temporary tables. The constraints are not added to cache (skipped in dict_table_rename_in_cache()). The scheme for temporary constraint names is as follows: for old table: db_name/\xFFconstraint_name for new table: db_name/\xFF\xFFconstraint_name normalize_table_name_c_low(): wrong comparison "less than FN_REFLEN - 1". Somewhere array of FN_REFLEN includes the trailing 0, somewhere array of FN_REFLEN + 1 includes trailing 0, but nowhere array of FN_REFLEN - 1 must include trailing 0.
-
Aleksey Midenkov authored
All InnoDB internal SQL functions should be moved to sql_funcs.h
-
Aleksey Midenkov authored
add_back_last_deleted_lock() was called when the lock was never removed. Lock is removed in finalize_atomic_replace() in close_all_tables_for_name(). finalize_atomic_replace() is done only for successful operation. In non-atomic codepath it drops the table first, if anything fails later we don't need to return back the lock since there is no table now. So the fix is required as well.
-
Aleksey Midenkov authored
Related to MDEV-24176. 1. vcol_fix_expr() generates new tree changes: Type_std_attributes::agg_item_set_converter() does change_item_tree(). The changes are allocated on expr_arena (via Vcol_expr_context as per MDEV-24176). 2. vcol_cleanup_expr() doesn't remove these changes (can be a bug of Type_std_attributes or per design). 3. Atomic CREATE OR REPLACE renames old table to backup (finalize_atomic_replace()). It does that via rename_table_and_triggers() and that closes table share and releases expr_arena root. Hence now we have Item corpses in thd->change_list. 4. PS cleanup phase tries to rollback thd->change_list and accesses already freed item corpses. The fix saves and restores change_list on vcol_fix_expr()/vcol_cleanup_expr().
-