Commit graph

191951 commits

Author SHA1 Message Date
Alice Sherepa
8bdffb3750 fix for tests from engines/funcs 2021-03-19 15:44:07 +01:00
Marko Mäkelä
233c09138f Disable crashing Galera tests: MDEV-18534, MDEV-24485 2021-03-19 13:10:12 +02:00
Marko Mäkelä
be881ec457 Merge 10.4 into 10.5 2021-03-19 13:09:21 +02:00
Marko Mäkelä
550cf13eb3 Disable failing Galera tests 2021-03-19 11:53:49 +02:00
Marko Mäkelä
44d70c01f0 Merge 10.3 into 10.4 2021-03-19 11:42:44 +02:00
Marko Mäkelä
190a8312f5 Merge 10.4 into 10.5 2021-03-18 15:07:01 +02:00
Marko Mäkelä
126725421e MDEV-25121: innodb_flush_method=O_DIRECT fails on compressed tables
Tests with 4096-byte sector size confirm that it is
safe to use O_DIRECT with page_compressed tables.
That had been disabled on Linux, in an attempt to fix MDEV-21584
which had been filed for the O_DIRECT problems earlier.

The fil_node_t::block_size was being set mostly correctly until
commit 10dd290b4b (MDEV-17380)
introduced a regression in MariaDB Server 10.4.4.

fil_node_open_file(): Only avoid setting O_DIRECT on
ROW_FORMAT=COMPRESSED tables that use KEY_BLOCK_SIZE=1 or 2
(1024 or 2048 bytes).

fil_ibd_create(): Avoid setting O_DIRECT on ROW_FORMAT=COMPRESSED tables
that use KEY_BLOCK_SIZE=1 or 2 (1024 or 2048 bytes).

fil_node_t::find_metadata(): Require fstat() to be always invoked
outside Microsoft Windows, so that fil_node_t::block_size can be set.

fil_node_t::read_page0(): Rely on find_metadata() to assign block_size.

Thanks to Vladislav Vaintroub for testing this on Microsoft Windows
using an old-fashioned rotational hard disk with 4KiB sector size.

Reviewed by: Vladislav Vaintroub

This is a port of commit 00f620b27e
and commit 6505662c23 from 10.2.
2021-03-18 14:43:08 +02:00
Marko Mäkelä
39c015b77e Merge 10.3 into 10.4 2021-03-18 14:17:58 +02:00
Marko Mäkelä
867724fd30 MDEV-25125 Assertion failure in fetch_data_into_cache_low()
Before MDEV-14638, there was no race condition between the
execution of fetch_data_into_cache() and transaction commit.

fetch_data_into_cache(): Acquire trx_t::mutex before checking
trx_t::state, to prevent a concurrent transition from
TRX_STATE_COMMITTED_IN_MEMORY to TRX_STATE_NOT_STARTED
in trx_commit_in_memory().
2021-03-18 13:36:02 +02:00
Marko Mäkelä
19052b6deb Merge 10.2 into 10.3 2021-03-18 12:34:48 +02:00
Marko Mäkelä
c557e9540a MDEV-10682 Race condition between ANALYZE and STATS_AUTO_RECALC
ha_innobase::info_low(): While collecting statistics for
ANALYZE TABLE, ensure that dict_stats_process_entry_from_recalc_pool()
is not executing on the same table.

We observed result differences for the test innodb.innodb_stats because
dict_stats_empty_index() was being invoked by the background statistics
calculation while ha_innobase::analyze() was executing
dict_stats_analyze_index_level().
2021-03-18 12:24:35 +02:00
Marko Mäkelä
6505662c23 MDEV-25121: innodb_flush_method=O_DIRECT fails on compressed tables
Tests with 4096-byte sector size confirm that it is
safe to use O_DIRECT with page_compressed tables.
That had been disabled on Linux, in an attempt to fix MDEV-21584
which had been filed for the O_DIRECT problems earlier.

The fil_node_t::block_size was being set mostly correctly until
commit 10dd290b4b (MDEV-17380)
introduced a regression in MariaDB Server 10.4.4.

fil_node_t::read_page0(): Initialize fil_node_t::block_size.
This will probably make similar code in fil_space_extend_must_retry()
redundant, but we play it safe and will not remove that code.

Thanks to Vladislav Vaintroub for testing this on Microsoft Windows
using an old-fashioned rotational hard disk with 4KiB sector size.

Reviewed by: Vladislav Vaintroub
2021-03-18 12:24:35 +02:00
Vladislav Vaintroub
00f620b27e MDEV-21584 - portability fix
This patch implements OS_DATA_FILE_NO_O_DIRECT on Windows.
2021-03-18 12:24:35 +02:00
Marko Mäkelä
14a8b700f3 Cleanup: Remove unused OS_DATA_TEMP_FILE
This had been originally added in
mysql/mysql-server@192bb153b6
with the motivation to disable O_DIRECT for the dedicated tablespace
for temporary tables. In MariaDB Server,
commit 5eb539555b (MDEV-12227)
should be a better solution.

The code became orphaned later in
mysql/mysql-server@c61244c0e6
and it had been applied to MariaDB Server 10.2.2 in
commit 2e814d4702 and
commit fec844aca8.

Thanks to Vladislav Vaintroub for spotting this.
2021-03-18 12:24:35 +02:00
Jan Lindström
c9ba668992 MDEV-24916 : Assertion `current_stmt_binlog_format == BINLOG_FORMAT_STMT || current_stmt_binlog_format == BINLOG_FORMAT_ROW' failed in THD::is_current_stmt_binlog_format_row
Store old value of binlog format before wsrep code so that
if we bail out because wsrep is not ready for connections
we can restore binlog format correctly.
2021-03-18 11:25:28 +02:00
Jan Lindström
f4e14f0e24 MDEV-18874 : Galera test MW-286 causes Mutex = TTASEventMutex<GenericPolicy>]: Assertion `!is_owned()' failed. assertion
MDEV-24649 galera.galera_bf_lock_wait MTR failed with sigabrt: Assertion `!is_ow
ned()' failed in sync0policy.ic on MutexDebug with Mutex = TTASEventMutex<GenericPolicy>

Bug was fixed as part of MDEV-23328, this just adds test cases to
regression set.
2021-03-18 07:21:22 +02:00
Daniel Black
5dbea46cfd crc32c: Fix AIX compulation - ALIGN defined
ALIGN was defined already:

mysys/crc32/crc32c.cc:390: warning: "ALIGN" redefined
 #define ALIGN(n, m)     ((n + ((1 << m) - 1)) & ~((1 << m) - 1))

In file included from /root/aix/build/include/my_global.h:543,
                 from /root/aix/build/mysys/crc32/crc32c.cc:22:
/opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/8/include-fixed/sys/socket.h:788: note: this is the location of the previous definition
 #define ALIGN(p)                (ulong)((caddr_t)(p) + MACHINE_ALIGNMENT - 1 - \
2021-03-18 14:40:54 +11:00
Etienne Guesnet
60d1461a28 CRC32 on AIX 2021-03-18 14:40:54 +11:00
Daniel Black
6974058121 mariadb.pc: plugindir is used
As evidenced by converstation on Zulip,
knowing where to install a plugin is important too.
2021-03-18 14:35:55 +11:00
Sergei Petrunia
9c7bd4f283 MDEV-25069: Assertion `root->weight >= ...' failed in SEL_ARG::tree_delete #2
Note they key_or() may call tree_delete(), which will cause the weight
asserts to be checked. In order to avoid them from firing, update key1
tree's weight after we've changed key1->some_local_child->next_key_part.

Having done that, do we still need this at the function end:

  /* Re-compute the result tree's weight. */
  key1->update_weight_locally();
?
2021-03-17 20:59:30 +03:00
Otto Kekäläinen
7e3806ce24 Deb: Sync updates to debconf templates and translations from downstream 2021-03-17 15:06:28 +02:00
Otto Kekäläinen
bac931303d Deb: Add Finnish and Vietnamese debconf translations
Upstreamed from https://salsa.debian.org/mariadb-team/mariadb-10.5/-/tree/master/debian/po
2021-03-17 15:06:28 +02:00
Vladislav Vaintroub
dfa6fba959 Skip tests that dump thread_stack, for ASAN
031b3dfc22 changed thread_stack for ASAN.
Skip the tests to avoid the diff
2021-03-17 10:35:04 +01:00
Eugene Kosov
66106130a6 switch off storage/innobase/.clang-format: InnoDB uses a common formatting style for all new code 2021-03-17 11:01:15 +03:00
Jan Lindström
5511c21b41 MDEV-23851 BF-BF Conflict issue because of UK GAP locks
Add missing dbug sync point and correct the test case.
2021-03-17 08:35:38 +02:00
Anel Husakovic
825c0e2abe MDEV-24601: INFORMATION_SCHEMA doesn't differentiate between column and table-level CHECK constraints
- Reviewed by: wlad@mariadb.com
2021-03-16 19:02:16 +01:00
Jan Lindström
f4e4bff992 MDEV-24916 : Assertion `current_stmt_binlog_format == BINLOG_FORMAT_STMT || current_stmt_binlog_format == BINLOG_FORMAT_ROW' failed in THD::is_current_stmt_binlog_format_row
Store old value of binlog format before wsrep code so that
if we bail out because wsrep is not ready for connections
we can restore binlog format correctly.
2021-03-16 13:02:44 +02:00
Julius Goryavsky
bf303e824c MDEV-21039: Server fails to start with unknown mysqld_safe options
Adding any unknown option to the "[mysqld_safe]" section makes
mysqld impossible to start with mysqld_multi. For example, after
adding the unknown option "numa_interleave" to the "[mysqld_safe]"
section, mysqld_multi exits with the following diagnostics:

[ERROR] /usr/local/mysql/bin/mysqld: unknown option '--numa_interleave'

To get rid of this behavior, this patch adds the passing of the default
group suffix from mysqld_multi to the mysqld_safe side.
2021-03-16 11:30:36 +01:00
Vladislav Vaintroub
f2c79eda4b MDEV-24554 Windows authenticode signing stopped working
Change the default timestamping URL, again
http://timestamp.globalsign.com/?signature=sha2 seems to work fine atm
2021-03-16 00:15:34 +01:00
Vladislav Vaintroub
987cfa227d MDEV-23740 - X509_R_CERT_ALREADY_IN_HASH_TABLE when establishing SSL connection
connection.

Ignore harmless X509_R_CERT_ALREADY_IN_HASH_TABLE, similar to how Curl or
other projects treat it.
2021-03-15 19:37:40 +01:00
Vlad Lesin
8cbada87f0 MDEV-24184 InnoDB RENAME TABLE recovery failure if names are reused
fil_op_replay_rename(): Remove.

fil_rename_tablespace_check(): Remove a parameter is_discarded=false.

recv_sys_t::parse(): Instead of applying FILE_RENAME operations,
buffer the operations in renamed_spaces.

recv_sys_t::apply(): In the last_batch, apply renamed_spaces.
2021-03-15 16:11:23 +03:00
Jan Lindström
30dea4599e MDEV-24978 : SIGABRT in __libc_message
Keyvalue can be longer than REC_VERSION_56_MAX_INDEX_COL_LEN
and this leads out-of-array reference. Use dynamic memory
allocation using actual max length of key value.
2021-03-15 11:56:42 +02:00
Thirunarayanan Balathandayuthapani
eb7c5530ec MDEV-24730 Insert log operation fails after purge resets n_core_fields
Online log for insert operation of redundant table fails with
index->is_instant() assert. Purge can reset the n_core_fields when
alter is waiting to upgrade MDL for commit phase of DDL. In the
meantime, any insert DML tries to log the operation fails with
index is not being instant.

row_log_get_n_core_fields(): Get the n_core_fields of online log
for the given index.

rec_get_converted_size_comp_prefix_low(): Use n_core_fields of online
log when InnoDB calculates the size of data tuple during redundant
row format table rebuild.

rec_convert_dtuple_to_rec_comp(): Use n_core_fields of online log
when InnoDB does the conversion of data tuple to record during
redudant row format table rebuild.

- Adding the test case which has more than 129 instant columns.
2021-03-12 16:56:47 +05:30
Vladislav Vaintroub
ba7d86a659 update libmariadb 2021-03-12 10:35:08 +01:00
Vladislav Vaintroub
031b3dfc22 MDEV-25123 support MSVC ASAN 2021-03-12 08:44:55 +01:00
Varun Gupta
390de205cc MDEV-24519: Server crashes in Charset::set_charset upon SELECT
The query causing the issue here has implicit grouping for we
have to produce one row with special values for the aggregates
(depending on each aggregate function), and NULL values for all
non-aggregate fields.

The subselect item where implicit grouping was being done,
null_value for the subselect item was not being set for
the case when the implicit grouping produces NULL values
for the items in the select list of the subquery.
This which was leading to the crash.

The fix would be to set the null_value when all the values
for the row column have NULL values.

Further changes are

1) etting null_value for Item_singlerow_subselect only
   after val_* functions have been called.
2) Introduced a parameter null_value_inside to Item_cache that
   would store be set to TRUE if any of the arguments of the
   Item_cache are null.

Reviewed And co-authored by Monty
2021-03-12 10:13:05 +05:30
Ian Gilfillan
1f3f90318f Update sponsors 2021-03-12 07:02:29 +11:00
Marko Mäkelä
4c2b6be38e One more try: Fix -Wconversion on GCC 4 to 9 2021-03-11 21:43:43 +02:00
Marko Mäkelä
abe25c31a6 After-merge fix: -Wconversion in GCC 4 to 9 2021-03-11 21:02:15 +02:00
Marko Mäkelä
a4b7232b2c Merge 10.4 into 10.5 2021-03-11 20:09:34 +02:00
Marko Mäkelä
1ea6ac3c95 Merge 10.3 into 10.4 2021-03-11 19:33:45 +02:00
Marko Mäkelä
2c3014e8a7 MDEV-24668 fixup: uninitialized return value with Galera 2021-03-11 19:14:35 +02:00
Thirunarayanan Balathandayuthapani
06df0b0dce MDEV-25107 Check TABLE miscalutates the length of column
- This is caused by merge commit a26e7a3726.
InnoDB fails to fetch the next index field when there is a externally
stored column length check involved.
2021-03-11 20:52:54 +05:30
Marko Mäkelä
a8650b64ed MDEV-25110 [FATAL] InnoDB: Trying to write ... outside the bounds
In commit 118e258aaa (part of MDEV-23855)
we inadvertently broke crash recovery, reintroducing MDEV-11556.

fil_system_t::extend_to_recv_size(): Extend all open tablespace files
to the recovered size.

recv_sys_t::apply(): Invoke fil_system.extend_to_recv_size() at the
start of each batch. In this way, any fil_space_t::recv_size
changes that were parsed after the file was opened will be applied.
2021-03-11 14:21:28 +02:00
Marko Mäkelä
549a70d7f0 MDEV-25031 Not applying INSERT_*_REDUNDANT due to corruption on page
page_apply_insert_redundant(): Replace a too strict condition
hdr_c > pextra_size. It turns out that page_cur_insert_rec_low()
is not even computing the extra_size of cur->rec when it is trying
to reuse header bytes of the preceding record.
2021-03-11 14:21:28 +02:00
Marko Mäkelä
08e8ad7c71 MDEV-25106 Deprecation warning for innodb_checksum_algorithm=none,innodb,...
MDEV-25105 (commit 7a4fbb55b0)
in MariaDB 10.6 will refuse the innodb_checksum_algorithm
values none, innodb, strict_none, strict_innodb.

We will issue a deprecation warning if innodb_checksum_algorithm
is set to any of these non-default unsafe values.

innodb_checksum_algorithm=crc32 was made the default in
MySQL 5.7 and MariaDB Server 10.2, and given that older versions
of the server have reached their end of life, there is no valid
reason to use anything else than innodb_checksum_algorithm=crc32
or innodb_checksum_algorithm=strict_crc32 in MariaDB 10.3.

Reviewed by: Sergei Golubchik
2021-03-11 12:50:04 +02:00
Marko Mäkelä
6e7ac4060d MDEV-25070 fixup: Correct the result 2021-03-11 12:34:56 +02:00
David CARLIER
a6cd4612a9 connect storage, little compile issues fix proposal. 2021-03-11 09:36:23 +01:00
Igor Babaev
374ec82f08 MDEV-24597 Explicit column name error in CTE of UNION
This bug manifested itself when executing queries with multiple reference
to a CTE specified by a query expression with union and having its
column names explicitly declared. In this case the server returned a bogus
error message about unknown column name. It happened because while for the
first reference to the CTE the names of the columns returned by the CTE
specification were properly changed to match the CTE definition for the
other references it was not done. This was a consequence  of not quite
complete code of the function With_element::clone_parsed_spec() that forgot
to set the reference to the CTE definition for unit structures representing
non-first CTE references.

Approved by dmitry.shulga@mariadb.com
2021-03-10 22:16:23 -08:00
Krunal Bauskar
f11b60879b MDEV-24949: Enabling idle flushing (possible regression from MDEV-23855)
- Currently page cleaner thread will stop flushing if
  dirty_pct < innodb_max_dirty_pages_pct_lwm.

- If the server is not performing any activity then said resources/time
  could be used to flush the pending dirty pages and keep buffer pool
  clean for the next burst of the cycle. This flushing is called idle flushing.

- flushing logic underwent a complete revamp in 10.5.7/8
  and as part of the revamp idle flushing logic got removed.

- New proposed logic of idle flushing is based on updated logic of the
  page cleaner that will enable idle flushing if
  - buf page cleaner is idle
  - there are dirty pages (< innodb_max_dirty_pages_pct_lwm)
  - server is not performing any activity

  Logic will kickstart the idle flushing bounded by innodb_io_capacity.

(Thanks to Marko Makela for reviewing the patch and idea
 right from the its inception).
2021-03-11 08:14:26 +02:00