Commit graph

192460 commits

Author SHA1 Message Date
Sergei Petrunia
2f650fb955 MDEV-17399: JSON_TABLE: Fix the problem with cross-nested-join dependency
Fix for for the problem with
- Cross-outer-join dependency
- dead-end join prefix
- join order pruning

See the comments in the patch for detailed description
2021-04-21 10:21:43 +04:00
Alexey Botchkov
e9fd327ee3 MDEV-17399 Add support for JSON_TABLE.
The specific table handler for the table functions was introduced,
and used to implement JSON_TABLE.
2021-04-21 10:21:43 +04:00
Oleksandr Byelkin
a3099a3b4a MDEV-24312 master_host has 60 character limit, increase to 255 bytes
Also increase user name up to 128.

The work was started by Rucha Deodhar <rucha.deodhar@mariadb.com>,
contains audit plugin fixes by Alexey Botchkov <holyfoot@askmonty.org>.
2021-04-20 16:36:56 +02:00
Marko Mäkelä
8751aa7397 MDEV-25404: ssux_lock_low: Introduce a separate writer mutex
Having both readers and writers use a single lock word in
futex system calls caused performance regression compared to
SRW_LOCK_DUMMY (mutex and 2 condition variables).
A contributing factor is that we did not accurately keep
track of the number of waiting threads and thus had to invoke
system calls to wake up any waiting threads.

SUX_LOCK_GENERIC: Renamed from SRW_LOCK_DUMMY. This is the
original implementation, with rw_lock (std::atomic<uint32_t>),
a mutex and two condition variables. Using a separate writer
mutex (as described below) is not possible, because the mutex ownership
in a buf_block_t::lock must be able to transfer from a write submitter
thread to an I/O completion thread, and pthread_mutex_lock() may assume
that the submitter thread is recursively acquiring the mutex that it
already holds, while in reality the I/O completion thread is the real
owner. POSIX does not define an interface for requesting a mutex to
be non-recursive.

On Microsoft Windows, srw_lock_low will remain a simple wrapper of
SRWLOCK. On 32-bit Microsoft Windows, sizeof(SRWLOCK)=4 while
sizeof(srw_lock_low)=8.

On other platforms, srw_lock_low is an alias of ssux_lock_low,
the Simple (non-recursive) Shared/Update/eXclusive lock.

In the futex-based implementation of ssux_lock_low (Linux, OpenBSD,
Microsoft Windows), we shall use a dedicated mutex for exclusive
requests (writer), and have a WRITER flag in the 'readers' lock word
to inform that a writer is holding the lock or waiting for the lock to
be granted. When the WRITER flag is set, all lock requests must acquire
the writer mutex. Normally, shared (S) lock requests simply perform a
compare-and-swap on the 'readers' word.

Update locks are implemented as a combination of writer mutex
and a normal counter in the 'readers' lock word. The conflict between
U and X locks is guaranteed by the writer mutex.
Unlike SUX_LOCK_GENERIC, wr_u_downgrade() will not wake up any pending
rd_lock() waits. They will wait until u_unlock() releases the writer mutex.

The ssux_lock_low is always wrapped by sux_lock (with a recursion count
of U and X locks), used for dict_index_t::lock and buf_block_t::lock.
Their memory footprint for the futex-based implementation will increase
by sizeof(srw_mutex), or 4 bytes.

This change addresses a performance regression in read-only benchmarks,
such as sysbench oltp_read_only. Also write performance was improved.

On 32-bit Linux and OpenBSD, lock_sys_t::hash_table will allocate
two hash table elements for each srw_lock (14 instead of 15 hash
table cells per 64-byte cache line on IA-32). On Microsoft Windows,
sizeof(SRWLOCK)==sizeof(void*) and there is no change.

Reviewed by: Vladislav Vaintroub
Tested by: Axel Schwenke and Vladislav Vaintroub
2021-04-19 18:15:49 +03:00
Marko Mäkelä
040c16ab8b MDEV-25404: Optimize srw_mutex on Linux, OpenBSD, Windows
On Linux, OpenBSD and Microsoft Windows, srw_mutex was an alias for a
rw-lock while we only need mutex functionality. Let us implement a
futex-based mutex with one bit for HOLDER and 31 bits for counting
waiting requests.

srw_lock::wr_unlock() can avoid waking up a waiter when no waiting
requests exist. (Previously, we only had 1-bit rw_lock::WRITER_WAITING
flag that could be wrongly cleared if multiple waiting wr_lock() exist.
Now we have no problem with up to 2,147,483,648 conflicting threads.)

On 64-bit Microsoft Windows, the advantage is that
sizeof(srw_mutex) is 4, while sizeof(SRWLOCK) would be 8.

Reviewed by: Vladislav Vaintroub
2021-04-19 18:03:17 +03:00
Daniel Black
af418bb9ef MDEV-25433: SKIP LOCKED should imply NOWAIT
This also means SKIP LOCKED is compatible with the NOWAIT/
WAIT n syntax consisten with the MySQL-8.0 implementation.
2021-04-19 14:04:02 +10:00
Jan Lindström
bfedf1eb4b Improve Galera SST tests
* Table should have primary key
* Enable wsrep_sync_wait before final selects
* Enable autocommit before final selects.
* Fix joiner monitoring in case of mysqldump.
* Add wait_conditions to stabilize
2021-04-18 16:47:30 +03:00
Alexey Yurchenko
fd9ca569f2 MDEV-25359 : Improve mariabackup SST script compliance with native MariaDB SSL practices and configuration.
1. Pass joiner's authentication information to donor together with address
   in State Transfer Request. This allows joiner to authenticate donor on
   connection. Previously joiner would accept data from anywhere.

2. Deprecate custom SSL configuration variables tca, tcert and tkey in favor
   of more familiar ssl-ca, ssl-cert and ssl-key. For backward compatibility
   tca, tcert and tkey are still supported.

3. Allow falling back to server-wide SSL configuration in [mysqld] if no SSL
   configuration is found in [sst] section of the config file.

4. Introduce ssl-mode variable in [sst] section that takes standard values
   and has following effects:
    - old-style SSL configuration present in [sst]: no effect
      otherwise:
    - ssl-mode=DISABLED or absent: retains old, backward compatible behavior
      and ignores any other SSL configuration
    - ssl-mode=VERIFY*: verify joiner's certificate and CN on donor,
                        verify donor's secret on joiner
                        (passed to donor via State Transfer Request)
                        BACKWARD INCOMPATIBLE BEHAVIOR
    - anything else enables new SSL configuration convetions but does not
      require verification

    ssl-mode should be set to VERIFY only in a fully upgraded cluster.

    Examples:

    [mysqld]
    ssl-cert=/path/to/cert
    ssl-key=/path/to/key
    ssl-ca=/path/to/ca

    [sst]

     -- server-wide SSL configuration is ignored, SST does not use SSL

    [mysqld]
    ssl-cert=/path/to/cert
    ssl-key=/path/to/key
    ssl-ca=/path/to/ca

    [sst]
    ssl-mode=REQUIRED

     -- use server-wide SSL configuration for SST but don't attempt to
        verify the peer identity

    [sst]
    ssl-cert=/path/to/cert
    ssl-key=/path/to/key
    ssl-ca=/path/to/ca
    ssl-mode=VERIFY_CA

     -- use SST-specific SSL configuration for SST and require verification
        on both sides

Reviewed-by: Jan Lindström <jan.lindstrom@mariadb.com>
2021-04-17 10:03:14 +03:00
Sergei Petrunia
2656e87682 Cleanup: fake_select_lex->select_number=FAKE_SELECT_LEX_ID, not [U]INT_MAX
SELECT_LEX objects that are "fake_select_lex" (i.e read UNION output)
used both INT_MAX and UINT_MAX as select_number.
- mysql_explain_union() assigned UINT_MAX
- st_select_lex_unit::add_fake_select_lex assigned INT_MAX

This didn't matter initially (before EXPLAIN FORMAT=JSON), because the
code  had no checks for this value.

EXPLAIN FORMAT=JSON and later other features did introduce checks for
select_number values. The check had to check for two constants and
looked really confusing.

This patch joins the two constants into one - FAKE_SELECT_LEX_ID.
2021-04-17 00:05:29 +03:00
Daniel Black
3f138fa3a5 Deb: Use build flag to enforce default charset as utf8mb4 2021-04-16 18:29:20 +10:00
Daniel Black
f862f39f46 Merge branch '10.5' into 10.6 2021-04-16 18:23:18 +10:00
Daniel Black
fce3e4ee8f Revert "Deb: Use build flag to enforce default charset as utf8mb4"
This reverts commit f26e3259a1.
2021-04-16 18:21:52 +10:00
Otto Kekäläinen
62f5a4f065 Deb: Update Conflicts/Replaces/Replaces for all upgrade scenarios
Update the debian/control file so that upgrades from basically any previous
version of MariaDB, MySQL or even Percona will run smoothly.

Based on extensive testing with all Debian and Ubuntu repos from past 5 years
enabled, and also having MariaDB.org, MySQL.com and Percona.com repos enabled.

Used tool check_for_missing_breaks_replaces.py from Salsa-CI to verify.

Fixes the following errors:
[ERROR] libmariadb-dev conflicts with libmariadb-client-lgpl-dev files: {'/usr/include/mariadb/mysql_version.h', '/usr/include/mariadb/errmsg.h', '/usr/share/man/man1/mariadb_config.1.gz', '/usr/include/mariadb/my_sys.h', '/usr/include/mariadb/mysqld_error.h', '/usr/include/mariadb/my_config.h', '/usr/lib/x86_64-linux-gnu/libmariadb.so', '/usr/lib/x86_64-linux-gnu/libmariadb.a', '/usr/include/mariadb/mysql.h', '/usr/include/mariadb/my_global.h', '/usr/include/mariadb/mysql/plugin_auth_common.h', '/usr/include/mariadb/mysql/plugin_auth.h', '/usr/include/mariadb/mysql_com.h', '/usr/bin/mariadb_config', '/usr/include/mariadb/mysql/client_plugin.h'}
[ERROR] libmariadb-dev conflicts with libmariadb-dev-compat files: {'/usr/share/man/man1/mysql_config.1.gz'}
[ERROR] mariadb-backup conflicts with mariadb-client-10.1 files: {'/usr/bin/mariabackup', '/usr/bin/mbstream'}
[ERROR] mariadb-client-10.6 conflicts with percona-server-server-5.6 files: {'/usr/share/man/man1/mysqlbinlog.1.gz', '/usr/bin/perror', '/usr/share/man/man1/mysqlhotcopy.1.gz', '/usr/share/man/man1/mysql_setpermission.1.gz', '/usr/share/man/man1/mysql_tzinfo_to_sql.1.gz', '/usr/share/man/man1/replace.1.gz', '/usr/share/man/man1/mysql_convert_table_format.1.gz', '/usr/bin/replace', '/usr/share/man/man1/resolve_stack_dump.1.gz', '/usr/share/man/man1/perror.1.gz', '/usr/bin/msql2mysql', '/usr/share/man/man1/mysql_secure_installation.1.gz', '/usr/share/man/man1/msql2mysql.1.gz', '/usr/bin/resolve_stack_dump'}
[ERROR] mariadb-client-10.6 conflicts with percona-xtradb-cluster-server-5.6 files: {'/usr/share/man/man1/mysqlbinlog.1.gz', '/usr/bin/perror', '/usr/share/man/man1/mysqlhotcopy.1.gz', '/usr/share/man/man1/mysql_setpermission.1.gz', '/usr/share/man/man1/mysql_tzinfo_to_sql.1.gz', '/usr/share/man/man1/replace.1.gz', '/usr/share/man/man1/mysql_convert_table_format.1.gz', '/usr/bin/replace', '/usr/share/man/man1/resolve_stack_dump.1.gz', '/usr/share/man/man1/perror.1.gz', '/usr/bin/msql2mysql', '/usr/share/man/man1/mysql_secure_installation.1.gz', '/usr/share/man/man1/msql2mysql.1.gz', '/usr/bin/resolve_stack_dump'}
[ERROR] mariadb-client-10.6 conflicts with percona-xtradb-cluster-server-5.7 files: {'/usr/share/man/man1/mysqlbinlog.1.gz', '/usr/bin/perror', '/usr/share/man/man1/replace.1.gz', '/usr/share/man/man1/mysql_tzinfo_to_sql.1.gz', '/usr/share/man/man1/mysql_plugin.1.gz', '/usr/bin/replace', '/usr/share/man/man1/resolve_stack_dump.1.gz', '/usr/share/man/man1/perror.1.gz', '/usr/share/man/man1/mysql_secure_installation.1.gz', '/usr/bin/resolve_stack_dump'}
[ERROR] mariadb-client-core-10.6 conflicts with mariadb-server-10.1 files: {'/usr/bin/my_print_defaults', '/usr/share/man/man1/my_print_defaults.1.gz'}
[ERROR] mariadb-client-core-10.6 conflicts with percona-server-server-5.6 files: {'/usr/bin/my_print_defaults', '/usr/share/man/man1/my_print_defaults.1.gz'}
[ERROR] mariadb-client-core-10.6 conflicts with percona-xtradb-cluster-server-5.6 files: {'/usr/bin/my_print_defaults', '/usr/share/man/man1/my_print_defaults.1.gz'}
[ERROR] mariadb-client-core-10.6 conflicts with percona-xtradb-cluster-server-5.7 files: {'/usr/bin/my_print_defaults', '/usr/share/man/man1/my_print_defaults.1.gz'}
[ERROR] mariadb-plugin-connect conflicts with mariadb-connect-engine-10.0 files: {'/usr/lib/mysql/plugin/ha_connect.so'}
[ERROR] mariadb-plugin-oqgraph conflicts with mariadb-oqgraph-engine-10.0 files: {'/usr/lib/mysql/plugin/ha_oqgraph.so'}
[ERROR] mariadb-server-10.6 conflicts with handlersocket-mysql-5.5 files: {'/usr/lib/mysql/plugin/handlersocket.so'}
[ERROR] mariadb-server-10.6 conflicts with percona-server-server-5.6 files: {'/usr/bin/myisampack', '/usr/lib/mysql/plugin/handlersocket.so', '/usr/share/mysql/errmsg-utf8.txt', '/usr/share/man/man1/myisamlog.1.gz', '/usr/share/man/man1/mysqld_multi.1.gz', '/usr/share/mysql/debian-start.inc.sh', '/usr/share/man/man1/myisamchk.1.gz', '/usr/bin/mysqlbinlog', '/usr/bin/mysql_convert_table_format', '/usr/lib/mysql/plugin/query_response_time.so', '/usr/bin/mysql_tzinfo_to_sql', '/usr/bin/mysql_setpermission', '/usr/bin/myisamchk', '/usr/share/man/man1/myisampack.1.gz', '/usr/lib/mysql/plugin/auth_pam.so', '/usr/bin/mysql_secure_installation', '/usr/bin/mysqld_multi', '/usr/share/man/man1/mysqld_safe.1.gz', '/usr/bin/mysqld_safe', '/usr/bin/myisamlog', '/usr/bin/mysqlhotcopy'}
[ERROR] mariadb-server-10.6 conflicts with percona-xtradb-cluster-server-5.6 files: {'/usr/bin/wsrep_sst_mysqldump', '/usr/bin/myisampack', '/usr/lib/mysql/plugin/handlersocket.so', '/usr/share/mysql/errmsg-utf8.txt', '/usr/share/man/man1/myisamlog.1.gz', '/usr/share/man/man1/mysqld_multi.1.gz', '/usr/share/mysql/debian-start.inc.sh', '/usr/share/man/man1/myisamchk.1.gz', '/usr/bin/mysqlbinlog', '/usr/bin/wsrep_sst_common', '/usr/bin/mysql_convert_table_format', '/usr/lib/mysql/plugin/query_response_time.so', '/usr/share/mysql/wsrep_notify', '/usr/bin/mysql_tzinfo_to_sql', '/usr/bin/mysql_setpermission', '/usr/bin/myisamchk', '/usr/share/man/man1/myisampack.1.gz', '/usr/lib/mysql/plugin/auth_pam.so', '/usr/bin/mysql_secure_installation', '/usr/bin/mysqld_multi', '/usr/share/man/man1/mysqld_safe.1.gz', '/usr/bin/wsrep_sst_rsync', '/usr/bin/mysqld_safe', '/usr/bin/myisamlog', '/usr/bin/mysqlhotcopy'}
[ERROR] mariadb-server-10.6 conflicts with percona-xtradb-cluster-server-5.7 files: {'/usr/bin/wsrep_sst_mysqldump', '/usr/bin/myisampack', '/usr/share/mysql/errmsg-utf8.txt', '/usr/share/man/man1/myisamlog.1.gz', '/usr/share/man/man1/mysqld_multi.1.gz', '/usr/share/man/man1/myisamchk.1.gz', '/usr/bin/mysql_plugin', '/usr/bin/mysqlbinlog', '/usr/bin/wsrep_sst_common', '/usr/lib/mysql/plugin/query_response_time.so', '/usr/share/mysql/wsrep_notify', '/usr/bin/mysql_tzinfo_to_sql', '/lib/systemd/system/mysql.service', '/usr/bin/myisamchk', '/usr/share/man/man1/myisampack.1.gz', '/usr/lib/mysql/plugin/auth_pam.so', '/usr/bin/mysql_secure_installation', '/usr/bin/mysqld_multi', '/usr/share/man/man1/mysqld_safe.1.gz', '/usr/bin/wsrep_sst_rsync', '/usr/bin/mysqld_safe', '/usr/bin/myisamlog'}
[ERROR] mariadb-server-core-10.6 conflicts with mariadb-server-10.0 files: {'/usr/share/mysql/mysql_system_tables.sql', '/usr/bin/resolveip', '/usr/share/mysql/mysql_system_tables_data.sql', '/usr/share/mysql/mysql_performance_tables.sql', '/usr/share/mysql/mysql_test_data_timezone.sql', '/usr/share/man/man1/mysql_upgrade.1.gz', '/usr/share/mysql/fill_help_tables.sql', '/usr/share/man/man1/resolveip.1.gz', '/usr/share/man/man1/mysql_install_db.1.gz', '/usr/bin/mysql_install_db', '/usr/bin/mysql_upgrade'}
[ERROR] mariadb-server-core-10.6 conflicts with mariadb-server-10.1 files: {'/usr/share/mysql/mysql_system_tables.sql', '/usr/bin/resolveip', '/usr/share/mysql/mysql_system_tables_data.sql', '/usr/share/mysql/mysql_performance_tables.sql', '/usr/share/mysql/fill_help_tables.sql', '/usr/share/mysql/mysql_test_data_timezone.sql', '/usr/share/mysql/maria_add_gis_sp_bootstrap.sql', '/usr/share/man/man1/resolveip.1.gz'}
[ERROR] mariadb-server-core-10.6 conflicts with mariadb-server-10.1 files: {'/usr/share/man/man1/resolveip.1.gz', '/usr/share/mysql/fill_help_tables.sql', '/usr/share/mysql/mysql_system_tables_data.sql', '/usr/share/mysql/mysql_performance_tables.sql', '/usr/share/mysql/mysql_system_tables.sql', '/usr/share/mysql/mysql_test_data_timezone.sql', '/usr/share/mysql/maria_add_gis_sp_bootstrap.sql', '/usr/bin/resolveip'}
[ERROR] mariadb-server-core-10.6 conflicts with mysql-client-5.5 files: {'/usr/bin/innochecksum'}
[ERROR] mariadb-server-core-10.6 conflicts with mysql-server-5.5 files: {'/usr/share/man/man1/resolveip.1.gz', '/usr/share/mysql/mysql_test_data_timezone.sql', '/usr/share/man/man1/innochecksum.1.gz', '/usr/bin/resolveip'}
[ERROR] mariadb-server-core-10.6 conflicts with percona-server-server-5.6 files: {'/usr/share/mysql/russian/errmsg.sys', '/usr/share/mysql/charsets/armscii8.xml', '/usr/share/mysql/charsets/latin5.xml', '/usr/share/mysql/mysql_system_tables.sql', '/usr/share/man/man1/innochecksum.1.gz', '/usr/share/mysql/slovak/errmsg.sys', '/usr/share/mysql/swedish/errmsg.sys', '/usr/share/mysql/charsets/cp1251.xml', '/usr/share/mysql/japanese/errmsg.sys', '/usr/share/mysql/charsets/keybcs2.xml', '/usr/share/mysql/charsets/latin1.xml', '/usr/share/mysql/mysql_test_data_timezone.sql', '/usr/share/mysql/charsets/hp8.xml', '/usr/share/mysql/spanish/errmsg.sys', '/usr/share/mysql/greek/errmsg.sys', '/usr/share/mysql/charsets/hebrew.xml', '/usr/share/mysql/charsets/cp850.xml', '/usr/bin/innochecksum', '/usr/share/mysql/charsets/cp866.xml', '/usr/share/mysql/english/errmsg.sys', '/usr/bin/mysql_upgrade', '/usr/share/mysql/charsets/macroman.xml', '/usr/bin/resolveip', '/usr/share/mysql/charsets/dec8.xml', '/usr/share/mysql/charsets/koi8r.xml', '/usr/share/mysql/charsets/ascii.xml', '/usr/share/mysql/german/errmsg.sys', '/usr/share/mysql/charsets/koi8u.xml', '/usr/share/mysql/charsets/latin2.xml', '/usr/share/mysql/norwegian-ny/errmsg.sys', '/usr/share/mysql/french/errmsg.sys', '/usr/share/man/man1/mysql_install_db.1.gz', '/usr/share/mysql/charsets/cp1250.xml', '/usr/bin/mysql_install_db', '/usr/share/mysql/serbian/errmsg.sys', '/usr/share/mysql/charsets/greek.xml', '/usr/share/mysql/czech/errmsg.sys', '/usr/share/mysql/portuguese/errmsg.sys', '/usr/share/mysql/ukrainian/errmsg.sys', '/usr/share/mysql/charsets/README', '/usr/share/man/man1/mysql_upgrade.1.gz', '/usr/share/mysql/charsets/cp1256.xml', '/usr/share/mysql/charsets/Index.xml', '/usr/share/mysql/danish/errmsg.sys', '/usr/share/mysql/mysql_system_tables_data.sql', '/usr/share/mysql/dutch/errmsg.sys', '/usr/share/mysql/charsets/geostd8.xml', '/usr/share/mysql/estonian/errmsg.sys', '/usr/share/mysql/norwegian/errmsg.sys', '/usr/share/mysql/charsets/cp852.xml', '/usr/share/mysql/romanian/errmsg.sys', '/usr/share/mysql/hungarian/errmsg.sys', '/usr/share/mysql/charsets/cp1257.xml', '/usr/share/mysql/italian/errmsg.sys', '/usr/sbin/mysqld', '/usr/share/mysql/charsets/swe7.xml', '/usr/share/mysql/korean/errmsg.sys', '/usr/share/mysql/fill_help_tables.sql', '/usr/share/man/man1/resolveip.1.gz', '/usr/share/mysql/charsets/macce.xml', '/usr/share/mysql/polish/errmsg.sys', '/usr/share/man/man8/mysqld.8.gz', '/usr/share/mysql/charsets/latin7.xml'}
[ERROR] mariadb-server-core-10.6 conflicts with percona-xtradb-cluster-server-5.6 files: {'/usr/share/mysql/russian/errmsg.sys', '/usr/share/mysql/charsets/armscii8.xml', '/usr/share/mysql/charsets/latin5.xml', '/usr/share/mysql/mysql_system_tables.sql', '/usr/share/man/man1/innochecksum.1.gz', '/usr/share/mysql/slovak/errmsg.sys', '/usr/share/mysql/swedish/errmsg.sys', '/usr/share/mysql/charsets/cp1251.xml', '/usr/share/mysql/japanese/errmsg.sys', '/usr/share/mysql/charsets/keybcs2.xml', '/usr/share/mysql/charsets/latin1.xml', '/usr/share/mysql/mysql_test_data_timezone.sql', '/usr/share/mysql/charsets/hp8.xml', '/usr/share/mysql/spanish/errmsg.sys', '/usr/share/mysql/greek/errmsg.sys', '/usr/share/mysql/charsets/hebrew.xml', '/usr/share/mysql/charsets/cp850.xml', '/usr/bin/innochecksum', '/usr/share/mysql/charsets/cp866.xml', '/usr/share/mysql/english/errmsg.sys', '/usr/bin/mysql_upgrade', '/usr/share/mysql/charsets/macroman.xml', '/usr/bin/resolveip', '/usr/share/mysql/charsets/dec8.xml', '/usr/share/mysql/charsets/koi8r.xml', '/usr/share/mysql/charsets/ascii.xml', '/usr/share/mysql/german/errmsg.sys', '/usr/share/mysql/charsets/koi8u.xml', '/usr/share/mysql/charsets/latin2.xml', '/usr/share/mysql/norwegian-ny/errmsg.sys', '/usr/share/mysql/french/errmsg.sys', '/usr/share/man/man1/mysql_install_db.1.gz', '/usr/share/mysql/charsets/cp1250.xml', '/usr/bin/mysql_install_db', '/usr/share/mysql/serbian/errmsg.sys', '/usr/share/mysql/charsets/greek.xml', '/usr/share/mysql/czech/errmsg.sys', '/usr/share/mysql/portuguese/errmsg.sys', '/usr/share/mysql/ukrainian/errmsg.sys', '/usr/share/mysql/charsets/README', '/usr/share/man/man1/mysql_upgrade.1.gz', '/usr/share/mysql/charsets/cp1256.xml', '/usr/share/mysql/charsets/Index.xml', '/usr/share/mysql/danish/errmsg.sys', '/usr/share/mysql/mysql_system_tables_data.sql', '/usr/share/mysql/dutch/errmsg.sys', '/usr/share/mysql/charsets/geostd8.xml', '/usr/share/mysql/estonian/errmsg.sys', '/usr/share/mysql/norwegian/errmsg.sys', '/usr/share/mysql/charsets/cp852.xml', '/usr/share/mysql/romanian/errmsg.sys', '/usr/share/mysql/hungarian/errmsg.sys', '/usr/share/mysql/charsets/cp1257.xml', '/usr/share/mysql/italian/errmsg.sys', '/usr/sbin/mysqld', '/usr/share/mysql/charsets/swe7.xml', '/usr/share/mysql/korean/errmsg.sys', '/usr/share/mysql/fill_help_tables.sql', '/usr/share/man/man1/resolveip.1.gz', '/usr/share/mysql/charsets/macce.xml', '/usr/share/mysql/polish/errmsg.sys', '/usr/share/man/man8/mysqld.8.gz', '/usr/share/mysql/charsets/latin7.xml'}
[ERROR] mariadb-server-core-10.6 conflicts with percona-xtradb-cluster-server-5.7 files: {'/usr/share/mysql/russian/errmsg.sys', '/usr/share/mysql/charsets/armscii8.xml', '/usr/share/mysql/charsets/latin5.xml', '/usr/share/mysql/mysql_system_tables.sql', '/usr/share/man/man1/innochecksum.1.gz', '/usr/share/mysql/slovak/errmsg.sys', '/usr/share/mysql/swedish/errmsg.sys', '/usr/share/mysql/charsets/cp1251.xml', '/usr/share/mysql/japanese/errmsg.sys', '/usr/share/mysql/charsets/keybcs2.xml', '/usr/share/mysql/charsets/latin1.xml', '/usr/share/mysql/mysql_test_data_timezone.sql', '/usr/share/mysql/charsets/hp8.xml', '/usr/share/mysql/spanish/errmsg.sys', '/usr/share/mysql/greek/errmsg.sys', '/usr/share/mysql/charsets/hebrew.xml', '/usr/share/mysql/charsets/cp850.xml', '/usr/bin/innochecksum', '/usr/share/mysql/charsets/cp866.xml', '/usr/share/mysql/english/errmsg.sys', '/usr/bin/mysql_upgrade', '/usr/share/mysql/charsets/macroman.xml', '/usr/bin/resolveip', '/usr/share/mysql/charsets/dec8.xml', '/usr/share/mysql/charsets/koi8r.xml', '/usr/share/mysql/charsets/ascii.xml', '/usr/share/mysql/german/errmsg.sys', '/usr/share/mysql/charsets/koi8u.xml', '/usr/share/mysql/charsets/latin2.xml', '/usr/share/mysql/norwegian-ny/errmsg.sys', '/usr/share/mysql/french/errmsg.sys', '/usr/share/man/man1/mysql_install_db.1.gz', '/usr/share/mysql/charsets/cp1250.xml', '/usr/bin/mysql_install_db', '/usr/share/mysql/serbian/errmsg.sys', '/usr/share/mysql/charsets/greek.xml', '/usr/share/mysql/czech/errmsg.sys', '/usr/share/mysql/portuguese/errmsg.sys', '/usr/share/mysql/mysql_sys_schema.sql', '/usr/share/mysql/ukrainian/errmsg.sys', '/usr/share/mysql/charsets/README', '/usr/share/man/man1/mysql_upgrade.1.gz', '/usr/share/mysql/charsets/cp1256.xml', '/usr/share/mysql/charsets/Index.xml', '/usr/share/mysql/danish/errmsg.sys', '/usr/share/mysql/mysql_system_tables_data.sql', '/usr/share/mysql/dutch/errmsg.sys', '/usr/share/mysql/charsets/geostd8.xml', '/usr/share/mysql/estonian/errmsg.sys', '/usr/share/mysql/norwegian/errmsg.sys', '/usr/share/mysql/charsets/cp852.xml', '/usr/share/mysql/romanian/errmsg.sys', '/usr/share/mysql/hungarian/errmsg.sys', '/usr/share/mysql/charsets/cp1257.xml', '/usr/share/mysql/italian/errmsg.sys', '/usr/sbin/mysqld', '/usr/share/mysql/charsets/swe7.xml', '/usr/share/mysql/korean/errmsg.sys', '/usr/share/mysql/fill_help_tables.sql', '/usr/share/man/man1/resolveip.1.gz', '/usr/share/mysql/charsets/macce.xml', '/usr/share/mysql/polish/errmsg.sys', '/usr/share/man/man8/mysqld.8.gz', '/usr/share/mysql/charsets/latin7.xml'}
[ERROR] mariadb-test conflicts with mysql-client-5.5 files: {'/usr/bin/mysql_client_test'}
[ERROR] mariadb-test conflicts with mysql-server-5.5 files: {'/usr/bin/mysqltest', '/usr/lib/mysql/plugin/ha_example.so', '/usr/share/man/man1/mysqltest.1.gz', '/usr/lib/mysql/plugin/adt_null.so', '/usr/lib/mysql/plugin/auth_test_plugin.so', '/usr/lib/mysql/plugin/libdaemon_example.so', '/usr/lib/mysql/plugin/qa_auth_server.so', '/usr/lib/mysql/plugin/qa_auth_interface.so', '/usr/lib/mysql/plugin/mypluglib.so'}
[ERROR] mariadb-test conflicts with percona-server-server-5.6 files: {'/usr/bin/mysqltest', '/usr/share/man/man1/mysqltest.1.gz', '/usr/lib/mysql/plugin/adt_null.so', '/usr/lib/mysql/plugin/auth_test_plugin.so', '/usr/lib/mysql/plugin/daemon_example.ini', '/usr/lib/mysql/plugin/libdaemon_example.so', '/usr/lib/mysql/plugin/qa_auth_server.so', '/usr/lib/mysql/plugin/qa_auth_interface.so', '/usr/lib/mysql/plugin/mypluglib.so'}
[ERROR] mariadb-test conflicts with percona-xtradb-cluster-server-5.6 files: {'/usr/bin/mysqltest', '/usr/share/man/man1/mysqltest.1.gz', '/usr/lib/mysql/plugin/adt_null.so', '/usr/lib/mysql/plugin/auth_test_plugin.so', '/usr/lib/mysql/plugin/libdaemon_example.so', '/usr/lib/mysql/plugin/qa_auth_server.so', '/usr/lib/mysql/plugin/qa_auth_interface.so', '/usr/lib/mysql/plugin/mypluglib.so'}
[ERROR] mariadb-test conflicts with percona-xtradb-cluster-server-5.7 files: {'/usr/bin/mysqltest', '/usr/lib/mysql/plugin/ha_example.so', '/usr/share/man/man1/mysqltest.1.gz', '/usr/lib/mysql/plugin/adt_null.so', '/usr/lib/mysql/plugin/auth_test_plugin.so', '/usr/lib/mysql/plugin/libdaemon_example.so', '/usr/lib/mysql/plugin/qa_auth_server.so', '/usr/lib/mysql/plugin/qa_auth_interface.so', '/usr/lib/mysql/plugin/mypluglib.so'}
[ERROR] mariadb-server-core-10.6 conflicts with mariadb-server-10.1 files: {'/usr/share/man/man1/resolveip.1.gz', '/usr/share/mysql/fill_help_tables.sql', '/usr/share/mysql/mysql_system_tables_data.sql', '/usr/share/mysql/mysql_performance_tables.sql', '/usr/share/mysql/mysql_system_tables.sql', '/usr/share/mysql/mysql_test_data_timezone.sql', '/usr/share/mysql/maria_add_gis_sp_bootstrap.sql', '/usr/bin/resolveip'}

This was not fixed:
[ERROR] libmariadb-dev-compat conflicts with libmariadbclient-dev files: {'/usr/bin/mysql_config'}
The reason is that as long as libmariadbclient-dev is also provided by libmariadb-dev
as a kind of virtual package. If there is a breaks/replaces against it, it would
prevent libmariadb-dev-compat to be co-installed with libmariadb-dev. If the breaks/replaces
was versioned, then Lintian would complain about external versioned replace.

See also https://github.com/mariadb-corporation/mariadb-columnstore-engine/pull/1846 that
fixes one more conflict.
2021-04-16 17:19:06 +10:00
Otto Kekäläinen
fc65417e7b Deb: Move my_print_defaults to MariaDB client core package
The my_print_default is required by mytop which is also in the MariaDB
client package, which in turn requires the client core package.
This way it is ensured my_print_default is always available when mytop
is installed.

The my_print_defaults is also requires by the server logrotate files
and mysqld_safe script etc, but this change is fine, since the server
core package always depends on the MariaDB client core package anyway
and they are both installed on server installations.

Closes: #1566, #1581
2021-04-16 17:19:06 +10:00
Daniel Black
f55d53e26d Deb: Move client programs to client package from MariaDB server package
There are many programs that actually belong to the client or even client
core package, as they should be fully usable without a locally installed
server.
2021-04-16 17:19:06 +10:00
Sujatha
410832313e MDEV-16437: merge 5.7 P_S replication instrumentation and tables
Merge 'replication_applier_status' table.

This table captures SQL_THREAD status.
2021-04-16 09:11:48 +05:30
Sujatha
767648cc2b MDEV-16437: merge 5.7 P_S replication instrumentation and tables
Merge 'replication_applier_configuration' table.

This table captures SQL_THREAD configuration parameters.
2021-04-16 09:05:39 +05:30
Sujatha
70642871bc MDEV-16437: merge 5.7 P_S replication instrumentation and tables
Merge 'replication_applier_status_by_coordinator' table.

This table captures SQL_THREAD status in case of both single threaded and
multi threaded slave configuration. When multi_source replication is enabled
this table will display each source specific SQL_THREAD status.

Added new columns for:
 - LAST_SEEN_TRANSACTION
 - LAST_TRANS_RETRY_COUNT
2021-04-16 09:02:00 +05:30
Sujatha
2674365c8e MDEV-16437: merge 5.7 P_S replication instrumentation and tables
Merge 'replication_connection_configuration' table.

Replaced following column:
  - AUTO_POSITION with USING_GTID
Added new columns for:
  - IGNORE_SERVER_IDS
  - DO_DOMAIN_IDS
  - IGNORE_SERVER_IDS
Removed following columns as they are not part of mariadb replication
connection configuration:
  - NETWORK_INTERFACE
  - TLS_VERSION

@sql/mysqld.cc
  Changed "master-retry-count" default value to 100000.
2021-04-16 08:54:19 +05:30
Marko Mäkelä
5c76e1e693 Merge 10.5 into 10.6 2021-04-15 20:21:11 +03:00
Marko Mäkelä
3f8df01194 MDEV-25425 Useless message "If the mysqld execution user is authorized page cleaner thread priority can be changed."
On startup, InnoDB tried to increase the priority of the page cleaner
thread. This would usually fail, resulting in a server log message.

When the page cleaner code was refactored in MDEV-23855, the throughput
and latency were greatly improved even when the
buf_flush_page_cleaner thread always ran the same priority with other
threads in our benchmarks.

So, this code should have no benefit in MariaDB Server 10.5.7 or later.

Besides, starting with MariaDB Server 10.5, the executable is called
mariadbd, not mysqld.
2021-04-15 11:40:43 +03:00
Otto Kekäläinen
de746304c9 Fix riscv64 build failure by linking correctly with pthread
Link with -pthread instead of -lpthread, and do that for all architectures.

Contributors:
Aurelien Jarno <aurelien@aurel32.net>

Closes: #1717
2021-04-15 11:39:42 +10:00
Otto Kekäläinen
f26e3259a1 Deb: Use build flag to enforce default charset as utf8mb4
Possible now since
29720950ee

Upstreamed from ca5e93c754

Closes: #1722
2021-04-15 11:34:20 +10:00
Otto Kekäläinen
a3e3225cd3 MCOL-4535: Clean up libreadline as ColumnStore no longer needs it 2021-04-15 11:31:31 +10:00
Justin Jagieniak
1715fef107 Fix cross-compile to consider CMAKE_CROSSCOMPILING_EMULATOR
When CMAKE_CROSSCOMPILING_EMULATOR is defined, a cross-compile
can be made, however with native (emulated) execution possible.

This commit takes those points in the build system that
execute built targets natively and allow these to be executed
in a crosscompile if CMAKE_CROSSCOMPILING_EMULATOR is defined.

Closes #1805
2021-04-15 10:07:50 +10:00
Daniel Black
f82e69735e io_liburing: ENOMEM handling - use io_uring_mlock_size
This gives the user the size required and how to set
memlock limits for the process.

Thanks Jens Axboe for providing this requested interface

ref: https://github.com/axboe/liburing/issues/246

Also don't put \n on my_printf_error, its implicit.
2021-04-15 07:42:13 +10:00
Eugene Kosov
f46536e7c3 fix perfschema tests in a non-perfschema builds 2021-04-14 23:09:06 +03:00
Marko Mäkelä
c071cc3455 Merge 10.5 into 10.6 2021-04-14 15:48:05 +03:00
Marko Mäkelä
d1f2001ee6 fixup 6c3e860cbf 2021-04-14 15:23:00 +03:00
Marko Mäkelä
ee87850461 MDEV-16708: Unsupported commands for prepared statements
Follow-up patch for the bug MDEV-25197 that fixes missed restoring
of thd->cur_stmt on returning error code.

Developed by Dmitry Shulga.

This fixes up the merge d2e2d32933
and closes MDEV-25413.
2021-04-14 14:01:12 +03:00
Marko Mäkelä
6729dd894c Merge 10.5 into 10.6 2021-04-14 13:39:28 +03:00
Marko Mäkelä
8d472f2b78 Merge 10.4 into 10.5 2021-04-14 12:48:48 +03:00
Marko Mäkelä
767d63374e After-merge fix: Make GCC 4.8.5 happy 2021-04-14 12:43:36 +03:00
Marko Mäkelä
d2e2d32933 Merge 10.5 into 10.6 2021-04-14 12:32:27 +03:00
Marko Mäkelä
72e0601d11 MDEV-24966 fixup: cmake -DWITH_WSREP=OFF 2021-04-14 12:31:51 +03:00
David CARLIER
9a3cbc0541 mysqld: print status display subset of memory usage.
leveling up to some degree with linux's mallinfo* api for
 the memory usage display with debug build with malloc_zone
 Darwin api.

Closes: #1803
2021-04-14 19:21:35 +10:00
Marko Mäkelä
6c3e860cbf Merge 10.4 into 10.5 2021-04-14 11:35:39 +03:00
Marko Mäkelä
5008171b05 Merge 10.3 into 10.4 2021-04-14 10:33:59 +03:00
Marko Mäkelä
13d0641710 Fixup merge 6e6318b29b 2021-04-14 10:09:04 +03:00
Marko Mäkelä
ef26a30486 Merge 10.2 into 10.3 2021-04-14 07:54:43 +03:00
Julius Goryavsky
9ff737b25e MDEV-25307: The value of the auto-increment variables changes during the test
Part #2, specifically for the 10.5+ branch:

The auto-increment parameters can change sporadically during the
execution of the mtr test "galera_vote_rejoin_ddl", causing it to
fail. This patch creates an environment where unpredictable changes
to these auto-increment settings do not occur during the test.
2021-04-13 19:45:53 +02:00
Sergei Golubchik
55a7682a30 -DMYSQL_MAINTAINER_MODE=NO
also add =WARN as an alias for =OFF
and clarify the help text
2021-04-13 17:13:44 +02:00
Marko Mäkelä
58f184a4cb MDEV-24745 Generic CRC-32C computation wrongly uses SSE4.2 instructions
In commit d25f806d73 (MDEV-22749)
the CRC-32C implementation of MariaDB was broken on some
IA-32 and AMD64 builds, depending on the compiler version and
build options. This was verified for IA-32 on GCC 10.2.1.

Even though we try to identify the SSE4.2 extensions and the
availaibility of the PCLMULQDQ instruction by executing CPUID,
the fall-back code could be generated with extended instructions,
because the entire file mysys/crc32/crc32c.c was being compiled
with -msse4.2 -mpclmul. This would cause SIGILL on a PINSRD
instruction on affected IA-32 targets (such as some Intel Atom
processors). This might also affect old AMD64 processors
(predating the 2007 Intel Nehalem microarchitecture), if some
compiler chose to emit the offending instructions.

While it is fine to pass a target-specific option to a target-specific
compilation unit (like -mpclmul to a PCLMUL-specific compilation unit),
that is not safe for mixed-architecture compilation units.

For mixed-architecture compilation units, the correct way is to set
target attributes on the target-specific functions.

There does not seem to be a way to pass target attributes to
function template instantiation. Hence, we must replace the
ExtendImpl template with plain functions crc32_sse42() and
crc32_slow().

We will also remove some inconsistency between
my_crc32_implementation() and mysys_namespace::crc32::Choose_Extend().

The function crc32_pclmul_enabled() will be moved to mysys/crc32/crc32c.cc
so that the detection code will be compiled without -msse4.2 -mpclmul.

The AMD64 PCLMUL accelerated crc32c_3way() will be moved to a new
file crc32c_amd64.cc. In this way, only a few functions that depend
on -msse4.2 in mysys/crc32/crc32c.cc can be declared with
__attribute__((target("sse4.2"))), and most of the file can be compiled
for the generic target.

Last, the file mysys/crc32ieee.cc will be omitted on 64-bit POWER,
because it was dead code (no symbols were exported).

Reviewed by: Vladislav Vaintroub
2021-04-13 16:15:15 +03:00
sjaakola
a1e70388c4 MDEV-24966 Galera multi-master regression
After the merging of MDEV-24915, 10.6 branch has regressions with handling of
concurrent write load against two or more cluster nodes. These regressions may
surface as cluster hanging, node crashes or data inconsistency. With some test
scenarios, the only visible symptom could be that the BF victim aborting happens
only by innodb lock wait timeout expiration. This would result only to poor
performance (by default 50 sec hang for each BF conflict), and could be somewhat
difficult to diagnose.

This pull request has following fixes to handle concurrent write load from
multiple nodes:

In lock_wait_wsrep_kill(), the victim trx was expected to be only in
TRX_STATE_ACTIVE state. With the delayed BF conflict handling, it can happen
that victim has advanced into pre commit state. This was fixed by choosing
victim both in TRX_STATE_ACTIVE and TRX_STATE_PREPARED states.

Victim transaction may be in several different states at the time of detected
lock conflict, and due to delayed BF aborting practice in MDEV-24915, the victim
may advance further before the actual BF aborting takes place. The BF aborting
in MDEV-24915 did not wake the victim, if it was in the state of waiting for
some other lock (than the one that was blocking the high priority thread).
This anomaly caused the innodb lock wait timeout expiration delays and poor
performance symptom. To fix this, lock_wait_wsrep_kill() now looks if
victim is in lock waiting state, and uses lock_cancel_waiting_and_release()
to cancel this lock wait.

wsrep_bf_abort() checks if the victim has active transaction (in wsrep-lib),
and starts a new transaction if there was no active transaction before.
Due to late BF aborting, the victim may have e.g. failed in certification
and is already aborting or has aborted at this stage. This has caused
problems in testing where BF aborter tries to BF abort himself.
The fix in wsrep_bf_abort() now skips the BF abort, if victim is aborting
or has aborted. Victim may not have started transaction yet in wsrep context,
but it may have acquired MDL locks (due to DDL execution), and this has
caused BF conflict. Such case does not require aborting in wsrep or
replication provider state.

BF aborting could cause BF-BF conflict scenario, if victim was already aborted
and changed to replayer having high priority as well. This BF-BF conflict
scenario is now avoided in lock_wait_wsrep() where we now check if blocking
lock holder is also high priority and is ordered before, caller should wait
for the lock in this situation.

The natural innodb deadlock resolving algorithm could pick BF thread as
deadlock victim. This is fixed by giving max weigh to BF threads in
Deadlock::report().

MDEV-24341 has changed excution paths in do_command() and this affects BF
aborted victim execution. This PR fixes one assert in do_command():
 DBUG_ASSERT(!thd->async_state.pending_ops())
Which fired if the thd was BF aborted earlier. This assert is now changed
to allow pending_ops() if thd was BF aborted before.

With these fixes, long term highly conflicting write load could be run against
to node cluster. If binlogging is configured, log_slave_updates should be
also set.
2021-04-13 14:58:54 +03:00
Anel Husakovic
18a8290126 MDEV-23015: mariadb-setpermission seems incompatible with DBI:MariaDB
- Commit 5cc2096f93 introduced in `10.5` changed DBI:DBD to DBD:MariaDB in this case with redudant `mysql` option.
- According to database handle (dbh) and `connect` method one should follow
  https://metacpan.org/pod/DBD::MariaDB#Class-Methods with proper created data source name (dsn).
- Adding socket precedance over port.
- Adding skipping the comments when reading the `my.cnf` file.
- MDEV-23016: mariadb-setpermission included
2021-04-13 11:31:10 +02:00
Marko Mäkelä
b8c8692fd9 MDEV-24620 ASAN heap-buffer-overflow in btr_pcur_restore_position()
Between btr_pcur_store_position() and btr_pcur_restore_position()
it is possible that purge empties a table and enlarges
index->n_core_fields and index->n_core_null_bytes.
Therefore, we must cache index->n_core_fields in
btr_pcur_t::old_n_core_fields so that btr_pcur_t::old_rec can be
parsed correctly.

Unfortunately, this is a huge change, because we will replace
"bool leaf" parameters with "ulint n_core"
(passing index->n_core_fields, or 0 for non-leaf pages).
For special cases where we know that index->is_instant() cannot hold,
we may also pass index->n_fields.
2021-04-13 10:28:13 +03:00
Marko Mäkelä
6e6318b29b Merge 10.2 into 10.3 2021-04-13 10:26:01 +03:00
Thirunarayanan Balathandayuthapani
e262eb165c MDEV-24971 InnoDB access freed virtual column after rollback of secondary index
- Fixing post-fix failure. In clean_new_vcol_index(), InnoDB has the wrong
offset to store the virtual column
2021-04-13 11:18:19 +05:30
Dmitry Shulga
61f84bba60 MDEV-25197: The statement set password=password('') executed in PS mode fails in case it is run by a user with expired password
A user connected to a server with an expired password
can't change password with the statement "SET password=..."
if this statement is run in PS mode. In mentioned use case a user
gets the error ER_MUST_CHANGE_PASSWORD on attempt to run
the statement  PREPARE stmt FOR "SET password=...";

The reason of failure to reset password by a locked user using the
statement PREPARE stmt FOR "SET password=..." is that PS-related
statements are not listed among the commands allowed for execution
by a user with expired password. However, simple adding of PS-related
statements (PREPARE FOR/EXECUTE/DEALLOCATE PREPARE ) to the list of
statements allowed for execution by a locked user is not enough
to solve problems, since it opens the opportunity for a locked user
to execute any statement in the PS mode.

To exclude this opportunity, additional checking that the statement
being prepared for execution in PS-mode is the SET statement has to be added.
This extra checking has been added by this patch into the method
Prepared_statement::prepared() that executed on preparing any statement
for execution in PS-mode.
2021-04-13 09:38:32 +07:00
Dmitriy Karpovskiy
f776fa96b4 MDEV-24135: Print warnings in XML, save test retries in XML, save the combinations in XML, replace the special symbols in the XML comment 2021-04-12 21:34:37 +02:00