- 25 Oct, 2021 4 commits
-
-
Sergei Golubchik authored
this is CentOOOOOOS 7
-
Vladislav Vaintroub authored
The reason for the crash was a bug in MDEV-19275, after which shutdown does not wait for binlog threads anymore.
-
Vladislav Vaintroub authored
-
Vladislav Vaintroub authored
Error C2440 'initializing': cannot convert from 'MYSQL_RES *(__stdcall *)(MYSQL *)' to 'MYSQL_RES *(__cdecl *)(MYSQL *)'
-
- 22 Oct, 2021 7 commits
-
-
Monty authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
This implements memory transaction support for: * Intel Restricted Transactional Memory (RTM), also known as TSX-NI (Transactional Synchronization Extensions New Instructions) * POWER v2.09 Hardware Trace Monitor (HTM) on GNU/Linux transactional_lock_guard, transactional_shared_lock_guard: RAII lock guards that try to elide the lock acquisition when transactional memory is available. buf_pool.page_hash: Try to elide latches whenever feasible. Related to the InnoDB change buffer and ROW_FORMAT=COMPRESSED tables, this is not always possible. In buf_page_get_low(), memory transactions only work reasonably well for validating a guessed block address. TMLockGuard, TMLockTrxGuard, TMLockMutexGuard: RAII lock guards that try to elide lock_sys.latch and related latches.
-
Marko Mäkelä authored
Since commit bd5a6403 (MDEV-26033) we can actually calculate the buf_pool.page_hash cell and latch addresses while not holding buf_pool.mutex. buf_page_alloc_descriptor(): Remove the MEM_UNDEFINED. We now expect buf_page_t::hash to be zero-initialized. buf_pool_t::hash_chain: Dedicated data type for buf_pool.page_hash.array. buf_LRU_free_one_page(): Merged to the only caller buf_pool_t::corrupted_evict().
-
Marko Mäkelä authored
page_hash_latch: Only use the spinlock implementation on SUX_LOCK_GENERIC platforms (those for which we do not implement a futex-like interface). Use srw_spin_mutex on 32-bit systems (except Microsoft Windows) to satisfy the size constraints. rw_lock::is_read_locked(): Remove. We will use the slightly broader assertion is_locked(). srw_lock_: Implement is_locked(), is_write_locked() in a hacky way for the Microsoft Windows SRWLOCK. This should be acceptable, because we are only using these predicates in debug assertions (or later, in lock elision), and false positives should not matter.
-
Marko Mäkelä authored
In a stress test campaign of a 10.6-based branch by Matthias Leich, a deadlock between two InnoDB threads occurred, involving lock_sys.wait_mutex and a dict_table_t::lock_mutex. The cause of the hang is a latching order violation in lock_sys_t::cancel(). That function and the latching order violation were originally introduced in commit 8d16da14 (MDEV-24789). lock_sys_t::cancel(): Invoke table->lock_mutex_trylock() in order to avoid a deadlock. If that fails, release lock_sys.wait_mutex, and acquire both latches. In that way, we will be obeying the latching order and no hangs will occur. This hang should mostly affect DDL operations. DML operations will acquire only IX or IS table locks, which are compatible with each other.
-
- 21 Oct, 2021 15 commits
-
-
Vladislav Vaintroub authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
page_create_low(): Fix -Warray-bounds log_buffer_extend(): Fix -Wstringop-overflow
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
Based on mysql/mysql-server@bc9c46bf2894673d0df17cd0ee872d0d99663121 but without sleeps. The test was verified to hit the debug assertion if the change to fts_add_doc_by_id() in commit 2d98b967 was reverted.
-
Marko Mäkelä authored
fts_cache_t::total_size_at_sync: New field, to sample total_size. fts_add_doc_by_id(): Invoke sync if total_size has grown too much since the previous sync request. (Maintain cache->total_size_at_sync.) ib_wqueue_t::length: Caches ib_list_len(*items). ib_wqueue_len(): Removed. We will refer to fts_optimize_wq->length directly. Based on mysql/mysql-server@bc9c46bf2894673d0df17cd0ee872d0d99663121
-
Marko Mäkelä authored
trx_commit_in_memory(): Do not release the rseg reference before trx_undo_commit_cleanup() has been invoked and the current transaction is truly done with the rollback segment. The purpose of the reference count is to prevent data races with trx_purge_truncate_history(). This is based on mysql/mysql-server@ac79aa1522f33e6eb912133a81fa2614db764c9c.
-
Thirunarayanan Balathandayuthapani authored
InnoDB commit fails when consecutive FTS_DOC_ID value is greater than 4294967295. Fix is that InnoDB should remove the delta FTS_DOC_ID value limitations and fts should encode 8 byte value, remove FTS_DOC_ID_MAX_STEP variable. Replaced the fts0vlc.ic file with fts0vlc.h fts_encode_int(): Should be able to encode 10 bytes value fts_get_encoded_len(): Should get the length of the value which has 10 bytes fts_decode_vlc(): Add debug assertion to verify the maximum length allowed is 10. mach_read_uint64_little_endian(): Reads 64 bit stored in little endian format Added a unit test case which check for minimum and maximum value to do the fts encoding
-
Marko Mäkelä authored
-
Marko Mäkelä authored
In commit 1811fd51 the assertion should have said error_reported instead of !error_reported. But, that revised assertion would still fail in main.defaults where ER_BAD_DATA is reported during CREATE TABLE.
-
Sergei Krivonos authored
-
- 20 Oct, 2021 10 commits
-
-
Marko Mäkelä authored
-
Nikita Malyavin authored
Assertion `!pk->has_virtual()' failed in dict_index_build_internal_clust while creating PRIMARY key longer than possible to store in the page. This happened because the key was wrongly deduced as Long UNIQUE supported, however PRIMARY KEY cannot be of that type. The main reason is that only 8 bytes are used to store the hash, see HA_HASH_FIELD_LENGTH. This is also why HA_NOSAME flag is removed (and caused the assertion in turn) in open_table_from_share: if (key_info->algorithm == HA_KEY_ALG_LONG_HASH) { key_part_end++; key_info->flags&= ~HA_NOSAME; } To make it unique, the additional check is done by check_duplicate_long_entries call from ha_write_row, and similar one from ha_update_row. PRIMARY key is already forbidden, which is checked by the first test in main.long_unique, however is_hash_field_needed was wrongly deduced to true in mysql_prepare_create_table in this particular case. FIX: * Improve the check for Key::PRIMARY type * Simplify is_hash_field_needed deduction for a more neat reading
-
Marko Mäkelä authored
-
Marko Mäkelä authored
create_table_info_t::innobase_table_flags(): Refuse to create a PAGE_COMPRESSED table with PAGE_COMPRESSION_LEVEL=0 if also innodb_compression_level=0. The parameter value innodb_compression_level=0 was only somewhat meaningful for testing or debugging ROW_FORMAT=COMPRESSED tables. For the page_compressed format, it never made any sense, and the check in dict_tf_is_valid_not_redundant() that was added in 72378a25 (MDEV-12873) would cause the server to crash.
-
Nikita Malyavin authored
The assertion is absolutely correct since no data access is possible after XA PREPARE. The check is added in mysql_ha_read.
-
Nikita Malyavin authored
This is a duplicate of MDEV-18278 89936f11, but I will add an additional assertion Description: The frm corruption should not be reported during CREATE TABLE. Normally it doesn't, and the data to fill TABLE is taken by open_table_from_share call. However, the vcol data is stored as SQL string in table->s->vcol_defs.str and is anyway parsed on each table open. It is impossible [or hard] to avoid, because it's hard to clone the expression tree in general (it's easier to parse). Normally parse_vcol_defs should only fail on semantic errors. If so, error_reported is set to true. Any other failure is not expected during table creation. There is either unhandled/unacknowledged error, or something went really wrong, like memory reject. This all should be asserted anyway. Solution: * Set *error_reported=true for the forward references check; * Assert for every unacknowledged error during table creation.
-
Nikita Malyavin authored
-
Oleksandr Byelkin authored
MDEV-26647 (reuse info) Include password validation plugin information in the error message if the SQL statement is not satisfied password policy send information about password reusing
-
Marko Mäkelä authored
-
Daniel Black authored
MySQL-5.7 mysql.user tables have a last_password_changed field. Because before MariaDB-10.4 remained oblivious to this, the act of creating users or otherwise changing a users row left the last_password_field with 0. Running a MariaDB-10.4 instance on this would work correctly, until mysql_upgrade is run, when this 0 value immediately translates to password expired state. MySQL-5.7 relied on the password_expired enum to indicate password expiry so we aren't going to activate password that were expired in MySQL-5.7. Thanks Hans Borresen for the bug report and review of the fix.
-
- 19 Oct, 2021 4 commits
-
-
Marko Mäkelä authored
-
Marko Mäkelä authored
ha_innobase::delete_table(): When the table that is being dropped has a name starting with #sql, temporarily set innodb_lock_wait_timeout=0 while attempting to lock the persistent statistics tables. If the statistics tables cannot be locked, pretend that statistics did not exist and carry on with dropping the table. The SQL layer is not really prepared for failures of this operation. This is what fixes the test case. ha_innobase::rename_table(): When renaming a table from a name that starts with #sql, try to lock the statistics tables with an immediate timeout, and ignore the statistics if the locks were not available. In fact, during any rename from a #sql name, dict_stats_rename_table() should have no effect, because already when an earlier rename to a #sql name took place we should have deleted the statistics for the table using the non-#sql name. This change is just analogous to the ha_innobase::delete_table().
-
Vicențiu Ciorbaru authored
MIPS (and possibly other) platforms require linking against libatomic to support 64-bit atomic integers. Groonga was failing to do so and all related tests were failing with an atomics relocation error on MIPS. Contributors: James Cowgill <jcowgill@debian.org>
-
Alexey Botchkov authored
fixed execution inside the prepared statement.
-