summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* MDEV-16194 stack not resolve (addr2line)bb-10.3-danielblack-MDEV-16194-pkgtest-remove-offsetDaniel Black2022-09-191-4/+1
| | | | | Remove the offset when invoking addr2line as tested by Sergey Vojtovich.
* MDEV-29543 Windows: Unreadable dlerror() message on localized OSVladislav Vaintroub2022-09-151-1/+1
| | | | | Force using english for error messages (i.e ASCII) to avoid encoding mixup.
* MDEV-22647 Assertion `!check_audit_mask(mysql_global_audit_mask, ↵Sergei Golubchik2022-09-141-2/+0
| | | | | | | | | | | | | | | | | event_class_mask)' check_audit_mask(mysql_global_audit_mask, event_class_mask) is tested in mysql_audit_general_log() and then assert in mysql_audit_acquire_plugins() verifies that the condition still holds. But this code path is not protected by LOCK_audit_mask, so mysql_global_audit_mask can change its value between the if() and the assert. That is, the assert is invalid and will fire if the audit plugin is unloaded concurrently with mysql_audit_general_log(). Nothing bad will happen in this case though, we'll just do a useless loop over all remaining installed audit plugins. That is, the fix is simply to remove the assert.
* Add missing comment and remove unnecessary initializationAnel Husakovic2022-09-142-1/+1
| | | | | | | | - Commit c8948b0d0db4 introduced `get_one_variable()` - updating missing argument. - Remove caller setting of empty string in `rpl_filter`, since underlying functions will do the same (commit 9584cbe7fcc4 introduced). Reviewed by: <brandon.nesterenko@mariadb.com>
* MDEV-29509 execute granted indirectly (via roles) doesn't always workVicențiu Ciorbaru2022-09-143-14/+13
| | | | | | | | | | | | | | | | | | | The issue manifests due to a bug in mysql_routine_grant. This was a side effect of e46eea8660fb which fixed the problem of not giving appropriate error message (ER_NONEXISTING_PROC_GRANT) when a routine grant existed due to role inheritance. When granting a routine privilege, it is possible to have a GRANT_NAME entry already created from an inherited role, but with it's init_privs set to 0. In this case we must not create a *new* grant entry, but we must edit this grant entry to set its init_privs. Note that this case was already covered by MDEV-29458, however due to a forgotten "flush privileges;" the actual code path never got hit. Remove the flush privilege command as it was never intended to be there in the first place.
* cleanup: indentation and whitespace fixesVicențiu Ciorbaru2022-09-141-12/+11
|
* MDEV-29458: Role grant commands do not propagate all grantsVicențiu Ciorbaru2022-09-144-95/+406
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There was an issue in updating in-memory role datastructures when propagating role grants. The issue is that changing a particular role's privilege (on any privilege level, global, database, etc.) was done such that it overwrote the entire set of bits for that particular level of privileges. For example: grant select on *.* to r1 -> sets the access bits to r1 to select, regardless of what bits were present for role r1 (inherited from any other roles). Before this fix, the rights of role r1 were propagated to any roles r1 was granted to, however the propagated rights did *not* include the complete rights r1 inherited from its own grants. For example: grant r2 to r1; grant select on *.* to r2; grant insert on *.* to r1; # This command completely disregards the # select privilege from r2. In order to correct this, ensure that before rights are propagated onwards, that the current's role rights have been updated from its grants. Additionally, the patch exposed a flaw in the DROP ROLE code. When deleting a role we removed all its previous grants, but what remained was the actual links of roles granted to the dropped role. Having these links present when propagating grants meant that we would have leftover ACL_xxx entries. Ensure that the links are removed before propagating grants.
* MDEV-29465: Inherited columns privs for roles wrongly set mysql.tables_priv ↵Vicențiu Ciorbaru2022-09-143-9/+90
| | | | | | | | | | | | | | | | | | column There was a bug in the ACL internal data structures GRANT_TABLE and GRANT_COLUMN. The semantics are: GRANT_TABLE::init_cols and GRANT_COLUMN::init_privs represent the bits that correspond to the privilege bits stored in the physical tables. The other struct members GRANT_TABLE::cols and GRANT_COLUMN::privs represent the actual access bits, as they may be modified through role grants. The error in logic was mixing the two fields and thus we ended up storing the logical access bits in the physical tables, instead of the physical (init_xxx) bits. This caused subsequent DBUG_ASSERT failures when dropping the involved roles.
* MDEV-29479 I_S.INNODB_SYS_TABLESPACES doesn't have temporary tablespace ↵Thirunarayanan Balathandayuthapani2022-09-143-0/+18
| | | | | | | information - innodb_sys_tablespaces view in information schema displays temporary tablespace information too.
* mysql_release: treat alma|rocky as centos|rhelSergei Golubchik2022-09-131-2/+2
|
* MDEV-23801 Assertion failed in btr_pcur_store_position()Marko Mäkelä2022-09-133-2/+87
| | | | | | | btr_lift_page_up(): If the leaf page only contains a hidden metadata record for MDEV-11369 instant ADD COLUMN, convert the table to the canonical format like we are supposed to do whenever the table becomes empty.
* A cleanup for MDEV-29446 Change SHOW CREATE TABLE to display default collationAlexander Barkov2022-09-131-1/+1
| | | | | | Recording test results according to MDEV-29446 changes: storage/rocksdb/mysql-test/rocksdb/r/use_direct_io_for_flush_and_compaction.result
* MDEV-29522 RocksDB RPM doesn't get built on Rocky Linux and AlmaSergei Golubchik2022-09-131-1/+1
| | | | use correct python on rocky8 and alma8
* MDEV-29520 heap-use-after-poison in row_merge_spatial_rows()Marko Mäkelä2022-09-133-2/+28
| | | | | row_merge_read_clustered_index(): Do not call mem_heap_empty(row_heap) before row_merge_spatial_rows() has been able to read the data.
* MDEV-29446 Change SHOW CREATE TABLE to display default collationAlexander Barkov2022-09-121087-47957/+47936
|
* MDEV-29507 InnoDB: Failing assertion: table->n_rec_locks == 0Marko Mäkelä2022-09-123-0/+26
| | | | | | lock_place_prdt_page_lock(): Do not place locks on temporary tables. Temporary tables can only be accessed from one connection, so it does not make any sense to acquire any transactional locks on them.
* MDEV-29433 innodb.lock_delete_updated is unstableVlad Lesin2022-09-082-8/+8
| | | | | | | | | Use suspend thread syncpoint instead of include/wait_condition.inc to make sure DELETE created waiting lock before the next UPDATE begins locking. This is backport of commit 0fa4dd0747bb12479662952e7fe6ae2fffff737b from 10.6.
* MDEV-28605: Change wrong plugin config installation location (#2160)Tuukka Pasanen2022-09-074-4/+4
| | | | | | | | | | | | Preset include directory for configuration files below MariaDB 10.5 is /etc/mysql/conf.d Change installation location wrong plugin installation location from /etc/mysql/mariadb.d to default include directory /etc/mysql/conf.d. Change makes gssapi-server, oqgraph, rocksdb and tokudb plugins loading work after installation NOTE TO MERGERS: This commit should be upstream to MariaDB 10.4 only! Merging to MariaDB 10.5 and above leads to major problems.
* MDEV-29342 Assertion failure in file que0que.cc line 728Thirunarayanan Balathandayuthapani2022-09-063-1/+29
| | | | | | | | - During shutdown, InnoDB fts fails to update synced doc id when there is only one doc id about to sync. While starting the server, InnoDB fetches the already synced doc id from config table. In the subsequent sync operation, InnoDB fails with DB_DUPLICATE_KEY error.
* MDEV-28827 Minor unsafe statement warning message improvementAndrei2022-09-031-1/+1
| | | | | The replication unsafe warning's pattern gets corrected in the punctuation part.
* MDEV-28530: Revoking privileges from a non-existing user on a master breaks ↵Brandon Nesterenko2022-09-035-0/+143
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | replication on the slave in the presence of replication filters Problem: ======== Replication can break while applying a query log event if its respective command errors on the primary, but is ignored by the replication filter within Grant_tables on the replica. The bug reported by MDEV-28530 shows this with REVOKE ALL PRIVILEGES using a non-existent user. The primary will binlog the REVOKE command with an error code, and the replica will think the command executed with success because the replication filter will ignore the command while accessing the Grant_tables classes. When the replica performs an error check, it sees the difference between the error codes, and replication breaks. Solution: ======== If the replication filter check done by Grant_tables logic ignores the tables, reset thd->slave_expected_error to 0 so that Query_log_event::do_apply_event() can be made aware that the underlying query was ignored when it compares errors. Note that this bug also effects DROP USER if not all users exist in the provided list, and the patch fixes and tests this case. Reviewed By: ============ andrei.elkin@mariadb.com
* MDEV-27172 Prefix indices on Spider tables may lead to wrong query resultsNayuta Yanagisawa2022-09-017-251/+334
| | | | | | | | | | Spider converts HA_READ_KEY_EXACT to the equality (=) in the function spider_db_append_key_where_internal() but the conversion is not necessarily correct for tables with prefix indices. We fix the bug by converting HA_READ_KEY_EXACT to 'LIKE "foo%"' when a target key is a prefix key. The fix is partly inspired by FEDERATED. See ha_federated::create_where_from_key() for more details.
* MDEV-13668 fixup: Remove test work-aroundsMarko Mäkelä2022-08-312-11/+4
|
* MDEV-28592 disks plugin (postfix - remove tabs)Daniel Black2022-08-311-7/+7
|
* MDEV-28592 disks plugin - getmntinfo (BSD) & getmntent (AIX)Daniel Black2022-08-316-55/+211
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Thanks to references from Brad Smith, BSDs use getmntinfo as a system call for mounted filesystems. Most BSDs return statfs structures, (and we use OSX's statfs64), but NetBSD uses a statvfs structure. Simplify Linux getmntent_r to just use getmntent. AIX uses getmntent. An attempt at writing Solaris compatibility with a small bit of HPUX compatibility was made based on man page entries only. Fixes welcome. statvfs structures now use f_bsize for consistency with statfs Test case adjusted as PATH_MAX is OS defined (e.g. 1023 on AIX) Fixes: 0ee5cf837e3a0464acc20db2a2aee0adaff3f2ac also fixes: MDEV-27818: Disk plugin does not show zpool mounted devices This is because zpool mounted point don't begin with /. Due to the proliferation of multiple filesystem types since this was written, we restrict the entries listed in the disks plugin to excude: * read only mount points (no point monitoring, and includes squash, snaps, sysfs, procfs, cgroups...) * mount points that aren't directories (excludes /etc/hostname and similar mounts in containers). (getmntent (Linux/AIX) only) * exclude systems where there is no capacity listed (excludes various virtual filesystem types). Reviewer: Sergei Golubchik
* MDEV-13888: innodb_fts.innodb_fts_plugin failedMarko Mäkelä2022-08-302-25/+35
| | | | | | | | Add ORDER BY to make the test deterministic. Add FLUSH TABLES to avoid crash recovery warnings about the table mysql.plugin. This tends to occur on Valgrind, where the server shutdown could presumably time out, resulting in a forced kill.
* MDEV-29409 Buffer overflow in my_wc_mb_filename() on RENAME TABLEMarko Mäkelä2022-08-303-6/+33
| | | | | | | | | | | | dict_table_rename_in_cache(), dict_table_get_highest_foreign_id(): Reserve sufficient space for the fkid[] buffer, and ensure that the fkid[] will be NUL-terminated. The fkid[] must accommodate both the database name (which is already encoded in my_charset_filename) and the constraint name (which must be converted to my_charset_filename) so that we can check if it is in the format databasename/tablename_ibfk_1 (all encoded in my_charset_filename).
* MDEV-29258 Failing assertion for name length on RENAME TABLEMarko Mäkelä2022-08-305-8/+31
| | | | | | | | | | | | | trx_undo_page_report_rename(): Use the correct maximum length of a table name. Both the database name and the table name can be up to NAME_CHAR_LEN (64 characters) times 5 bytes per character in the my_charset_filename encoding. They are not encoded in UTF-8! fil_op_write_log(): Reserve the correct amount of log buffer for a rename operation. The file name will be appended by mlog_catenate_string(). rename_file_ext(): Reserve a large enough buffer for the file names.
* MDEV-29403 innodb.innodb_sys_semaphore_waits fails with wrong errno 5014bb-10.3-elenstElena Stepanova2022-08-281-2/+2
| | | | take into account C/C specific CR_ERR_NET_WRITE error
* MDEV-29350 Crash when IN predicand is used in eliminated GROUP BY clauseIgor Babaev2022-08-253-1/+192
| | | | | | | | | | | | | | | | This bug affected some queries with an IN/ALL/ANY predicand or an EXISTS predicate whose subquery contained a GROUP BY clause that could be eliminated. If this clause used a IN/ALL/ANY predicand whose left operand was a single-value subquery then execution of the query caused a crash of the server after invokation of remove_redundant_subquery_clauses(). The crash was caused by an attempt to exclude the unit for the single-value subquery from the query tree for the second time by the function Item_subselect::eliminate_subselect_processor(). This bug had been masked by the bug MDEV-28617 until a fix for the latter that properly excluded units was pushed into 10.3. Approved by Oleksandr Byelkin <sanja@mariadb.com>
* MDEV-29384 Hangs caused by innodb_adaptive_hash_index=ONMarko Mäkelä2022-08-251-40/+1
| | | | | | | | | | | | buf_defer_drop_ahi(): Remove. Ever since commit c7f8cfc9e733517cff4aaa6f6eaca625a3afc098 (MDEV-27700) it is safe to invoke btr_search_drop_page_hash_index(block, true) to remove an orphan adaptive hash index. Any attempt to upgrade page latches is prone to deadlocks. Recently, we observed a few hangs that involved nothing more than a small table consisting of one clustered index page, one secondary index page and some undo pages.
* update a global_suppressions() listSergei Golubchik2022-08-251-1/+1
| | | | followup for "remove invalid options from warning messages"
* btr_search_drop_page_hash_index(): Remove a racey debug checkMarko Mäkelä2022-08-241-4/+1
|
* MDEV-29319 Assertion failure size_in_header >= space.free_limit in ↵Thirunarayanan Balathandayuthapani2022-08-241-1/+1
| | | | | | fsp_get_available_space_in_free_extents() - Don't remove the constant parameter in fsp_get_available_space_in_free_extents()
* MDEV-29291 Assertion `!table->fts' failed in dict_table_can_be_evicted on ↵Thirunarayanan Balathandayuthapani2022-08-241-1/+1
| | | | | | | | | | SHUTDOWN - InnoDB fts table initially added to LRU table cache while creating the table. Later, table was marked as non-evicted when we add the table to fts optimizer list. Before marking the table as non-evicted, master thread can try to evict the fts table.
* MDEV-29319 Assertion failure size_in_header >= space.free_limit in ↵Thirunarayanan Balathandayuthapani2022-08-241-1/+3
| | | | | | | | | fsp_get_available_space_in_free_extents() - Race condition between fsp_get_available_space_in_free_extents() and fsp_try_extend_data_file() while accessing space.free_limit. Before calling fsp_get_available_space_in_free_extents(), take shared lock on space->latch.
* MDEV-28294: set default role bypasses Replicate_Wild_Ignore_Table: mysql.%Brandon Nesterenko2022-08-223-12/+176
| | | | | | | | | | | | | | | | | | | | | | Problem: ======== When replicating SET DEFAULT ROLE, the pre-update check (i.e. that in set_var_default_role::check()) tries to validate the existence of the given rules/user even when the targeted tables are ignored. When previously issued CREATE USER/ROLE commands are ignored by the replica because of the replication filtering rules, this results in an error because the targeted data does not exist. Solution: ======== Before checking that the given roles/user exist of a SET DEFAULT ROLE command, first ensure that the mysql.user and mysql.roles_mapping tables are not excluded by replication filters. Reviewed By: ============ Andrei Elkin <andrei.elkin@mariadb.com> Sergei Golubchik <serg@mariadb.com>
* MDEV-27700 ASAN: Heap_use_after_free in btr_search_drop_page_hash_index()Thirunarayanan Balathandayuthapani2022-08-225-22/+63
| | | | | | | | | | | | | | | | | | | | Reason: ======= Race condition between btr_search_drop_hash_index() and btr_search_lazy_free(). One thread does resizing of buffer pool and clears the ahi on all pages in the buffer pool, frees the index and table while removing the last reference. At the same time, other thread access index->heap in btr_search_drop_hash_index(). Solution: ========= Acquire the respective ahi latch before checking index->freed() btr_search_drop_page_hash_index(): Added new parameter to indicate that drop ahi entries only if the index is marked as freed btr_search_check_marked_free_index(): Acquire all ahi latches and return true if the index was freed
* MDEV-13013 fixup: Adjust a testMarko Mäkelä2022-08-221-10/+10
|
* MDEV-29043 mariabackup --compress hangsMarko Mäkelä2022-08-191-8/+43
| | | | | | | | | | | | | | | | | | Even though commit b817afaa1c148437e1016d1981f138d0c46ccbc8 passed the test mariabackup.compress_qpress, that test turned out to be too small to reveal one more problem that had previously been prevented by the existence of ctrl_mutex. I did not realize that there can be multiple concurrent callers to compress_write(). One of them is the log copying thread; further callers are data file copying threads (default: --parallel=1). By default, there is only one compression worker thread (--compress-threads=1). compress_write(): Fix a race condition between threads that would use the same worker thread object. Make thd->data_avail contain the thread identifier of the submitter, and add thd->avail_cond to notify other compress_write() threads that are waiting for a slot.
* MDEV-13013 InnoDB unnecessarily extends data filesThirunarayanan Balathandayuthapani2022-08-178-49/+66
| | | | | | | | - While creating a new InnoDB segment, allocates the extent before allocating the inode or page allocation even though the pages are present in fragment segment. This patch does reserve the extent when InnoDB ran out of fragment pages in the tablespace.
* MDEV-29008 Server crash or assertion `field' failed in ↵Nayuta Yanagisawa2022-08-164-2/+80
| | | | | | | | | | | spider_db_open_item_ident / group by handler ha_spider::field_exchange() returns NULL and that results in a crash or a assertion failure in spider_db_open_item_ident(). In the first place, there seems to be no need to call field_exchange() for printing an identity (column name with alias). Thus, we simply remove the call.
* Merge branch '10.3' into bb-10.3-releaseOleksandr Byelkin2022-08-155-18/+53
|\
| * bump the VERSIONDaniel Bartholomew2022-08-141-1/+1
| |
| * MDEV-27151: JSON_VALUE() does not parse NULL properties properlyRucha Deodhar2022-08-113-1/+52
| | | | | | | | | | | | Analysis: JSON_VALUE() returns "null" string instead of NULL pointer. Fix: When the type is JSON_VALUE_NULL (which is also a scalar) set null_value to true and return 0 instead of returning string.
| * Remove Darwin CMake fileBrad Smith2022-08-101-16/+0
| | | | | | | | The file is now empty and thus serves no purpose.
* | Do not check symbol returned (or not and so there is some garbadge) by ↵mariadb-10.3.36Nayuta Yanagisawa2022-08-101-1/+1
| | | | | | | | mb_wc() if mb_wc() failed
* | my_safe_process: try to kill the process softly firstSergei Golubchik2022-08-101-2/+9
| | | | | | | | | | | | | | first SIGTERM and if the process didn't die in 10 seconds, SIGKILL it. This allows various tools like `rr`, `gcov`, `gprof`, etc to flush their data to disk properly
* | missing 'Sergei Golubchik2022-08-101-1/+1
| |
* | MDEV-23149 Server crashes in my_convert / ErrConvString::ptr / ↵Sergei Golubchik2022-08-105-10/+17
| | | | | | | | Item_char_typecast::check_truncation_with_warn