- 26 Jul, 2023 2 commits
-
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
- 25 Jul, 2023 1 commit
-
-
Marko Mäkelä authored
The main problem is that at ever since commit aaef2e1d removed the function buf_wait_for_read(), it is not safe to invoke buf_page_get_low() with RW_NO_LATCH, that is, only buffer-fixing the page. If a page read (or decryption or decompression) is in progress, there would be a race condition when executing consistency checks, and a page would wrongly be flagged as corrupted. Furthermore, if the page is actually corrupted and the initial access to it was with RW_NO_LATCH (only buffer-fixing), the page read handler would likely end up in an infinite loop in buf_pool_t::corrupted_evict(). It is not safe to invoke mtr_t::upgrade_buffer_fix() on a block on which a page latch was not initially acquired in buf_page_get_low(). btr_block_reget(): Remove the constant parameter rw_latch=RW_X_LATCH. btr_block_get(): Assert that RW_NO_LATCH is not being used, and change the parameter type of rw_latch. btr_pcur_move_to_next_page(), innobase_table_is_empty(): Adjust for the parameter type change of btr_block_get(). btr_root_block_get(): If mode==RW_NO_LATCH, do not check the integrity of the page, because it is not safe to do so. btr_page_alloc_low(), btr_page_free(): If the root page latch is not previously held by the mini-transaction, invoke btr_root_block_get() again with the proper latching mode. btr_latch_prev(): Helper function to safely acquire a latch on a preceding sibling page while holding a latch on a B-tree page. To avoid deadlocks, we must not wait for the latch while holding a latch on the current page, because another thread may be waiting for our page latch when moving to the next page from our preceding sibling page. If s_lock_try() or x_lock_try() on the preceding page fails, we must release the current page latch, and wait for the latch on the preceding page as well as the current page, in that order. Page splits or merges will be prevented by the parent page latch that we are holding. btr_cur_t::search_leaf(): Make use of btr_latch_prev(). btr_cur_t::open_leaf(): Make use of btr_latch_prev(). Do not invoke mtr_t::upgrade_buffer_fix() (when latch_mode == BTR_MODIFY_TREE), because we will already have acquired all page latches upfront. btr_cur_t::pessimistic_search_leaf(): Do acquire an exclusive index latch before accessing the page. Make use of btr_latch_prev().
-
- 24 Jul, 2023 1 commit
-
-
Marko Mäkelä authored
row_ins_sec_index_entry_low(): Correct a condition that was inadvertently inverted in commit 89ec4b53 (MDEV-29603). We are not supposed to buffer INSERT operations into unique indexes, because duplicate key values would not be checked for. It is only allowed when using unique_checks=0, and in that case the user is supposed to guarantee that there are no duplicates.
-
- 21 Jul, 2023 1 commit
-
-
Sergei Petrunia authored
ANALYZE FORMAT=JSON output now includes table.r_engine_stats which has the engine statistics. Only non-zero members are printed. Internally: EXPLAIN data structures Explain_table_acccess and Explain_update now have handler* handler_for_stats pointer. It is used to read statistics from handler_for_stats->handler_stats. The following applies only to 10.9+, backport doesn't use it: Explain data structures exist after the tables are closed. We avoid walking invalid pointers using this: - SQL layer calls Explain_query::notify_tables_are_closed() before closing tables. - After that call, printing of JSON output is disabled. Non-JSON output can be printed but we don't access handler_for_stats when doing that.
-
- 20 Jul, 2023 1 commit
-
-
Alexander Barkov authored
MDEV-30003 Assertion failure upon 2nd execution of SP trying to set collation on non-existing database The DBUG_ASSER in HA_CREATE_INFO::resolve_to_charset_collation_context() didn't take into account that the second execution is possible not only during a prepared EXECUTE, but also during a CALL.
-
- 17 Jul, 2023 1 commit
-
-
Alexander Barkov authored
The problem was earlier fixed by MDEV-30805. Adding an MTR test only.
-
- 13 Jul, 2023 2 commits
-
-
Alexey Botchkov authored
'defaults' made into 'constexpr' variables.
-
Monty authored
This issue could only be noticed in very extraordinary circumstances when trying to rename a temporary table that is not in the file system. The issue was found when I temporarly disabled check_if_frm_exists() while searching for another bug.
-
- 12 Jul, 2023 6 commits
-
-
Sergei Petrunia authored
Item_func_tochar::check_arguments() didn't check if its arguments each had one column. Failing to make this check and proceeding would eventually cause either an assertion failure or the execution would reach "MY_ASSERT_UNREACHABLE();" which would produce a crash with a misleading stack trace. * Fixed Item_func_tochar::check_arguments() to do the required check. * Also fixed MY_ASSERT_UNREACHABLE() to terminate the program. Just "executing" __builtin_unreachable() used to cause "undefined results", which in my experience was a crash with corrupted stack trace.
-
Tuukka Pasanen authored
-
Tuukka Pasanen authored
MariaDB Compression pluging pacakages mariadb-plugin-provider-* have only one shared object and those are not linked against libc and it's intentional so supressing error library-not-linked-against-libc There is needed dependency for Systemd DH plugin which makes error missing-build-dependency-for-dh-addon obsolette. Reworked debian/control that makes most of version-substvar-for-external-package error not correct so remove those that are not available anymore and update those that are still relevant. NOTE TO MERGER: This is only up-to MariaDB 10.10.
-
Tuukka Pasanen authored
Lintian erros with missing-build-dependency-for-dh-addon systemd (*) One of these premises should be installed: debhelper:any (>= 9.20160709~) debhelper-compat:any dh-sequence-systemd:any dh-systemd:any As there is package debhelper version 10 or higher required for build. This is false positive Lintian error which should be supressed.. NOTE TO MERGER: This is only up-to MariaDB 10.10.
-
Tuukka Pasanen authored
Salsa-CI file has got in malfunction state and if fails with YAML error: mariadb-10.3 with Buster backports upgrade job: undefined need: build buster-backports Also remove Salsa-CI MariaDB 10.3 double upgrade target. There is also several upgrades which makes test green again. NOTE TO MERGER: This is only up-to MariaDB 10.10. Remove
-
Tuukka Pasanen authored
In debian/control file there is several mariadb-*-10.9 Conflicts or Replaces that which are not neede on MariaDB 10.9 anymore as there is not suffix anymore. Package libmariadbclient-dev is part of Ubuntu and it's not build with official package so there can't be variable: '${source:Version}' which is used with packages that are part of package. NOTE TO MERGER: This is only up-to MariaDB 10.10.
-
- 10 Jul, 2023 3 commits
-
-
Vlad Lesin authored
Before MDEV-24671, the wait time was derived from my_interval_timer() / 1000 (nanoseconds converted to microseconds, and not microseconds to milliseconds like I must have assumed). The lock_sys.wait_time and lock_sys.wait_time_max are already in milliseconds; we should not divide them by 1000. In MDEV-24738 the millisecond counts lock_sys.wait_time and lock_sys.wait_time_max were changed to a 32-bit type. That would overflow in 49.7 days. Keep using a 64-bit type for those millisecond counters. Reviewed by: Marko Mäkelä
-
Marko Mäkelä authored
-
Marko Mäkelä authored
recv_log_recover_10_5(): Make reads aligned by 4096 bytes, to avoid any trouble in case the file was opened in O_DIRECT mode and the physical block size is larger than 512 bytes. Because innodb_log_file_size used to be defined in whole megabytes, reading multiples of 4096 bytes instead of 512 should not be an issue.
-
- 07 Jul, 2023 2 commits
-
-
Monty authored
This is because some plan changes because of views
-
Monty authored
The new statistics is enabled by adding the "engine", "innodb" or "full" option to --log-slow-verbosity Example output: # Pages_accessed: 184 Pages_read: 95 Pages_updated: 0 Old_rows_read: 1 # Pages_read_time: 17.0204 Engine_time: 248.1297 Page_read_time is time doing physical reads inside a storage engine. (Writes cannot be tracked as these are usually done in the background). Engine_time is the time spent inside the storage engine for the full duration of the read/write/update calls. It uses the same code as 'analyze statement' for calculating the time spent. The engine statistics is done with a generic interface that should be easy for any engine to use. It can also easily be extended to provide even more statistics. Currently only InnoDB has counters for Pages_% and Undo_% status. Engine_time works for all engines. Implementation details: class ha_handler_stats holds all engine stats. This class is included in handler and THD classes. While a query is running, all statistics is updated in the handler. In close_thread_tables() the statistics is added to the THD. handler::handler_stats is a pointer to where statistics should be collected. This is set to point to handler::active_handler_stats if stats are requested. If not, it is set to 0. handler_stats has also an element, 'active' that is 1 if stats are requested. This is to allow engines to avoid doing any 'if's while updating the statistics. Cloned or partition tables have the pointer set to the base table if status are requested. There is a small performance impact when using --log-slow-verbosity=engine: - All engine calls in 'select' will be timed. - IO calls for InnoDB reads will be timed. - Incrementation of counters are done on local variables and accesses are inline, so these should have very little impact. - Statistics has to be reset for each statement for the THD and each used handler. This is only 40 bytes, which should be neglectable. - For partition tables we have to loop over all partitions to update the handler_status as part of table_init(). Can be optimized in the future to only do this is log-slow-verbosity changes. For this to work we have to update handler_status for all opened partitions and also for all partitions opened in the future. Other things: - Added options 'engine' and 'full' to log-slow-verbosity. - Some of the new files in the test suite comes from Percona server, which has similar status information. - buf_page_optimistic_get(): Do not increment any counter, since we are only validating a pointer, not performing any buf_pool.page_hash lookup. - Added THD argument to save_explain_data_intern(). - Switched arguments for save_explain_.*_data() to have always THD first (generates better code as other functions also have THD first).
-
- 06 Jul, 2023 1 commit
-
-
Sergei Golubchik authored
on aarch64 `char` by default is unsigned for performance reasons. let's adjust checks to work for both signed and unsigned `char` followup for ef84f813
-
- 05 Jul, 2023 10 commits
-
-
Sergei Golubchik authored
optimizer implicitly assumed that if `a` in `a=b` is not NULL, then it's safe to convert `a` to the type of `b` and search the result in the index(b). which is not always the case, as converting a non-null value to a different type might produce NULL. And searching for NULL in the index might find NULL there, so NULL will be equal to NULL, making `a=b` behave as if it was `a<=>b`
-
Sergei Golubchik authored
* UUIDs version >= 6 are now stored without byte-swapping * UUIDs with version >=8 and variant=0 are now considered invalid * old tables are supported * old (always byte swapped) and new (swapped for version < 6) UUIDs can be compared and converted transparently
-
Sergei Golubchik authored
this is a necessary prerequisite for making UUID itself a template
-
Sergei Golubchik authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
fil_node_open_file_low(): Always acquire an advisory lock on the system tablespace. Originally, we already did this in SysTablespace::open_file(), but SysTablespace::open_or_create() would release those locks when it is closing the file handles. This is a 10.5+ specific follow up to commit 0ee1082b (MDEV-28495). Thanks to Daniel Black for verifying this bug.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
SysTablespace::set_size(): Use correct 64-bit arithmetics for reporting the initial size of the InnoDB system or temporary tablespace.
-
Marko Mäkelä authored
When InnoDB attempts to buffer a change operation of a secondary index leaf page (to insert, delete-mark or remove a record) and the change buffer is too large, InnoDB used to trigger a change buffer merge that could affect any tables. This could lead to huge variance in system throughput and potentially unpredictable crashes, in case the change buffer was corrupted and a crash occurred while attempting to merge changes to a table that is not being accessed by the current SQL statement. ibuf_insert_low(): Simply return DB_STRONG_FAIL when the maximum size of the change buffer is exceeded. ibuf_contract_after_insert(): Remove. ibuf_get_merge_page_nos_func(): Remove a constant parameter. The function ibuf_contract() will be our only caller, during shutdown with innodb_fast_shutdown=0.
-
- 04 Jul, 2023 9 commits
-
-
Sergei Golubchik authored
debug-only issue. the test was doing set debug_sync='now SIGNAL go3'; ... set debug_sync='reset'; which translated into add "go3" to the hash of active signals pthread_broadcast to wake up waiting threads ... clear the hash of active signals as a result a waiting thread was awoken, but the hash was emptied before the thread checked if its signal was in the hash. so the thread didn't find its signal and went back to sleep. let's wait until the awoken thread has completely finished disconnecting and was added to the thread cache.
-
Sergei Golubchik authored
debug_sync refactoring introduced a statically instantiated object debug_sync_global of the structure st_debug_sync_globals. st_debug_sync_globals includes Hash_set<> which allocates memory in the constructor. sf_malloc() calls _my_thread_var()->dbug_id which is pthread_getspecific(THR_KEY_mysys), and THR_KEY_mysys is 0 before pthread_key_create(). pthread_getspecific(0) returns a valid pointer, not EINVAL. And safemalloc dereferences it. let's statically initialize THR_KEY_mysys to -1, this makes pthread_getspecific(THR_KEY_mysys) to fail before pthread_key_create() is called. followup for 8885225d
-
Sergei Golubchik authored
-
Sergei Golubchik authored
now the main class is the Type_handler_fbt. It contains everything and generates objects of all other classes as needed.
-
Sergei Golubchik authored
it was calling Fbt::to_string(char*, size_t) which didn't exist
-
Sergei Golubchik authored
-
Sergei Golubchik authored
it's a hard-coded geometry-specific method, move it into geometry-specific function. Will go away in the future.
-
Sergei Golubchik authored
-
Sergei Golubchik authored
add the test case
-