- 21 Aug, 2024 1 commit
-
-
Dave Gosselin authored
Make an effort to emit a warning if we detect that an outside force has modified the binlog. This warning will not halt binlog writes. We rely on file modification times to detect unexpected writes to the binlog file. This best-effort approach isn't fool-proof because we cannot write to the binlog and get both the prior and current modification times as an atomic operation. There are four cases in which unexpected modification could occur: 1. The time from when the we open the file until the first write. 2. The time between the first and next writes (or between writes k and k+1) 3. The time between the last write and when we close the file. 4. In the case of 0 writes, the time from when we open the file until we close the file. MariaDB writes binlogs with the help of the IO_CACHE, buffering application writes together in memory, then later writing them through to disk. We need to see through the IO_CACHE to know when file modifications occur so that we can compare the last known file modification time to the most recent modification time. However, not every user of IO_CACHE cares for this protection and the overhead of extra stat system calls. To encapsulate this new behavior to binlogs, we add four new callbacks to the IO_CACHE which in the default case do nothing. These new callbacks are triggered on certain file events: file open, pre-write, post-write, and file close. We extend the IO_CACHE with a new type that holds a copy of struct stat, containing the last file modification time, keeping the new field(s) encapsulated away from the original IO_CACHE. In the case of binlogs, we use instances of this new type wherever we previously used IO_CACHE and we set the four new callbacks to invoke the file modification time checks.
-
- 20 Aug, 2024 1 commit
-
-
Marko Mäkelä authored
In commit 232d7a5e we almost got the detection logic right. However, the XGETBV instruction would crash if Linux was started up with the option noxsave. have_vpclmulqdq(): Check for the XSAVE flag at the correct position and also for the AVX flag. This was tested on Ubuntu 22.04 by starting up its Linux 5.15 kernel with and without the noxsave option.
-
- 19 Aug, 2024 5 commits
-
-
Oleksandr Byelkin authored
Added missed methods to Item_string child.
-
Oleksandr Byelkin authored
Missing methods added to Item_bin_string
-
Monty authored
This is needed as the order of rows are not deterministic, especially in future versions of table statistics.
-
Monty authored
The original code is correct. valgrind and asan binaries should be built with a specialiced version of mem_root that makes it easier to find memory overwrites. This is what the BUILD scripts is doing. The specialiced mem_root code allocates a new block for every allocation which is visiable for any test that depenmds on the default original malloc size and usage.
-
Dmitry Shulga authored
Running an UPDATE statement in PS mode and having positional parameter(s) bound with an array of actual values (that is prepared to be run in bulk mode) results in incorrect behaviour in presence of on update trigger that also executes an UPDATE statement. The same is true for handling a DELETE statement in presence of on delete trigger. Typically, the visible effect of such incorrect behaviour is expressed in a wrong number of updated/deleted rows of a target table. Additionally, in case UPDATE statement, a number of modified rows and a state message returned by a statement contains wrong information about a number of modified rows. The reason for incorrect number of updated/deleted rows is that a data structure used for binding positional argument with its actual values is stored in THD (this is thd->bulk_param) and reused on processing every INSERT/UPDATE/DELETE statement. It leads to consuming actual values bound with top-level UPDATE/DELETE statement by other DML statements used by triggers' body. To fix the issue, reset the thd->bulk_param temporary to the value nullptr before invoking triggers and restore its value on finishing its execution. The second part of the problem relating with wrong value of affected rows reported by Connector/C API is caused by the fact that diagnostics area is reused by an original DML statement and a statement invoked by a trigger. This fact should be take into account on finalizing a state of diagnostics area on completion running of a statement. Important remark: in case the macros DBUG_OFF is on, call of the method Diagnostics_area::reset_diagnostics_area() results in reset of the data members m_affected_rows, m_statement_warn_count. Values of these data members of the class Diagnostics_area are used on sending OK and EOF messages. In case DML statement is executed in PS bulk mode such resetting results in sending wrong result values to a client for affected rows in case the DML statement fires a triggers. So, reset these data members only in case the current statement being processed is not run in bulk mode.
-
- 15 Aug, 2024 2 commits
-
-
Tim van Dijen authored
-
Marko Mäkelä authored
-
- 14 Aug, 2024 1 commit
-
-
Marko Mäkelä authored
The #pragma that was removed in commit e255837e (MDEV-34266) turns out to be necessary for silencing all cases of -Wstringop-truncation.
-
- 13 Aug, 2024 1 commit
-
-
Thirunarayanan Balathandayuthapani authored
- Added plugin_debug.test, multiple_index.test to innodb_fts suite from mysql-5.7. - commit c5b28e55 removes the warning for InnoDB rebuilding table to add FTS_DOC_ID - multiple_index test case has MATCH(a) values are smaller than in MySQL because ROLLBACK updates the stat_n_rows. - st_mysql_ftparser_boolean_info structure conveys boolean metadata to mysql search engine for every word in the query. This structure misses the position value to store the correct offset of every word. So phrase search queries in plugin_debug test case with boolean mode for simple parser throws wrong result.
-
- 12 Aug, 2024 4 commits
-
-
Julius Goryavsky authored
With wsrep_sst_rsync, node goes into endless loop when trying to establish connection to donor for IST/SST if the database is bind on specific IP address, not the "*". This commit fixes this problem. Separate tests are not required - the problem can occur in normal configurations on a number of systems when selecting a bing address other than "*", especially on FreeBSD and with the IPv6 addresses.
-
Jan Lindström authored
int wsrep_thd_append_key(THD*, const wsrep_key*, int, Wsrep_service_key_type) CREATE TABLE [SELECT|REPLACE SELECT] is CTAS and idea was that we force ROW format. However, it was not correctly enforced and keys were appended before wsrep transaction was started. At THD::decide_logging_format we should force used stmt binlog format to ROW in CTAS case and produce a warning if used binlog format was not ROW. At ha_innodb::update_row we should not append keys similarly as in ha_innodb::write_row if sql_command is SQLCOM_CREATE_TABLE. Improved error logging on ::write_row, ::update_row and ::delete_row if wsrep key append fails. Signed-off-by: Julius Goryavsky <julius.goryavsky@mariadb.com>
-
Alexander Barkov authored
A mixture of a multi-byte *TEXT column and a short binary column produced a too large column. For example, COALESCE(tinytext_utf8mb4, short_varbinary) produced a BLOB column instead of an expected TINYBLOB. - Adding a virtual method Type_all_attributes::character_octet_length(), returning max_length by default. - Overriding Item_field::character_octet_length() to extract the octet length from the underlying Field. - Overriding Item_ref::character_octet_length() to extract the octet length from the references Item (e.g. as VIEW fields). - Fixing Type_numeric_attributes::find_max_octet_length() to take the octet length using the new method character_octet_length() instead of accessing max_length directly.
-
Ian Gilfillan authored
-
- 09 Aug, 2024 1 commit
-
-
Oleksandr Byelkin authored
-
- 08 Aug, 2024 6 commits
-
-
Vladislav Vaintroub authored
Let perror produce OS error messages in English
-
Vladislav Vaintroub authored
fprintf() on Windows, when used on unbuffered FILE*, writes bytewise. This can make crash handler messages harder to read, if they are mixed up with other error log output. Fixed , on Windows, by using a small buffer for formatting, and fwrite instead of fprintf, if buffer is large enough for message.
-
Vladislav Vaintroub authored
The reason is that on Windows, OpenSSL can be built with different C runtime than the server (e.g Debug runtime in debug vcpkg build). Overwriting only malloc(), with CRT that server is using can cause mixup of incompatible malloc() and free() inside openssl. To fix, overwrite all memory functions.
-
Vladislav Vaintroub authored
Usually it is not needed, but sometimes we need to testing interoperability, e.g OpenSSL server / SCHANNEL client, or WolfSSL server / OpenSSL client.
-
Vladislav Vaintroub authored
For named pipe, server and client are on the same machine, and opt_local_infile just adds unnecessary copying via "load data local infile"
-
Daniel Bartholomew authored
-
- 07 Aug, 2024 2 commits
-
-
Nikita Malyavin authored
Assertion `table->field[0]->ptr >= table->record[0] && table->field[0]->ptr <= table->record[0] + table->s->reclength' failed in handler::assert_icp_limitations. table->move_fields has some limitations: 1. It cannot be used in cascade 2. It should always have a restoring pair. Rule 1 is covered by assertions in handler::assert_icp_limitations and handler::ptr_in_record (commit 30894fe9). Rule 2 should be manually maintained with care. Hopefully, the rule 1 assertions may sometimes help as well. In ha_myisam::repair, both rules are broken. table->move_fields is used asymmetrically there: it is set on every param->fix_record call (i.e. in compute_vcols) but is restored only once, in the end of repair. The reason to updating field ptr's for every call is that compute_vcols can (supposedly) be called in parallel, that is, with the same table, but different records. The condition to "unmove" the pointers in ha_myisam::restore_vcos_after_repair is incorrect, when stored vcols are available, and myisam stores a VIRTUAL field if it's the only field in the table (the record cannot be of zero length). This patch solves the problem by "unmoving" the pointers symmetrically, in compute_vcols. That is, both rules will be preserved maintained.
-
Yuchen Pei authored
-
- 04 Aug, 2024 6 commits
-
-
Jan Lindström authored
Test improvements only to make test more robust. Signed-off-by: Julius Goryavsky <julius.goryavsky@mariadb.com>
-
Jan Lindström authored
Modified node config with longer timeouts for suspect, inactive, install and wait_prim timeout. Increased node_1 weight to keep it primary component when other nodes are voted out. Signed-off-by: Julius Goryavsky <julius.goryavsky@mariadb.com>
-
Jan Lindström authored
Replication of MyISAM and Aria DML is experimental and best effort only. Earlier change make INSERT SELECT on both MyISAM and Aria to replicate using TOI and STATEMENT replication. Replication should happen only if user has set needed wsrep_mode setting. Signed-off-by: Julius Goryavsky <julius.goryavsky@mariadb.com>
-
Jan Lindström authored
Fixed used configuration and added suppression for warning message. Test case changes only. Signed-off-by: Julius Goryavsky <julius.goryavsky@mariadb.com>
-
Jan Lindström authored
Modified test configuration file to use wsrep_sync_wait to make sure committed transactions are replicated before next operation. Signed-off-by: Julius Goryavsky <julius.goryavsky@mariadb.com>
-
Andre F de Miranda authored
Signed-off-by: Julius Goryavsky <julius.goryavsky@mariadb.com>
-
- 03 Aug, 2024 2 commits
-
-
Oleg Smirnov authored
New runtime type diagnostic (MDEV-34490) has detected that classes Item_func_eq, Item_default_value and Item_date_literal_for_invalid_dates incorrectly return an instance of its ancestor classes when being cloned. This commit fixes that. Additionally, it fixes a bug at Item_func_case_simple::do_build_clone() which led to an endless loop of cloning functions calls. Reviewer: Oleksandr Byelkin <sanja@mariadb.com>
-
Oleksandr Byelkin authored
-
- 01 Aug, 2024 2 commits
-
-
Thirunarayanan Balathandayuthapani authored
Reason: ====== - InnoDB fails to load the instant alter table metadata from clustered index while loading the table definition. The reason is that InnoDB metadata blob has the column length exceeds maximum fixed length column size. Fix: === - InnoDB should treat the long fixed length column as variable length fields that needs external storage while initializing the field map for instant alter operation
-
Galina Shalygina authored
Before this patch the crash occured when a single row dataset is used and Item::remove_eq_conds() is called for HAVING. This function is not supposed to be called after the elimination of multiple equalities. To fix this problem instead of Item::remove_eq_conds() Item::val_int() is used. In this case the optimizer tries to evaluate the condition for the single row dataset and discovers impossible HAVING immediately. So, the execution phase is skipped. Approved by Igor Babaev <igor@maridb.com>
-
- 31 Jul, 2024 2 commits
-
-
Brandon Nesterenko authored
The slave would try to sync_with_master_gtid.inc, but the master never actually saved its gtid position so the test would move on too quickly.
-
Thirunarayanan Balathandayuthapani authored
Problem: ======== - After the commit ada1074b (MDEV-14398) fil_crypt_set_encrypt_tables() iterates through all tablespaces to fill the default_encrypt tables list. This was a trigger to encrypt or decrypt when key rotation age is set to 0. But import tablespace does call fil_crypt_set_encrypt_tables() unnecessarily. The motivation for the call is to signal the encryption threads. Fix: ==== ha_innobase::discard_or_import_tablespace: Remove the fil_crypt_set_encrypt_tables() and add the import tablespace to the default encrypt list if necessary
-
- 30 Jul, 2024 2 commits
-
-
Sergei Petrunia authored
Remove an assert added by fix for MDEV-34417. BNL-H join can be used with prefix keys. This happens when there are real prefix indexes on the equi-join columns (although it probably doesn't make a lot of sense). Anyway, remove the assert. The code receives properly truncated key values for hashing/comparison so it can handle them just fine.
-
Thirunarayanan Balathandayuthapani authored
- commit 85db5347 (MDEV-33400) retains the instantness in the table definition after discard tablespace. So there is no need to assign n_core_null_bytes during instant table preparation unless they are not initialized.
-
- 29 Jul, 2024 2 commits
-
-
Rex authored
Statements affected by this bug need all the following to be true 1) a derived table table or view whose specification contains a set operation at the top level. 2) a grouping operator (group by/having) operating on a column alias other than in the first select of the union/intersect 3) an outer condition that will be pushed into all selects in this union/intersect, either into the where or having clause When pushing a condition into all selects of a unit with more than one select, pushdown_cond_for_derived() renames items so we can re-use the condition being pushed. These names need to be saved and reset for correct name resolution on second execution of prepared statements. Reviewed by Igor Babaev (igor@mariadb.com)
-
Marko Mäkelä authored
We need to work around deficiencies of Valgrind, and apparently the previous work-around attempts (such as d247d649) do not work anymore, definitely not on recent clang-based compilers. MemorySanitizer should be fine; unfortunately we set HAVE_valgrind for it as well.
-