Console View
|
Categories: connectors experimental galera main |
|
| connectors | experimental | galera | main | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Monty
monty@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-38246 aria_read index failed on encrypted database during backup The backup of encrypted Aria tables was not supported. Added support for this. One complication is that the page checksum is for the not encrypted page. To be able to verify the checksum I have to temporarly decrypt the page. In the backup we store the encrypted pages. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Nikita Malyavin
nikitamalyavin@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-37957 Assertion lock_type >= TL_READ_SKIP_LOCKED failed on HANDLER ...READ Don't set lock_type to TL_IGNORE: open_temporary_table intentionally sets it to TL_WRITE to "simulate locking". |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Nikita Malyavin
nikitamalyavin@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-37850 Wrong error on DROP TABLE GTT after DROP DATABASE Turns out that temporary tables are not dropped as part of DROP DATABASE. This patch implements dropping child global temporary tables for the currently dropping database. That is, if the child table was opened in this connection, it will be dropped together with the parent table. If another connection attempts to drop the database, it will wait while the table is in use. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Nikita Malyavin
nikitamalyavin@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-38448 assertion ...tdc->ref_count > 0 failed on LOCK gtt+open error If open_global_temporary_table failed, a goto was to an incorrect place. In locked_tables_mode, an extra acquire didn't happen, so a release on error shouldn't have happened as well (i.e. goto err_lock). That is, in locked_tables_mode, just return immediately on error. The easiest way to reproduce it was with DML while pseudo_slave_mode=1, but actually any error inside open_global_temporary_table would do. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sergei Golubchik
serg@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| fix tests for --ps: GTT | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Vladislav Vaintroub
vvaintroub@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-38498 mariadb-dump -dir doesn't convert database names Similar to MDEV-37483, use file name encoding for dbnames to create directories. Adapt mariadb-import to convert the names back. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Nikita Malyavin
nikitamalyavin@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-38480 GTT: Aria gets error HA_ERR_CRASHED_ON_USAGE after TRUNCATE Do not call HA_EXTRA_PREPARE_FOR_DROP for the parent table |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Monty
monty@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
squash! 7b54e0496526d366d4acc16530ea215b06ae92f6 MDEV-36501 EITS data is lost after failed attempt to CREATE OR REPLACE table MDEV-36493 Atomic CREATE OR REPLACE ... SELECT blocks InnoDB purge Other things: - EITS data is preserved if create or replace fails if drop_before_create_or_replace=OFF. If ON, then create or replace will drop EITS before the drop of the original table (as before). |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Michael Widenius
monty@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-19683 Add support for Oracle TO_DATE() Syntax: TO_DATE(string_expression [DEFAULT string_expression ON CONVERSION ERROR], format_string [,NLS_FORMAT_STRING]) The format_string has the same format elements as TO_CHAR(), except a few elements that are not supported/usable for TO_DATE(). TO_DATE() returns a datetime or date value, depending on if the format element FF is used. Allowed separators, same as TO_CHAR(): space, tab and any of !#%'()*+,-./:;<=> '&' can also be used if next character is not a character a-z or A-Z "text' indicates a text string that is verbatim in the format. One cannot use " as a separator. Format elements supported by TO_DATE(): AD Anno Domini ("in the year of the Lord") AD_DOT Anno Domini ("in the year of the Lord") AM Meridian indicator (Before midday) AM_DOT Meridian indicator (Before midday) DAY Name of day DD Day (1-31) DDD Day of year (1-336) DY Abbreviated name of day FF[1-6] Fractional seconds HH Hour (1-12) HH12 Hour (1-12) HH24 Hour (0-23) MI Minutes (0-59) MM Month (1-12) MON Abbreviated name of month MONTH Name of Month PM Meridian indicator (After midday) PM_DOT Meridian indicator (After midday) RR 20th century dates in the 21st century. 2 digits 50-99 is assumed from 2000, 0-49 is assumed from 1900. RRRR 20th century dates in the 21st century. 4 digits SS Seconds SYYYY Signed 4 digit year; MariaDB only supports positive years Y 1 digit year YY 2 digits year YYY 3 digits year YYYY 4 digits year Note that if there is a missing part of the date, the current date is used! For example if 'MM-DD HH-MM-SS' then the current year will be used. (Oracle behaviour) Not supported options: BC, D, DL, DS, E, EE, FM, FX, RM, SSSSS, TS, TZD, TZH, TZR, X,SY BC is not supported by MariaDB datetime. Most of the other are exotic formats, format modifies other things that does not make in MariaDB as we return datetime or datetime with fractions, not string. D (day-of-week) is not supported as it is not clear exactly how it would map to MariaDB. This element depends on the NLS territory of the session. Extensions / differences compared to Oracle; - MariaDB supports FF (fractional seconds). If FF[£] is used, then TO_DATE will return a datetime with # of subseconds. If FF is not used a datetime will be returned. - Names can be shortened to it's unique prefix. For example January and Ja works fine. - No error if the date string is shorter format_string. This is useful to get a date from a mixed set of strings in date or datetime format. Oracle gives an error if date string is too short. - MariaDB supports short locales as language names - NLS_DATE_FORMAT can use both " and ' for quoting. New formats handled by TO_CHAR(): FF[1-6] Fractional seconds DDD Daynumber 1-366 IW Week 1-53 according to ISO 8601 I 1 digit year according to ISO 8601 IY 2 digit year according to ISO 8601 IYY 3 digit year according to ISO 8601 IYYY 4 digit year according to ISO 8601 SYYY 4 digit year according to ISO 8601 (Oracle can do signed) Supported NLS_FORMAT_STRING options are: NLS_CALENDAR=GREGORIAN NLS_DATE_LANGUAGE=language Support languages are: - All MariaDB short locales, like en_AU. - The following Oracle language names: ALBANIAN, AMERICAN, ARABIC, BASQUE, BELARUSIAN, BRAZILIAN PORTUGUESE BULGARIAN, CANADIAN FRENCH, CATALAN, CROATIAN, CYRILLIC SERBIAN CZECH, DANISH, DUTCH, EGYPTIAN, ENGLISH, ESTONIAN, FINNISH, FRENCH, GERMAN, GREEK, HEBREW, HINDI, HUNGARIAN, ICELANDIC, INDONESIAN ITALIAN, JAPANESE, KANNADA, KOREAN, LATIN AMERICAN SPANISH, LATVIAN, LITHUANIAN, MACEDONIAN, MALAY, MEXICAN SPANISH, NORWEGIAN, POLISH, PORTUGUESE, ROMANIAN, RUSSIAN, SIMPLIFIED CHINESE, SLOVAK, SLOVENIAN, SPANISH, SWAHILI, SWEDISH, TAMIL, THAI, TRADITIONAL CHINESE, TURKISH, UKRAINIAN, URDU, VIETNAMESE Development bugs fixed: MDEV-38403 Server crashes in Item_func_to_date::fix_length_and_dec upon using an invalid argument MDEV-38400 compat/oracle.func_to_date fails with PS protocol and cursor protocol (Fixed by Serg) MDEV-38404 TO_DATE: MTR coverage omissions, round 1 MDEV-38509 TO_DATE: AD_DOT does not appear to be supported MDEV-38513 TO_DATE: NULL value for format string causes assertion failure |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Vlad Lesin
vlad_lesin@mail.ru |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-31956 SSD based InnoDB buffer pool extension Fix some tests. Make ext_buf_pool test more stable avoiding race conditions for read/write counters. The code is dirty, needs clean up. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Kristian Nielsen
knielsen@knielsen-hq.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-38465: Savepoint in trigger causes transactional inconsistency SAVEPOINT inside a trigger doesn't work correctly. Setting a savepoint inside a trigger somehow loses the implicit savepoint set at transaction start, so that the partial changes are left if the statement later fails. Referencing an existing savepoint claims the savepoint does not exist (and it is in any case very unclear what exactly it should mean to rollback to a savepoint from the middle of a statement, or set in the middle of a prior statement). These problems are independent of binlog-in-engine, but in the new binlog implementation we are trying to make things work more correctly and robustly, so let's disallow use of savepoints inside triggers. The new binlog is off by default, so backwards compatibility is less of a concern, though arguably disallowing savepoints in triggers would be better done unconditionally. Signed-off-by: Kristian Nielsen <[email protected]> |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Nikita Malyavin
nikitamalyavin@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-37871 SIGSEGV in I_P_List_iterator on DROP DATABASE test Happens on dropping the database on a newly created conneciton. temporary_tables can be NULL in THD::global_tmp_drop_database. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Nikita Malyavin
nikitamalyavin@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-37720 use-after-free on CREATE OR REPLACE GTT under pseudo_slave_mode ... and LOCK TABLES. Global temporary tables data is not replicated, and pseudo_slave_mode is used internally for partial replication testing. Hence forbid opening GTT (i.e. create child GTT handles) under pseudo_slave_mode, and forbid setting pseudo_slave_mode=1 whenever child GTT handles are open. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Nikita Malyavin
nikitamalyavin@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-37798 Incomplete savepoint support with global temporary tables Add empty savepoint support callbacks to global_temporary_tp |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Nikita Malyavin
nikitamalyavin@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-37898 No GTT MTR coverage on release builds due to debug_sync requirement Deny temporary tables creation for sphinx. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Oleg Smirnov
olernov@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-35880: Fix incorrect error message when MAX_EXECUTION_TIME was exceeded The error message shown when MAX_EXECUTION_TIME hint causes a timeout incorrectly referred to "max_statement_time", which is a different variable with different units (seconds vs milliseconds). This could confuse users. Before: "Query execution was interrupted (max_statement_time exceeded)" After: "Query was interrupted: execution time limit 1.5 sec exceeded" The new message is neutral and accurate for both max_statement_time system variable and MAX_EXECUTION_TIME optimizer hint, displaying the actual timeout value that was exceeded. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Monty
monty@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Update Galera test results | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Nikita Malyavin
nikitamalyavin@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-38468 GTT: use-after-free after failed BINLOG event in XA mode Deny setting pseudo_slave_mode for GTT even when rli_fake is set. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Oleg Smirnov
olernov@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-36686: Fix crash with DEFAULT() in WHERE clause with nested views Item_default_value::do_build_clone() was performing a shallow copy, causing the cloned item to share its 'arg' pointer with the original. During condition pushdown for derived tables: 1. build_pushable_cond() cloned the WHERE clause condition 2. grouping_field_transformer_for_where transformed the cloned DEFAULT(a) to reference the inner select's grouping field, modifying the shared 'arg' via change_item_tree() 3. cleanup_excluding_const_fields_processor cleaned up the transformed items, setting Item_field::field = 0 4. The original WHERE clause still referenced the cleaned-up item 5. Crash in Item_field::used_tables() accessing field->table Fix: Make do_build_clone() create a deep clone of 'arg' member, ensuring the cloned Item_default_value has independent state. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Monty
monty@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-38246 aria_read index failed on encrypted database during backup The backup of encrypted Aria tables was not supported. Added support for this. One complication is that the page checksum is for the not encrypted page. To be able to verify the checksum I have to temporarly decrypt the page. In the backup we store the encrypted pages. Other things: - Fixed a (not critical) memory leak in mariabackup |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Nikita Malyavin
nikitamalyavin@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-37941 Assertion !thd->rgi_slave failed on INSERT w/ parallel slave Replicas can't crash on the incorrect/unexpected data. It should react with an error. Change the assertion to if and return error if the relay log contains query with GTT access. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Monty
monty@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-38246 aria_read index failed on encrypted database during backup The backup of encrypted Aria tables was not supported. Added support for this. One complication is that the page checksum is for the not encrypted page. To be able to verify the checksum I have to temporarly decrypt the page. In the backup we store the encrypted pages. Other things: - Fixed some (not critical) memory leaks in mariabackup |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Nikita Malyavin
nikitamalyavin@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-37929 Assertion !thd->rgi_slave' failed on REPAIR TABLE on replica 1. REPAIR TABLES is logged even if open_table is failed. In this case, we cannot determine whether it was opened for a global temporary table, so we cannot make sure it is not replicated. 2. Also REPAIR/ANALYZE/CHECK can include more that one table, and has no ability co control statement logging per-table, so anyway relying on that it's not logged is incorrect. Hence, enable writing to binlog for these three statements. Keep replica to be able to handle these commands. As such, force REPAIR/ANALYZE/CHECK to open a parent handle of global temporary table. Extract sql_command_flags flag CF_USE_PARENT_GTT_SHARE for global temporary tables, as a critical mass of statements has been reached. Also fixes: MDEV-37929 Assertion !thd->rgi_slave' failed on REPAIR TABLE on replica |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Nikita Malyavin
nikitamalyavin@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-37896 global_temporary_table tests are not stable on 2nd run replace con_id and purge logs |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Kristian Nielsen
knielsen@knielsen-hq.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Binlog-in-engine: MDEV-38462: Large binlog write can overwrite head of InnoDB redo log The code for binlogging out-of-band data was missing an appropriate call to log_free_check(). This call is needed to throttle write activity and wait for an InnoDB checkpoint, when the redo log is too small (or otherwise has insufficient space available) to accomodate the write activity. Signed-off-by: Kristian Nielsen <[email protected]> |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Vladislav Vaintroub
vvaintroub@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-37483 mariadb-dump -dir doesn't convert database names Similar to MDEV-37483, use file name encoding for dbnames to create directories. Adapt mariadb-import to convert the names back. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Nikita Malyavin
nikitamalyavin@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-38266 Infinite loop after LOCK+REPAIR Case: 1. Two tables are locked, one of them is GTT 2. Invoke REPAIR on the last table in the list (not GTT) 3. SELECT from gtt How the bug works: 1. REPAIR sets tdc->flushed=true 2. LOCK TABLE will prevent eviction 3. In SELECT, open_table will go by locked_tables_mode path 4. GTT is found, goto get_new_table (bug!). 5. This is true: thd->open_tables && thd->open_tables->s->tdc->flushed 6. ot_ctx->request_backoff_action 7. open_table retry (infinite). Fix: Straighten the flow. We shouldn't check thd->open_tables->s->tdc->flushed in LTM, but actually we should do none under get_new_table label right until open_global_temporary_table. get_new_table would access tdc and search for TABLE_SHARE, but actually we already have it. We also shouldn't configure it from scratch - it's already done. Overall, we can jump directly to opening GTT, with setting a few variables. Because TABLE_SHARE will not be opened through tdc (where acquire would happen), we shouldn't release it in open_global_temporary_table under locked_tables_mode+MYSQL_OPEN_GET_NEW_TABLE. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Nikita Malyavin
nikitamalyavin@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-37956 use-after-free in mysql_ha_close_table on DROP DATABASE Drop global temporary tables after dropping handlers. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Andrei Elkin
andrei.elkin@pp.inet.fi |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-38212 MDEV-37686 Breaks Parallel Replication Re-fixing MDEV-37686. NULLifying `THD::rgi_slave` pointer in `start_new_trans` ctor harmed the parallel slave conflict detection. Now instead of `NULL`ifying of this member a finer approach is taken to optionally screen `THD::rgi_slave` when it is attempted to be accessed within `start_new_trans` context, that is when such out-of-band transaction is run by a slave thread. The start_new_trans is allowed of course to access server local non-replicated temporary tables, should it ever need that. The original MDEV-37686 aspect is tested with 12.3 branch's rpl.create_or_replace_mix2. Any possible side effects to temporary table replication is controlled by existing rpl suite tests. There is no need for a specific mtr test to prove the parallel slave side is back to normal, as `THD::rgi_slave` is again available to concurrent transactions. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Nikita Malyavin
nikitamalyavin@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-37958 SIGSEGV in ha_mroonga::storage_create_foreign_key on INSERT More a mroonga bug, but doesn't reproduce otherwise. Use a correct alter_info, not the one stored in lex. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Nikita Malyavin
nikitamalyavin@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| MDEV-37898 No release GTT MTR tests due to debug_sync injection | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Nikita Malyavin
nikitamalyavin@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-37934 Assertion `thd->transaction->stmt.is_empty()...' in GRANT ...on GTT failed Open a parent handle for GTT on GRANT. ON COMMIT PRESERVE ROWS does not register handlerton, so it will work fine. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Vlad Lesin
vlad_lesin@mail.ru |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-31956 SSD based InnoDB buffer pool extension In one of the practical cloud MariaDB setups, a server node accesses its datadir over the network, but also has a fast local SSD storage for temporary data. The content of such temporary storage is lost when the server container is destroyed. The commit uses this ephemeral fast local storage (SSD) as an extension of the portion of InnoDB buffer pool (DRAM) that caches persistent data pages. This cache is separated from the persistent storage of data files and ib_logfile0 and ignored during backup. The following system variables were introduced: innodb_extended_buffer_pool_size - the size of external buffer pool file, if it equals to 0, external buffer pool will not be used; innodb_extended_buffer_pool_path - the path to external buffer pool file. If innodb_extended_buffer_pool_size is not equal to 0, external buffer pool file will be created on startup. Only clean pages will be flushed to external buffer pool file. There is no need to flush dirty pages, as such pages will become clean after flushing, and then will be evicted when they reach the tail of LRU list. The general idea of this commit is to flush clean pages to external buffer pool file when they are evicted. A page can be evicted either by transaction thread or by background thread of page cleaner. In some cases transaction thread is waiting for page cleaner thread to finish its job. We can't do flushing in external buffer pool file when transaction threads are waithing for eviction, that would heart performance. That's why the only case for flushing is when page cleaner thread evicts pages in background and there are no waiters. For this purprose buf_pool_t::done_flush_list_waiters_count variable was introduced, we flush evicted clean pages only if the variable is zeroed. Clean pages are evicted in buf_flush_LRU_list_batch() to keep some amount of pages in buffer pool's free list. That's why we flush every second page to external buffer pool file, otherwise there could be not enought amount of pages in free list to let transaction threads to allocate buffer pool pages without page cleaner waiting. This might be not a good solution, but this is enought for prototyping. External buffer pool page is introduced to store information in buffer pool page hash about the certain page can be read from external buffer pool file. The first several members of such page must be the same as the members of internal page. External page frame must be equal to the certain value to disthinguish external page from internal one. External buffer pages are preallocated on startup in external pages array. We could get rid of the frame in external page, and check if the page's address belongs to the array to distinguish external and internal pages. There are also external pages free and LRU lists. When some internal page is decided to be flushed in external buffer pool file, a new external page is allocated eighter from the head of external free list, or from the tail of external LRU list. Both lists are protected with buf_pool.mutex. It makes sense, because a page is removed from internal LRU list during eviction under buf_pool.mutex. Then internal page is locked and the allocated external page is attached to io request for external buffer pool file, and when write request is completed, the internal page is replaced with external one in page hash, external page is pushed to the head of external LRU list and internal page is unlocked. After internal page was removed from external free list, it was not placed in external LRU, and placed there only after write completion, so the page can't be used by the other threads until write is completed. Page hash chain get element function has additional template parameter, which notifies the function if external pages must be ignored or not. We don't ignore external pages in page hash in two cases, when some page is initialized for read and when one is reinitialized for new page creating. When an internal page is initialized for read and external page with the same page id is found in page hash, the internal page is locked, the external page in replaced with newly initialized internal page in the page hash chain, the external page is removed from external LRU list and attached to io request to external buffer pool file. When the io request is completed, external page is returned to external free list, internal page is unlocked. So during read external page absents in both external LRU and free lists and can't be reused. When an internal page is initialized for new page creating and external pages with the same page id is found in page hash, we just remove external page from the page hash chain and external LRU list and push it to the head of external free list. So the external page can be used for future flushing. The pages are flushed to and read from external buffer pool file with the same manner as they are flushed to their spaces, i.e. compressed and encrypted pages stay compressed and encrypted in external buffer pool file. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Nikita Malyavin
nikitamalyavin@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-38151 GTT: missing FUNCTION support open_temporary_table[s] defaulted to searching only local temporary tables (Tmp_table_kind::TMP). When in function, a temporary table was "carefully re-opened": it was closed and then opened again, with open_temporary_table. This resulted in "table not found". The correct key in most cases is Tmp_table_kind::ANY. In some cases it should be Tmp_table_kind::TMP: * When operation is not supported for GTT (ANALYZE/REPAIR) * When a global handle should be opened (CREATE VIEW) * If it's a re-open Apart from this bug, it caused a global temporary table to be always opened through open_tables, meaning that tdc was queried first. This means that the earlier code never relied on pre-opening temporary tables. This means that all the commands that follow the default open_temporary_tables path in mysql_execute_command (the standard temporary tables pre-opening) should be able to handle child GTT share. This wasn't so for TRUNCATE, hence the changes in sql_truncate.cc. Also, this broke the lookup order: first a local temporary table should be looked up. If it doesn't exist, only then a global temporary table should be looked up. To fix the latter -- push back global temporary tables' local shares and push front local temporary tables. To support push_front, All_tmp_tables_list declaration is changed. It should use I_P_List_fast_push_back adapter, which adds T **m_last to the list body. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Monty
monty@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
squash! 7b54e0496526d366d4acc16530ea215b06ae92f6 MDEV-36501 EITS data is lost after failed attempt to CREATE OR REPLACE table MDEV-36493 Atomic CREATE OR REPLACE ... SELECT blocks InnoDB purge Other things: - EITS data is preserved if create or replace fails if drop_before_create_or_replace=OFF. If ON, then create or replace will drop EITS before the drop of the original table (as before). |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Oleg Smirnov
olernov@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-35880: Fix incorrect error message when MAX_EXECUTION_TIME was exceeded The error message shown when MAX_EXECUTION_TIME hint causes a timeout incorrectly referred to "max_statement_time", which is a different variable with different units (seconds vs milliseconds). This could confuse users. Before: "Query execution was interrupted (max_statement_time exceeded)" After: "Query was interrupted: execution time limit 1.5 sec exceeded" The new message is neutral and accurate for both max_statement_time system variable and MAX_EXECUTION_TIME optimizer hint, displaying the actual timeout value that was exceeded. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Vladislav Vaintroub
vvaintroub@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-38498 mariadb-dump -dir doesn't convert database names Similar to MDEV-37483, use file name encoding for dbnames to create directories. Adapt mariadb-import to convert the names back. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Nikita Malyavin
nikitamalyavin@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-37872 SIGSEGV on some GTT operations under pseudo_thread_id changed Deny pseudo_thread_id changing when there are some GTTs are open. pseudo_thread_id is only used for replication testing. Since GTT child tables are never opened on replicas, it's fine to do so -- there is no case to test. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Oleg Smirnov
olernov@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-35880: Fix incorrect error message when MAX_EXECUTION_TIME was exceeded The error message shown when MAX_EXECUTION_TIME hint causes a timeout incorrectly referred to "max_statement_time", which is a different variable with different units (seconds vs milliseconds). This could confuse users. Before: "Query execution was interrupted (max_statement_time exceeded)" After: "Query was interrupted: execution time limit 1.5 sec exceeded" The new message is neutral and accurate for both max_statement_time system variable and MAX_EXECUTION_TIME optimizer hint, displaying the actual timeout value that was exceeded. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Aleksey Midenkov
midenok@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-32724 Segmentation fault due to Deep Recursion in table.cc and sql_lex.cc Recursive CTE wrongly detected anchor because inner non-recursive CTE wrongly assigned with-element table to itself due to inner-outer name clash. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||