- 19 Nov, 2023 1 commit
-
-
Nikita Malyavin authored
-
- 14 Nov, 2023 3 commits
-
-
Oleksandr Byelkin authored
MariaDB 11.1.3 release
-
Nikita Malyavin authored
-
Nikita Malyavin authored
In case of a non-recovery XA rollback/commit in the same connection, thon->rollback is called instead of rollback_by_xid, Though previously, thd_ha_data was moved to thd->transaction->xid_state.xid in hton->prepare. Like it wasn't enough, XA PREPARE can be skipped upon user and thus we can end up in hton->commit/rollback with and unprepared XA, so checking xid_state.is_explicit_XA is not enough -- we should check xid_state.get_state_code() == XA_PREPARED, which will also guarantee is_explicit_XA() == true.
-
- 08 Nov, 2023 10 commits
-
-
Oleksandr Byelkin authored
-
Oleksandr Byelkin authored
-
Oleksandr Byelkin authored
-
Oleksandr Byelkin authored
-
Oleksandr Byelkin authored
-
Kristian Nielsen authored
Checking for kill with thd_kill_level() or check_killed() runs apc requests, which takes the LOCK_thd_kill mutex. But this is dangerous, as checking for kill needs to be called while holding many different mutexes, and can lead to cyclic mutex dependency and deadlock. But running apc is only "best effort", so skip running the apc if the LOCK_thd_kill is not available. The apc will then be run on next check of kill signal. Signed-off-by: Kristian Nielsen <knielsen@knielsen-hq.org>
-
Oleksandr Byelkin authored
-
Thirunarayanan Balathandayuthapani authored
recv_dblwr_t::find_page(): Tablespace flags validity should be checked only for page 0.
-
Oleksandr Byelkin authored
Correctly supress error issuing when saving value in field for comporison
-
Sergei Petrunia authored
Fix the issue introduced in ec2574fd, fix for MDEV-31983: get_quick_record_count() must set quick_count=0 when it got IMPOSSIBLE_RANGE from test_quick_select. Failure to do so will cause an assertion in 11.0, when the number of quick select rows (0) is checked to be lower than the number of found_records (which is capped up to 1).
-
- 07 Nov, 2023 1 commit
-
-
Sergei Golubchik authored
specify algorithm/lock explicitly, don't depend on server settings
-
- 06 Nov, 2023 1 commit
-
-
Thirunarayanan Balathandayuthapani authored
recv_dblwr_t::find_page(): Tablespace flags validity should be checked only for page 0.
-
- 04 Nov, 2023 3 commits
-
-
Marko Mäkelä authored
fil_space_t::drop(): If the caller is not interested in a detached handle, close it immediately.
-
Nikita Malyavin authored
-
Nikita Malyavin authored
XA support for online alter was totally missing. Tying on binlog_hton made this hardly visible: simply having binlog_commit called from xa_commit made an impression that it will automagically work for online alter, which turns out wrong: all binlog does is writes "XA END" into trx cache and flushes it to a real binlog. In comparison, online alter can't do the same, since online replication happens in a single transaction. Solution: make a dedicated XA support. * Extend struct xid_t with a pointer to Online_alter_cache_list * On prepare: move online alter cache from THD::ha_data to XID passed * On XA commit/rollback: use the online alter cache stored in this XID. This makes us pass xid_cache_element->xid to xa_commit/xa_rollback instead of lex->xid * Use manual memory management for online alter cache list, instead of mem_root allocation, since we don't have mem_root connected to the XA transaction.
-
- 02 Nov, 2023 8 commits
-
-
Nikita Malyavin authored
Use standard handlerton functions for savepoint add/rollback. To identify the savepoint, the pointer passed is used. Every table that has online alter in progress maintains a list of savepoints independently. Also this removes setting a value to a global variable savepoint_alloc_size without any protection, which was a race condition bug.
-
Nikita Malyavin authored
-
Nikita Malyavin authored
Move all the functions dedicated to online alter to a newly created online_alter.cc. With that, make many functions static and simplify the static functions naming. Also, rename binlog_log_row_online_alter -> online_alter_log_row.
-
Nikita Malyavin authored
Assertion `!writer.checksum_len || writer.remains == 0' fails upon concurrent online ALTER and transactions with failing statements and binary log enabled. Also another assertion, `pos != (~(my_off_t) 0)', fails in my_seek, upon reinit_io_cache, on a simplified test. This means that IO_CACHE wasn't properly initialized, or had an error before. The overall problem is a deep interference with the effect of an installed binlog_hton: the assumption about that thd->binlog_get_cache_mngr() is, sufficiently, NULL, when we shouldn't run the binlog part of binlog_commit/binlog_rollback, is wrong: as turns out, sometimes the binlog handlerton can be not installed in current thd, but binlog_commit can be called on behalf of binlog, as in the bug reported. One separate condition found is XA recovery of the orphaned transaction, when binlog_commit is also called, but it has nothing to do with online alter. Solution: Extract online alter operations into a separate handlerton.
-
Nikita Malyavin authored
-
Nikita Malyavin authored
1032 (Can't find record) could be emitted when ALTER TABLE is execued vs concurrent DELETE/UPDATE/other DML that would require search on the online ALTER's side. Innodb's INPLACE, in comparison, creates a new trx_t and uses it in scope of the alter table context. ALTER TABLE class of statements (i.g. CREATE INDEX, OPTIMIZE, etc.) is expected to be unaffected by the value of current session's transaction isolation. This patch save-and-restores thd->tx_isolation and sets in to ISO_REPEATABLE_READ for almost a whole mysql_alter_table duration, to avoid any possible side-effect of it. This should be primarily done before the lock_tables call, to initialize the storage engine's local value correctly during the store_lock() call. sql_table.cc: set thd->tx_isolation to ISO_REPEATABLE_READ in mysql_alter_table and then restore it to the original value in the end of the call.
-
Rucha Deodhar authored
data from a table similar to other JSON functions Analysis: Since we are fetching values for every row ( because we are running SELECT for all rows of a table ), correct value can be only obtained at the time of calling val_int() because it is called to get value for each row. Fix: Set up hash for each row instead of doing it during fixing fields.
-
Oleg Smirnov authored
Pushing down statements to FederatedX engine is implemented by printing either SELECT_LEX or SELECT_LEX_UNIT into a string and sending that string to the engine. In the case of pushing down a single SELECT having a CTE (WITH clause) there was a problem, because normally single SELECTs were printed using SELECT_LEX::print(). But CTEs are stored in the upper unit of the SELECT_LEX - SELECT_LEX_UNIT, so they were not unfolded in the string produced. The solution is to invoke SELECT_LEX_UNIT::print() when pushing down single SELECT statements (but not those which are parts of units), so the possible CTEs are unfolded and printed. Reviewed by Sergei Petrunia (sergey@mariadb.com)
-
- 01 Nov, 2023 1 commit
-
-
Sergei Golubchik authored
-
- 31 Oct, 2023 1 commit
-
-
Marko Mäkelä authored
fil_delete_tablespace(): Invoke fil_space_free_low() directly. This fixes up commit 39e3ca8b
-
- 30 Oct, 2023 4 commits
-
-
Monty authored
Added missing initializer
-
Oleksandr Byelkin authored
-
Sergei Golubchik authored
According to the standart draft UUIDv6 and UUIDv7 values must be compared as opaque raw bytes. Let's only compare with byte-swapping if both values need byte swapping.
-
Sergei Golubchik authored
* modify the test to use different and not monotonous timestamps * rename methods to be unambiguous (for IDE challenged devs) * move byte swap checks into helpers
-
- 28 Oct, 2023 3 commits
-
-
Rex authored
Fixup for MDEV-31983, incorrect test for checking ability to use quick select. Approved by Sergei Petrunia
-
Sergei Petrunia authored
For some reason, in embedded server, a command let $a=`$query` ignores local context. Make a workaround: use SET STATEMENT to set debug_dbug in the same statement.
-
Sergei Golubchik authored
ref->null_rejecting is a key_part_map. we need to check the bit corresponding to the particular store_key. Note that there are no store_key objects for const ref parts.
-
- 27 Oct, 2023 4 commits
-
-
Oleksandr Byelkin authored
-
Sergei Petrunia authored
Make ANALYZE FORMAT=JSON print block-nl-join.r_unpack_ops when analyze_print_r_unpack_ops debug flag is set. Then, add a testcase.
-
Sergei Petrunia authored
Also fix it to work with hashed join (MDEV-30830). Reviewed by: Monty <monty@mariadb.org>
-
Igor Babaev authored
This patch fixes a performance regression introduced in the patch for the bug MDEV-21104. The performance regression could affect queries for which join buffer was used for an outer join such that its on expression from which a conjunctive condition depended only on outer tables can be extracted. If the number of records in the join buffer for which this condition was false greatly exceeded the number of other records the slowdown could be significant. If there is a conjunctive condition extracted from the ON expression depending only on outer tables this condition is evaluated when interesting fields of each survived record of outer tables are put into the join buffer. Each such set of fields for any join operation is supplied with a match flag field used to generate null complemented rows. If the result of the evaluation of the condition is false the flag is set to MATCH_IMPOSSIBLE. When looking in the join buffer for records matching a record of the right operand of the outer join operation the records with such flags are not needed to be unpacked into record buffers for evaluation of on expressions. The patch for MDEV-21104 fixing some problem of wrong results when 'not exists' optimization by mistake broke the code that allowed to ignore records with the match flag set to MATCH_IMPOSSIBLE when looking for matching records. As a result such records were unpacked for each record of the right operand of the outer join operation. This caused significant execution penalty in some cases. One of the test cases added in the patch can be used only for demonstration of the restored performance for the reported query. The second test case is needed to demonstrate the validity of the fix.
-