Commit graph

195681 commits

Author SHA1 Message Date
Marko Mäkelä
44fd2c4b24 Merge 10.5 into 10.6 2022-09-20 16:53:20 +03:00
Marko Mäkelä
0792aff161 Merge 10.4 into 10.5 2022-09-20 13:17:02 +03:00
Marko Mäkelä
0c0a569028 Merge 10.3 into 10.4 2022-09-20 12:38:25 +03:00
Alexander Barkov
5dcc56be4d MDEV-29561 SHOW CREATE TABLE produces syntactically incorrect structure 2022-09-20 11:02:36 +04:00
Marko Mäkelä
5d9d379329 MDEV-15020 fixup: Make trx_t::apply_log() truly ATTRIBUTE_COLD 2022-09-20 09:14:04 +03:00
Vlad Lesin
5ab78cf340 MDEV-29515 innodb.deadlock_victim_race is unstable
The test is unstable because 'UPDATE t SET b = 100' latches a page and
waits for 'upd_cont' signal in lock_trx_handle_wait_enter sync point, then
purge requests RW_X_LATCH on the same page, and then 'SELECT * FROM t
WHERE a = 10 FOR UPDATE' requests RW_S_LATCH, waiting for RW_X_LATCH
requested by purge. 'UPDATE t SET b = 100' can't release page latch as
it waits for upd_cont signal, which must be emitted after 'SELECT * FROM
t WHERE a = 10 FOR UPDATE' acquired RW_S_LATCH. So we have a deadlock,
which is resolved by finishing the debug sync point wait by timeout, and
the 'UPDATE t SET b = 100' releases it's record locks rolling back the
transaction, and 'SELECT * FROM t WHERE a = 10 FOR UPDATE' is finished
successfully instead of finishing by lock wait timeout.

The fix is to forbid purging during the test by opening read view in a
separate connection before the first insert into the table.

Besides, 'lock_wait_end' syncpoint is not needed, as it enough to wait
the end of the SELECT execution to let the UPDATE to continue.
2022-09-19 16:57:58 +03:00
Daniel Bartholomew
a762dad4ec
bump the VERSION 2022-09-19 09:38:01 -04:00
Andrew Hutchings
65b4a2afb8
MDEV-29426 Fix memory leak in CONNECT JSON/BSON (#2255)
* MDEV-29426 Fix memory leak in CONNECT JSON/BSON

If information is being gathered on JSON/BSON tables we leak the heap
allocated to the table class. With this fix we close and cleanup
instead, just as we do for XML tables.
2022-09-19 13:25:45 +01:00
Marko Mäkelä
5e959bc363 Fix clang -Wunused-but-set-variable 2022-09-19 13:30:52 +03:00
Marko Mäkelä
3ab4b260e1 Merge innodb.cmake to CMakeLists.txt
The reason why mysql/mysql-server@8020cfac20
split the files was some unit tests that never existed in the
MariaDB Server code base. The storage/innobase/unittest/ works just fine
with this file.

This is reverting part of 2e814d4702
which applied InnoDB changes from MySQL 5.7.9.
2022-09-19 12:42:50 +03:00
Marko Mäkelä
73658eded3 Cleanup: Remove HAVE_IB_LINUX_FUTEX
The futex system calls were introduced in Linux 2.6.0,
which was released in December 2003. It should be safe to assume
that the system calls are always available on the Linux kernels
that MariaDB Server 10.3 would run on.
2022-09-19 12:36:19 +03:00
Marko Mäkelä
4c8b65db08 Cleanup: Remove INNODB_COMPILER_HINTS
There should be no point to disable branch prediction hints or prefetch.
2022-09-19 12:29:16 +03:00
Marko Mäkelä
c22dff21a5 InnoDB cleanup: Replace UNIV_LINUX, UNIV_SOLARIS, UNIV_AIX
Let us use the normal platform-specific preprocessor symbols
__linux__, __sun__, _AIX instead of some homebrew ones.

The preprocessor symbol UNIV_HPUX must have lost its meaning
by f6deb00a56 (note: the symbol
UNIV_HPUX10 is being checked for, but only UNIV_HPUX is defined).
2022-09-19 12:20:53 +03:00
Marko Mäkelä
fed0d85de7 MDEV-29559 Recovery of INSERT_HEAP_DYNAMIC into secondary index fails
log_phys_t::apply(): When parsing an INSERT_HEAP_DYNAMIC record,
allow ll==rlen to hold for the last part. A secondary index record
may inherit all preceding bytes from the infimum pseudo-record.

For INSERT_HEAP_REDUNDANT, some header bytes will always be present
because the header will never be copied from the page infimum.
We will tolerate ll==rlen also in that case to be consistent with
the parsing of INSERT_HEAP_DYNAMIC.
2022-09-19 11:46:25 +03:00
Marko Mäkelä
bbf81b51f2 Correct typos in a function comment
Thanks to Thirunarayanan Balathandayuthapani for spotting this.
2022-09-19 10:23:57 +03:00
Daniel Black
3c8674edcc Merge 10.4 into 10.5 2022-09-19 17:03:17 +10:00
Ian Gilfillan
01d78d31ca Update 10.5 HELP contents 2022-09-19 16:57:22 +10:00
Ian Gilfillan
ef784c4ea2 Update 10.4 HELP contents 2022-09-19 16:57:10 +10:00
Daniel Black
5e270ca28d MDEV-16708: ps_missed_cmds test - HELP deconflict
To make it possible to update the HELP text of UPDATE without
changing this test every time, the test is changed to look
for a faked help topic. A non-existant help topic generates
different metadata and wasn't suitable as a test.

Requested by Ian Gilfillan.

Reviewed by Dmitry Shulga
2022-09-15 18:32:42 +10:00
Alexander Barkov
23a8654cdb A cleanup for MDEV-29446 Change SHOW CREATE TABLE to display default collation
Recording test results according to MDEV-29446 changes:

  mysql-test/suite/galera/r/galera_rsu_wsrep_desync.result
  mysql-test/suite/galera/r/galera_sync_wait_show.result
  mysql-test/suite/galera/r/lp1376747-4.result
  mysql-test/suite/s3/replication_partition.result
  mysql-test/suite/s3/replication_stmt.result
2022-09-15 12:20:50 +04:00
Vladislav Vaintroub
32bab2ce05 MDEV-29543 Windows: Unreadable dlerror() message on localized OS
Force using english for error messages (i.e ASCII) to avoid encoding
mixup.
2022-09-15 09:39:05 +02:00
Alexander Barkov
2fd4d25d8f A cleanup for MDEV-29446 Change SHOW CREATE TABLE to display default collation
Recording test results according to MDEV-29446 changes:

  mysql-test/suite/galera/r/galera-features#117.result
  mysql-test/suite/galera/r/galera_can_run_toi.result
  mysql-test/suite/galera/r/wsrep_strict_ddl.result
  mysql-test/suite/s3/alter.result
  mysql-test/suite/s3/arguments.result
  mysql-test/suite/s3/basic.result
  mysql-test/suite/s3/encryption.result
  mysql-test/suite/s3/innodb.result
  mysql-test/suite/s3/mysqldump.result
  mysql-test/suite/s3/partition.result
  mysql-test/suite/s3/partition_move.result
  mysql-test/suite/s3/replication_delayed.result
  mysql-test/suite/s3/replication_mixed.result
2022-09-15 07:44:35 +04:00
Sergei Golubchik
35e18c240b race condition in the test
this test loads sql_errlog plugin. then in a second connection
it triggers an error, this locks the plugin in that thd.
then the plugin is uninstalled in the default connection.
but that doesn't unload the plugin, as it's still locked. it'll
auto-unload after the foo connection is closed. without an explicit
disconnect it is closed after mysqltest exits and the post-test check
might still see sql_errlog not fully unoaded.
2022-09-14 19:59:05 +02:00
Sergei Golubchik
beffef9f00 MDEV-22647 Assertion `!check_audit_mask(mysql_global_audit_mask, 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.
2022-09-14 19:15:44 +02:00
Alexander Barkov
b65ffe156a A cleanup for MDEV-29446 Change SHOW CREATE TABLE to display default collation
Recording test results according to MDEV-29446 changes:

  mysql-test/suite/maria/max_length.result
2022-09-14 19:01:26 +04:00
Anel Husakovic
b7928f7566 Add missing comment and remove unnecessary initialization
- Commit c8948b0d0d introduced `get_one_variable()` - updating missing argument.
- Remove caller setting of empty string in `rpl_filter`, since underlying functions will do the same
  (commit 9584cbe7fc introduced).

Reviewed by: <brandon.nesterenko@mariadb.com>
2022-09-14 15:58:08 +02:00
Alexander Barkov
fe844c16b6 Merge remote-tracking branch 'origin/10.4' into 10.5 2022-09-14 16:24:51 +04:00
Vicențiu Ciorbaru
16b2bb909a MDEV-29509 execute granted indirectly (via roles) doesn't always work
The issue manifests due to a bug in mysql_routine_grant. This was a side
effect of e46eea8660 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.
2022-09-14 14:40:50 +03:00
Vicențiu Ciorbaru
5ad8cd93b7 cleanup: indentation and whitespace fixes 2022-09-14 14:40:50 +03:00
Vicențiu Ciorbaru
7735ba7666 MDEV-29458: Role grant commands do not propagate all grants
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.
2022-09-14 14:40:50 +03:00
Vicențiu Ciorbaru
145932a57b MDEV-29465: Inherited columns privs for roles wrongly set mysql.tables_priv 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.
2022-09-14 14:40:50 +03:00
Marko Mäkelä
3e3cfa8934 MDEV-18589 Assertion on info.page_size failed in xb_delta_open_matching_space
xb_read_delta_metadata(): For ROW_FORMAT=COMPRESSED tables, initialize
the info.zip_size with the physical page size and let info.page_size
remain the logical page size, like xb_delta_open_matching_space()
expects it to be ever since
commit 0a1c3477bf (MDEV-18493).
2022-09-14 11:39:30 +03:00
Thirunarayanan Balathandayuthapani
d7aefc0fab MDEV-29479 I_S.INNODB_SYS_TABLESPACES doesn't have temporary tablespace information
- innodb_sys_tablespaces view in information schema displays temporary
tablespace information too.
2022-09-14 13:37:14 +05:30
Alexander Barkov
289105e282 A cleanup for MDEV-29446 Change SHOW CREATE TABLE to display default collation
Recording test results according to MDEV-29446 changes:

  mysql-test/suite/galera/r/MDEV-25494.result
  mysql-test/suite/galera/r/galera_ctas.result
  mysql-test/suite/galera/r/galera_schema.result
  mysql-test/suite/galera_3nodes/r/galera_wsrep_schema.result
  mysql-test/suite/galera_sr/r/galera_sr_create_drop.result
2022-09-14 08:00:56 +04:00
Sergei Golubchik
5af7149ff5 mysql_release: treat alma|rocky as centos|rhel 2022-09-13 16:29:25 +02:00
Marko Mäkelä
18795f5512 Merge 10.3 into 10.4 2022-09-13 16:36:38 +03:00
Marko Mäkelä
68ce0231ad MDEV-23801 Assertion failed in btr_pcur_store_position()
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.
2022-09-13 15:46:40 +03:00
Alexander Barkov
4c14243373 A cleanup for MDEV-29446 Change SHOW CREATE TABLE to display default collation
Recording test results according to MDEV-29446 changes:

storage/rocksdb/mysql-test/rocksdb/r/use_direct_io_for_flush_and_compaction.result
2022-09-13 12:44:23 +04:00
Sergei Golubchik
83175219c3 MDEV-29522 RocksDB RPM doesn't get built on Rocky Linux and Alma
use correct python on rocky8 and alma8
2022-09-13 08:56:18 +02:00
Marko Mäkelä
fc794fd8ff MDEV-29520 heap-use-after-poison in row_merge_spatial_rows()
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.
2022-09-13 08:58:34 +03:00
Marko Mäkelä
fd0bdd3180 Merge 10.5 into 10.6 2022-09-13 08:40:05 +03:00
Alexander Barkov
f1544424de MDEV-29446 Change SHOW CREATE TABLE to display default collation 2022-09-12 22:10:39 +04:00
Marko Mäkelä
0ccb95c2a9 Merge 10.5 into 10.6 2022-09-12 15:01:55 +03:00
Vladislav Vaintroub
fb70bb44d0 MDEV-29513 avoid useless os_thread_sleep() during srv_purge_shutdown()
use waitable_task.wait() function to wait for the end of previous purge
2022-09-12 12:24:26 +02:00
Marko Mäkelä
667df98c3e MDEV-29507 InnoDB: Failing assertion: table->n_rec_locks == 0
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.
2022-09-12 09:27:46 +03:00
Andrei
bc12478a9a MDEV-24660 MYSQL_BIN_LOG::cleanup(): Assertion `b->xid_count == 0'
The shutdown time assert was caused by untimely deactivation of
the binlog background thread and related structs destruction.
It could specifically occur when a transaction is replication unsafe
and has to be completed with a ROLLBACK event in binlog.

This gets fixed with the binlog background thread stop relocation
to a point and user transactions have been completed.
A test case is added to binlog.binlog_checkpoint which
also receives as a bonus a minor correction to reactivate a MDEV-4322 test
case that originally required a shutdown phase (that ceased to do).
2022-09-09 19:22:41 +03:00
Nayuta Yanagisawa
70021737f5 MDEV-27172 fixup: spider/bugfix.mdev_27172 failed with --ps-protocol 2022-09-08 21:06:55 +09:00
Marko Mäkelä
d2e649aec2 MDEV-29440 InnoDB instant ALTER TABLE recovery must use READ UNCOMMITTED
In commit 8f8ba75855 (MDEV-27234)
the data dictionary recovery was changed to use READ COMMITTED
so that table-rebuild operations (OPTIMIZE TABLE, TRUNCATE TABLE,
some forms of ALTER TABLE) would be recovered correctly.

However, for operations that avoid a table rebuild thanks to
being able to instantly ADD, DROP or reorder columns, recovery
must use the READ UNCOMMITTED isolation level so that changes to
the hidden metadata record can be rolled back.

We will detect instant operations by detecting uncommitted changes
to SYS_COLUMNS in case there is no uncommitted change of SYS_TABLES.ID
for the table. In any table-rebuilding DDL operation, the SYS_TABLES.ID
(and likely also the table name) will be updated.

As part of rolling back the instant ALTER TABLE operation, after the
operation on the hidden metadata record has been rolled back, a rollback
of an INSERT into SYS_COLUMNS in row_undo_ins_remove_clust_rec() will
invoke trx_t::evict_table() to discard the READ UNCOMMITTED definition
of the table. After that, subsequent recovery steps will load and use
the correct table definition.

Reviewed by: Thirunarayanan Balathandayuthapani
Tested by: Matthias Leich
2022-09-08 14:57:50 +03:00
Vlad Lesin
43745b7e17 MDEV-29433 innodb.lock_delete_updated is unstable
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 0fa4dd0747
from 10.6.
2022-09-08 13:36:30 +03:00
Vlad Lesin
0fa4dd0747 MDEV-29433 innodb.lock_delete_updated is unstable
Use suspend thread syncpoint instead of include/wait_condition.inc to
make sure DELETE created waiting lock before the next UPDATE begins
locking.
2022-09-08 11:48:13 +03:00