- 30 Nov, 2022 2 commits
-
-
Marko Mäkelä authored
-
Marko Mäkelä authored
Some builders in our CI, most notably FreeBSD and IBM AIX, do not support sparse files. Also, Microsoft Windows requires special means for creating sparse files. Since these platforms do not run ./mtr --big-test, we will for now simply move the test to a separate file that requires that option.
-
- 28 Nov, 2022 5 commits
-
-
Daniel Black authored
Prevent wsrep files from being installed if WITH_WSREP=OFF. Reviewed by Daniel Black Additionally excluded #include wsrep files and galera* files along with galera/wsrep tests. mysql-test/include/have_wsrep.inc remainds as its used by a few isolated tests. Co-authored-by: Chris Ross <cross2@cisco.com>
-
Marko Mäkelä authored
recv_log_recover_10_4(): Widen the operand of bitwise and to 64 bits, so that the upgrade check will work when the redo log record is located more than 4 gigabytes from the start of the first file.
-
Marko Mäkelä authored
ibuf_init_at_db_start(): Validate the change buffer root page. A later version may stop creating a change buffer, and this validation check will prevent a downgrade from such later versions. ibuf_max_size_update(): If the change buffer was not loaded, do nothing. dict_boot(): Merge the local variable "error" to "err". Ignore failures of ibuf_init_at_db_start() if innodb_force_recovery>=4.
-
Marko Mäkelä authored
In commit a03dd94b as well as mysql/mysql-server@6ef8c343445a26aaf9ebd76d72cf57db44b481f5 the iterations were changed so that the variable "scanned" would remain 0 when the first list item qualifies for eviction. buf_LRU_free_from_unzip_LRU_list(), buf_LRU_free_from_common_LRU_list(): Increment "scanned" when a block can be freed. buf_LRU_free_from_common_LRU_list(): Remove a redundant condition. Whenever this function is invoked, buf_pool.LRU should be nonempty, hence something should always be scanned. Thanks to Jean-François Gagné for reporting this.
-
Daniel Black authored
The very lightest of load would decimate any buffer pool loading to ~1 page per second. As seen in MDEV-29343 this resulting in a load taking over an hour on a high end system. Since MDEV-26547 the fetching is asynchronous, however the loading has equal access to the IO as the SQL queries.
-
- 25 Nov, 2022 3 commits
-
-
Brandon Nesterenko authored
Problem: ======== There is a race condition in binlog.binlog_checkpoint between the binlog background thread creating a binlog checkpoint event, and the connection thread binlogging a query event for creating a table. Because the test outputs the events for validation, the order between these two events can be different, resulting in a failed test. Solution: ======== Instead of outputting the binlog events, use assert_grep to validate the content of the binlog is correct. Reviewed By: ============ Andrei Elkin <andrei.elkin@mariadb.com>
-
Daniel Black authored
A few query cache functions don't use THD pointer so its removed from their interface.
-
Daniel Black authored
Fix the regression introduced in dfb41fdd. In the restructure of mysql_rm_table_no_locks the early condition of !frm_error that enabled non_tmp_table_deleted, and hence the query cache invalidation, was removed. The query_cache_invalidate1(thd, dbnorm) called after mysql_rm_table_no_locks depends on the query cache removal (for unexamined reasons). Under DROP DATABASE, in mysql_rm_table_no_locks, dont_log_query is true preventing the late setting of non_tmp_table_deleted (which retained one of its purposes as a replication deletion of temporary tables, but not query cache invalidation). The non_temp_tables_count however can still be used to invalidate the query cache.
-
- 23 Nov, 2022 1 commit
-
-
Marko Mäkelä authored
The InnoDB change buffer (ibuf.index, stored in the system tablespace) and the change buffer bitmaps in persistent tablespaces could get out of sync with each other: According to the bitmap, no changes exist for a page, while there actually exist buffered entries in ibuf.index. InnoDB performs lazy deletion of buffered changes. When a secondary index leaf page is freed (possibly as part of DROP INDEX), any buffered changes will not be deleted. Instead, they would be deleted on a subsequent buf_page_create_low(). One scenario where InnoDB failed to delete buffered changes is as follows: 1. Some changes were buffered for a secondary index leaf page. 2. The index page had been freed. 3. ibuf_read_merge_pages() invoked ibuf_merge_or_delete_for_page(), which noticed that the page had been freed, and reset the change buffer bits, but did not delete the records from ibuf.index. 4. The index page was reallocated for something else. 5. The index page was removed from the buffer pool. 6. Some changes were buffered for the newly created page. 7. Finally, the buffered changes from both 1. and 6. were merged. 8. The index is corrupted. An alternative outcome is: 4. Shutdown with innodb_fast_shutdown=0 gets into an infinite loop. An alternative scenario is: 3. ibuf_set_bitmap_for_bulk_load() reset the IBUF_BITMAP_BUFFERED bit but did not delete the ibuf.index records for that page number. The shutdown hang was already once fixed in commit d7a24017, refactored for 10.5 in commit 77e8a311 and disabled in commit 310dff5d due to corruption. We will fix this as follows: ibuf_delete_recs(): Delete all ibuf.index entries for the specified page. ibuf_merge_or_delete_for_page(): When the change buffer bitmap bits were set and the page had been freed, and the page does not belong to ibuf.index itself, invoke ibuf_delete_recs(). This prevents the corruption from occurring when a DML operation is allocating a previously freed page for which changes had been buffered. ibuf_set_bitmap_for_bulk_load(): When the change buffer bitmap bits were set, invoke ibuf_delete_recs(). This prevents the corruption from occurring when CREATE INDEX is reusing a previously freed page. ibuf_read_merge_pages(): On slow shutdown, remove the orphan records by invoking ibuf_delete_recs(). This fixes the hang when the change buffer had become corrupted. We also remove the dops[] accounting, because nothing can monitor it during shutdown. We invoke ibuf_delete_recs() if: (a) buf_page_get_gen() failed to load the page or merge changes (b) the page is not a valid index leaf page (c) the page number is out of tablespace bounds srv_shutdown(): Invoke ibuf_max_size_update(0) to ensure that the race condition that motivated us to disable the code in ibuf_read_merge_pages() in commit 310dff5d is no longer possible. That is, during slow shutdown, both the rollback of transactions and the purge of history will return early from ibuf_insert_low(). ibuf_merge_space(), ibuf_delete_for_discarded_space(): Cleanup: Do not allocate a memory heap. This was implemented by Thirunarayanan Balathandayuthapani and tested with innodb_change_buffering_debug=1 by Matthias Leich.
-
- 22 Nov, 2022 2 commits
-
-
Marko Mäkelä authored
-
Marko Mäkelä authored
fil_name_process(): If fil_ibd_load() returns FIL_LOAD_INVALID, display the file name and the tablespace identifier.
-
- 21 Nov, 2022 3 commits
-
-
Marko Mäkelä authored
During crash recovery, recv_sys.apply(true) invokes mlog_init.mark_ibuf_exist(), which in turn may invoke recv_sys.apply(true) via the buf_flush_sync() call in buf_page_get_low(). The simplest fix is to disable the innodb_change_buffering_debug=1 instrumentation during crash recovery.
-
Vladislav Vaintroub authored
-
Vladislav Vaintroub authored
Remove DBUG_ASSERT that depends on timing.
-
- 20 Nov, 2022 3 commits
-
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
- 17 Nov, 2022 1 commit
-
-
Marko Mäkelä authored
The log overwrite warnings are not being reliably emitted in all debug-instrumented environments. It may be related to the scheduling of some InnoDB internal activity, such as the purging of committed transaction history.
-
- 16 Nov, 2022 1 commit
-
-
Sergei Golubchik authored
MDEV-25625 Test sys_vars.wsrep_on_without_provider fails: mysqltest: At line 8: query 'SET GLOBAL wsrep_on=ON' failed with wrong errno 1193: 'Unknown system variable 'wsrep_on'', instead of 1210...
-
- 15 Nov, 2022 2 commits
-
-
Marko Mäkelä authored
If a log checkpoint occurs at the end LSN of mtr.commit_shrink(space) in trx_purge_truncate_history(), then recovery may fail because it could try to apply too old log records to too old copies of undo log pages. This was repeated with the following test: ./mtr innodb.undo_log_truncate,4k,strict_full_crc32 recv_sys_t::trim(): Move some code to the caller. recv_sys_t::apply(): For undo tablespace truncation, discard all old redo log for the undo tablespace, and then truncate the file to the desired size. Tested by: Matthias Leich
-
Alexander Barkov authored
-
- 14 Nov, 2022 5 commits
-
-
Marko Mäkelä authored
ibuf.size, ibuf.max_size: Changed the type to Atomic_relaxed<ulint> in order to fix some (not all) race conditions. ibuf_contract(): Renamed from ibuf_merge_pages(ulint*). ibuf_merge(), ibuf_merge_all(): Removed. srv_shutdown(): Invoke log_free_check() and ibuf_contract(). Even though ibuf_contract() is not writing anything, it will trigger calls of ibuf_merge_or_delete_for_page(), which will write something. Because we cannot invoke log_free_check() at that low level, we must invoke it at the high level. srv_shutdown_print(): Replaces srv_shutdown_print_master_pending(). Report progress and remaining work every 15 seconds. For the change buffer merge, the remaining work is indicated by ibuf.size.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
The InnoDB write-ahead log ib_logfile0 is of fixed size, specified by innodb_log_file_size. If the tail of the log manages to overwrite the head (latest checkpoint) of the log, crash recovery will be broken. Let us clarify the messages about this, including adding a message on the completion of a log checkpoint that notes that the dangerous situation is over. To reproduce the dangerous scenario, we will introduce the debug injection label ib_log_checkpoint_avoid_hard, which will avoid log checkpoints even harder than the previous ib_log_checkpoint_avoid. log_t::overwrite_warned: The first known dangerous log sequence number. Set in log_close() and cleared in log_write_checkpoint_info(), which will output a "Crash recovery was broken" message.
-
Marko Mäkelä authored
srv_shutdown(): Do not call log_free_check(), because it will now be repeatedly called by ibuf_merge_all(). Do not call srv_sync_log_buffer_in_background(), because we do not actually care about durability during shutdown. Log writes will already be triggered by buf_flush_page_cleaner() for writing back modified pages, possibly by log_free_check(). logs_empty_and_mark_files_at_shutdown(): Clean up a condition. This function is the caller of srv_shutdown(), and it will ensure that the log and the buffer pool will be in clean state before shutdown.
-
- 13 Nov, 2022 1 commit
-
-
Dominik Hassler authored
-
- 10 Nov, 2022 1 commit
-
-
Marko Mäkelä authored
mtr_t::release_page(): Remove. The function became unused in commit 56f6dab1 when the call was replaced with a call to mtr_t::memo_release().
-
- 09 Nov, 2022 5 commits
-
-
asklavou authored
-
asklavou authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
This is a backport of commit 8b6a308e from MariaDB Server 10.6.11. No attempt to reproduce the hang in earlier an earlier version of MariaDB Server than 10.6 was made. In each caller of fseg_n_reserved_pages() except ibuf_init_at_db_start() which is a special case for ibuf.index at database startup, we must hold an index latch that prevents concurrent allocation or freeing of index pages. Any operation that allocates or free pages that belong to an index tree must first acquire an index latch in non-shared mode, and while holding that, acquire an index root page latch in non-shared mode. btr_get_size(), btr_get_size_and_reserved(): Assert that a strong enough index latch is being held. dict_stats_update_transient_for_index(), dict_stats_analyze_index(): Acquire a strong enough index latch. These operations had followed the same order of acquiring latches in every InnoDB version since the very beginning (commit c533308a). The hang was introduced in commit 2e814d47 which imported mysql/mysql-server@ac74632293bea967b352d1b472abedeeaa921b98 which failed to strengthen the locking requirements of the function btr_get_size().
-
- 08 Nov, 2022 5 commits
-
-
Marko Mäkelä authored
-
Andrew Hutchings authored
* MDEV-29397 Fix note turning into error ODBC Rewind triggered an error with no SQL, but this is sometimes a valid condition (as can be seen with other classes). Setting this to a 0 return stops errors firing when they shouldn't. Also fixes ASAN hits from in MDEV-29687 tabext.cpp.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
Let us avoid excessive allocation of explicit record locks.
-