- 22 Jul, 2021 9 commits
-
-
Marko Mäkelä authored
In the InnoDB data files, we allocate 32 bits for tablespace identifiers and page numbers as well as tablespace flags. But, in main memory data structures we allocate 32 or 64 bits, depending on the register width of the processor. Let us always use 32-bit fields to eliminate a mismatch and reduce the memory footprint on 64-bit systems.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
MDEV-26193 exposed a race condition in the test mariabackup.log_page_corruption by no longer waking up purge tasks on every transaction commit. (Note that there never was a guarantee that the purge tasks would actually run as quickly as the test expected it to happen; that would depend on the CPU load.)
-
Marko Mäkelä authored
Starting with commit 6e12ebd4 (MDEV-25062), srv_wake_purge_thread_if_not_active() became more expensive operation, especially on NUMA systems, because instead of reading an atomic global variable trx_sys.rseg_history_len we are traversing up to 128 cache lines in trx_sys.history_exists(). trx_t::commit_cleanup(): Do not wake up purge at all. We will wake up purge about once per second in srv_master_callback(). srv_master_do_active_tasks(), srv_master_do_idle_tasks(): Move some duplicated code to srv_master_callback(). srv_master_callback(): Invoke purge_coordinator_timer_callback() to ensure that purge will be periodically woken up, even if the latest execution of trx_t::commit_cleanup() allowed the purge view to advance but did not wake up purge. Do not call log_free_check(), because every thread that is going to generate redo log is supposed to call that function anyway, before acquiring any page latches. Additional calls to the function every few seconds should not make any difference. srv_shutdown_threads(): Ensure that srv_shutdown_state can be at most SRV_SHUTDOWN_INITIATED in srv_master_callback(), by first invoking srv_master_timer.reset() before changing srv_shutdown_state. (Note: We first terminate the srv_master_callback and only then terminate the purge tasks. Thus, the purge subsystem should exist when srv_master_callback() invokes purge_coordinator_timer_callback() if it was initiated in the first place.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
It is implementation-defined whether alignment requirements that are larger than std::max_align_t (typically 8 or 16 bytes) will be honored by the compiler and linker. It turns out that on IBM AIX, both alignas() and MY_ALIGNED() only guarantees alignment up to 16 bytes. For some data structures, specifying alignment to the CPU cache line size (typically 64 or 128 bytes) is a mere performance optimization, and we do not really care whether the requested alignment is guaranteed. But, for the correct operation of direct I/O, we do require that the buffers be aligned at a block size boundary. field_ref_zero: Define as a pointer, not an array. For innochecksum, we can make this point to unaligned memory; for anything else, we will allocate an aligned buffer from the heap. This buffer will be used for overwriting freed data pages when innodb_immediate_scrub_data_uncompressed=ON. And exactly that code hit an assertion failure on AIX, in the test innodb.innodb_scrub. log_sys.checkpoint_buf: Define as a pointer to aligned memory that is allocated from heap. log_t::file::write_header_durable(): Reuse log_sys.checkpoint_buf instead of trying to allocate an aligned buffer from the stack.
-
Marko Mäkelä authored
The lazy deletion of clean blocks from buf_pool.flush_list that was introduced in commit 6441bc61 (MDEV-25113) introduced a race condition around the function buf_flush_relocate_on_flush_list(). The test innodb_zip.wl5522_debug_zip as well as the buffer pool resizing tests would occasionally fail in debug builds due to buf_pool.flush_list.count disagreeing with the actual length of the doubly-linked list. The safe procedure for relocating a block in buf_pool.flush_list should be as follows, now that we implement lazy deletion from buf_pool.flush_list: 1. Acquire buf_pool.mutex. 2. Acquire the exclusive buf_pool.page_hash.latch. 3. Acquire buf_pool.flush_list_mutex. 4. Copy the block descriptor. 5. Invoke buf_flush_relocate_on_flush_list(). 6. Release buf_pool.flush_list_mutex. buf_flush_relocate_on_flush_list(): Assert that buf_pool.flush_list_mutex is being held. Invoke buf_page_t::oldest_modification() only once, using std::memory_order_relaxed, now that the mutex protects us. buf_LRU_free_page(), buf_LRU_block_remove_hashed(): Avoid an unlock-lock cycle on hash_lock. (We must not acquire hash_lock while already holding buf_pool.flush_list_mutex, because that could lead to a deadlock due to latching order violation.)
-
nia authored
pmull_supported is not necessarily defined before crc32c_aarch64 Signed-off-by:
Nia Alarie <nia@NetBSD.org>
-
Daniel Black authored
-
- 21 Jul, 2021 6 commits
-
-
Eric Herman authored
This patch implements JSON_EQUALS SQL function. The function takes advantage of the json_normalize functionality and does the following: norm_a = json_normalize(a) norm_b = json_normalize(b) return strcmp(norm_a, norm_b) Co-authored-by:
Vicențiu Ciorbaru <vicentiu@mariadb.org>
-
Eric Herman authored
This patch implements JSON_NORMALIZE SQL function. Co-authored-by:
Vicențiu Ciorbaru <vicentiu@mariadb.org>
-
Eric Herman authored
This patch implements a library for normalizing json documents. The algorithm is: * Recursively sort json keys according to utf8mb4_bin collation. * Normalize numbers to be of the form [-]<digit>.<frac>E<exponent> * All unneeded whitespace and line endings are removed. * Arrays are not sorted. Co-authored-by:
Vicențiu Ciorbaru <vicentiu@mariadb.org>
-
Eric Herman authored
-
Dmitry Shulga authored
-
Daniel Black authored
SHOW PLUGINS has a more complete view of the installed plugins into the server. The mysql.user is a compatibility view that doesn't show the complete authentication picture. Use global_priv. Add `show create user` for default users to more clearly represent its contents.
-
- 20 Jul, 2021 7 commits
-
-
Marko Mäkelä authored
In MDEV-26029 the intention was that page_compressed tables would be written as regular (non-sparse) files if the file is stored on a thinly provisioned block device. We were incorrectly requesting os_file_set_size() to create sparse files even on thinly provisioned storage. fil_space_extend_must_retry(): Extend the file in the correct fashion. fil_ibd_create(), recv_sys_t::recover_deferred(): Only create a sparse file for page_compressed tables if thin provisioning is not detected.
-
Marko Mäkelä authored
fil_ibd_create(): Remove code that should have been removed in commit 86dc7b4d already. We no longer wrote an initialized page to the file, but we would still allocate a page image in memory and write it. xb_space_create_file(): Remove an unnecessary page write. (This is a functional change for Mariabackup.)
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
We only support the instantaneous removal of the NOT NULL attribute for ROW_FORMAT=REDUNDANT tables.
-
- 19 Jul, 2021 7 commits
-
-
Dmitry Shulga authored
There were several places where a statement delimiter missed so such statements were interpreted as multi-statements and expectedly failed in PS mode. An appropriate statement delimiters have been added to fix the issues. Addinitinally, the operators --enable_prepare_warnings/--disable_prepare_warnings have been added around statements that use depricated syntax SELECT INTO to don't miss warnings.
-
Vicențiu Ciorbaru authored
-
Monty authored
There where several different implementations of is_top_level_item(), with different variable names and tests. In some cases the code used 'is_top_level_item()' as a test, in other cases it accessed the variable directrly. This patch makes all usage of 'top_level_item' uniform. The new implementation stores the 'is_tol_level_item()' flag as part of base_flags. This saves 7 bytes in all items that previously stored the flag in it's own bool. I had to keep 'top_level_item()' virtual to ensure that Item_bool_const item's will not be updated. 'is_top_level_item()' is not virtual anymore.
-
Eugene Kosov authored
-
Vicențiu Ciorbaru authored
Conflicts/Replaces mariadb-client-core mariadb-client, cover 10.6 Also update salsa-ci to appropriately name tests as upgrades to 10.7
-
zwang28 authored
The performance_schema data related to instrument "wait/synch/mutex/threadpool/group_mutex" was incorrect. The root cause is the group_mutex was initialized in thread_group_init before registerd in PSI_register(mutex). The fix is to put PSI_register before thread_group_init, which ensures the right order.
-
Dmitry Shulga authored
The root cause of test failure is that on optimization of the statement clause 'order by (select 1)' in outer select is done incorrect in case the statement run in PS mode.
-
- 18 Jul, 2021 3 commits
-
-
Monty authored
This is useful for thing like Item_true and Item_false that we allocated and initalize once and want to ensure that nothing can change them Main changes: - Memory protection is achived by allocating memory with mmap() and protect it from write with mprotect() - init_alloc_root(...,MY_ROOT_USE_MPROTECT) will create a memroot that one can later use with protect_root() to turn it read only or turn it back to read-write. All allocations to this memroot is done with mmap() to ensure page alligned allocations. - alloc_root() code was rearranged to combine normal and valgrind code. - init_alloc_root() now changes block size to be power of 2's, to get less memory fragmentation. - Changed MEM_ROOT structure to make it smaller. Also renamed MEM_ROOT m_psi_key to psi_key. - Moved MY_THREAD_SPECIFIC marker in MEM_ROOT from block size (old hack) to flags. - Added global variable my_system_page_size. This is initialized at startup.
-
Monty authored
This is a prerequisite for moving them to a readonly segment.
-
Vicențiu Ciorbaru authored
Update debian changes to 10.7 to enable debian packaging to work again.
-
- 16 Jul, 2021 6 commits
-
-
Vladislav Vaintroub authored
COM_STMT_BULK_EXECUTE, just like COM_STMT_EXECUTE can also skip result set metadata, if bulk is used with statement that returns result set, i.e INSERT/DELETE RETURNING.
-
Vladislav Vaintroub authored
-
Sergei Golubchik authored
commit the forgotten result file followup for b81803f0
-
Sergei Golubchik authored
still cannot be enabled permanently, but at least they could be run manually, if needed
-
Vladislav Vaintroub authored
Also, remove comparison lsn > flush/write lsn, prior to calling log_write_up_to. The checks and early returns are part of this function.
-
Dmitry Shulga authored
In case the test main.opt_trace is run with the option --ps-protocol it fails since querying from the table INFORMATION_SCHEMA.OPTIMIZER_TRACE produces an output that differed from the expected one in the following way: @@ -2829,14 +2829,6 @@ } }, { - "transformation": { - "select_id": 2, - "from": "IN (SELECT)", - "to": "semijoin", - "chosen": true - } - }, - { "expanded_query": "/* select#2 */ select t10.pk from t10" } The table INFORMATION_SCHEMA.OPTIMIZER_TRACE is filled when optimizer_trace is on. The reason of missing above mentioned pieces in query result set is that the C++ macros OPT_TRACE_TRANSFORM(thd, trace_wrapper, trace_transform, select_lex->select_number, "IN (SELECT)", "semijoin"); located in the standalone function check_and_do_in_subquery_rewrites() is executed twice in case the statement explain extended select * from t1 where a in (select pk from t10); is run in PS mode. The first time it is executed on PREPARE phase and the second time on EXECUTE phase. The output produced by this macros on EXECUTE phase rewrites the output produced on PREPARE phase. In result test failed in case it was run in PS mode. To make test output uniform regardless the test is run in PS or normal mode the operator '--source include/protocol.inc' has been added to the file opt_trace.test and extra opt_trace,ps.rdiff file has been added. Additionally, added operators --enable_prepared_warnings/--disable_prepared_warnings in order to store warnings in result file that received on PREPARE phase during running the statemement 'SELECT INTO'.
-
- 15 Jul, 2021 2 commits
-
-
Oleksandr Byelkin authored
The problem is that array binding uses net buffer to read parameters for each execution while each execiting with RETURNING write in the same buffer. Solution is to allocate new net buffer to avoid changing buffer we are reading from.
-
Rucha Deodhar authored
This reverts commit f88d130e.
-