Commit graph

193,649 commits

Author SHA1 Message Date
Vladislav Vaintroub
0604592a85 fix ssl_cipher test
Setting specific ciphers does not work for OpenSSL 1.1.1+ client
when it negotiates TLSv1.3 with the server.


Require TLS version less that 1.3 for the server to workaround.
2021-07-23 10:41:04 +02:00
Rucha Deodhar
534553897f MDEV-24248: my_print_defaults is not taking all the values when using -e
option which is called from mysql.server (extra_args).

Fix: change mysql.server script to use --defaults-extra-file instead of -e
2021-07-23 12:39:25 +05:30
Julius Goryavsky
4c4237e63f MDEV-26080 fixup: fixed .result file for galera_roles test (one word must be enclosed in single quotes). 2021-07-23 08:31:32 +02:00
Igor Babaev
2820ad1c22 MDEV-26202 Unexpected failure with query using indirectly a recursive CTE twice
This bug was fixed by the patch for bug MDEV-26025.
Only a new test case is added here.
2021-07-22 17:08:08 -07:00
Nikita Malyavin
dba7cd25e1 MDEV-25560 Creating table with certain generated column crashes server
Fix RPAD() handling without 3rd argument of padding, in which case default
padding is used.
2021-07-22 22:35:23 +03:00
Michael Okoko
6cd3588f0e Improve documentation of json parser functions
Signed-off-by: Michael Okoko <okokomichaels@outlook.com>
2021-07-22 21:51:49 +03:00
Rucha Deodhar
5518c3209b MDEV-23178: Qualified asterisk not supported in INSERT .. RETURNING
Analysis: When we have INSERT/REPLACE returning with qualified asterisk in the
RETURNING clause, '*' is not resolved properly because of wrong context.
context->table_list is NULL or has incorrect table because context->table_list
has tables from the FROM clause. For INSERT/REPLACE...SELECT...RETURNING,
context->table_list has table we are inserting from. While in other
INSERT/REPLACE syntax, context->table_list is NULL because there is no FROM
clause.
Fix: If filling fields instead of '*' for qualified asterisk in RETURNING,
use first_name_resolution_table for correct resolution of item.
2021-07-22 21:56:18 +05:30
Rucha Deodhar
091743c6d8 Removing the condition in the for loop and putting it in one place to
make code more readable and cleaner.
2021-07-22 21:56:18 +05:30
Marko Mäkelä
b50ea90063 Merge 10.2 into 10.3 2021-07-22 18:57:54 +03:00
Marko Mäkelä
742b3a0d39 MDEV-26205 Merge new release of InnoDB 5.7.35 to 10.2 2021-07-22 18:07:37 +03:00
Sachin Agarwal
236f825ebf Bug #31576731 INNODB_FT_TOTAL_CACHE_SIZE NOT CAPPED WHEN SET TO 32000000
Problem:
Server throws OOM error when we execute twitter load with SELECTs
for UPDATE + UPDATES, and SELECT queries on tables with full-text
index.
FTS cache->total_memory store count of total memory allocated to FTS
cache (for all fulltext indexes on a table).
For each word in fts cache, we store doc-id & word position in a
node->ilist.
we increment cache->total_memory with size of doc-id & word position
whereas we allocate ilist in chuck of 16, 32 ,64 bytes or 1.2 times
of last size.
When we wil insert huge amount of data into the FTS aux index tables
then collectively these small chucks for each token become huge
unaccounted memory allocated for FTS cache.

Fix:
Incremented cache->total_memory by size of chunk allocated to
node->ilist.

RB: 25286
Reviewed by : Rahul Agarkar <rahul.agarkar@oracle.com>

mysql/mysql-server@7ab5707f1c
2021-07-22 18:05:23 +03:00
Jakub Łopuszański
c4295b9be9 Bug #32460315 ONLINE RESIZING BUFFER POOL CAN CRASH CONCURRENT BP LOOKUP
This patch changes it so that we do not free old BP `page_hash`, but rather modify it's parameters, during resize.

RB: 26084
Reviewed-by: Marcin Babij <marcin.babij@oracle.com>
Reviewed-by: Yasufumi Kinoshita <yasufumi.kinoshita@oracle.com>

mysql/mysql-server@ea3adc6a11
2021-07-22 18:05:23 +03:00
Marko Mäkelä
efae374efa MDEV-26203 CREATE INDEX may enforce incorrect maximum column length
ha_innobase::prepare_inplace_alter_table(): Unless the table is
being rebuilt, determine the maximum column length based on the
current ROW_FORMAT of the table. When TABLE_SHARE (and the .frm file)
contains no explicit ROW_FORMAT, InnoDB table creation or rebuild
will use innodb_default_row_format.

Based on mysql/mysql-server@3287d33acd
2021-07-22 17:55:05 +03:00
Marko Mäkelä
8ad6971a1a Update libmariadb 2021-07-22 17:54:49 +03:00
Marko Mäkelä
124dc0d85b MDEV-25361 fixup: Fix integer type mismatch
InnoDB tablespace identifiers and page numbers are 32-bit numbers.
Let us use a 32-bit type for them in innochecksum.

The changes in commit 1918bdf32c
broke the build on 32-bit Windows.

Thanks to Vicențiu Ciorbaru for an initial version of this fixup.
2021-07-22 17:53:43 +03:00
Marko Mäkelä
c35ac54891 Update libmariadb 2021-07-22 14:30:57 +03:00
Nayuta Yanagisawa
aafb888657 MDEV-26013 distinct not work properly in some cases for spider tables
The bug is caused by the following reasons:

* spider_group_by_handler::init_scan() generates a query for a data node.
* The function adds DISTINCT if and only if
  spider_group_by_handler::query::distinct is TRUE.
* spider_group_by_handler::query::distinct is set to the value of
  JOIN::select_distinct in JOIN::make_aggr_tables_info().
* In the test case, DISTINCT is not added because JOIN::select_distinct
  is FALSE at the call of JOIN::make_aggr_tables_info().

Why JOIN::select_distinct is set to FALSE? That is because the function
JOIN::optimize_stage2() convert DISTINCT into GROUP BY and then optimizes
away GROUP BY.
2021-07-22 10:05:46 +00:00
Marko Mäkelä
7783161f30 Merge 10.5 into 10.6 2021-07-22 13:02:26 +03:00
Daniel Black
8cb2027bd6 mtr: aix test fix innodb.temporary_table
AIX error message didn't include the filename like:

2021-07-22  9:43:04 0 [ERROR] mariadbd: Can't create/write to file '' (Errcode: 20 "Not a directory")
2021-07-22  9:43:04 0 [ERROR] mariadbd: Can't create/write to file '' (Errcode: 20 "Not a directory")

Reviewer: Marko
2021-07-22 20:00:50 +10:00
Marko Mäkelä
efd90937f7 MDEV-26110 fixup: GCC 4.8.5 -Wtype-limits
row_ins_index_entry_set_vals(): Remove an assertion that trivially
holds because the 16-bit dict_col_t::len cannot represent the value
UNIV_PAGE_SIZE_MAX.
2021-07-22 12:29:40 +03:00
Marko Mäkelä
5f4314f0e6 MDEV-26210: Disable mariabackup.log_page_corruption
MDEV-26193 exposed a race condition in the test
mariabackup.log_page_corruption by no longer waking up purge tasks
on every transaction commit. (Note that there never was a guarantee
that the purge tasks would actually run as quickly as the test expected
it to happen; that would depend on the CPU load.)
2021-07-22 11:17:44 +03:00
Anel Husakovic
b30f26e3fe Record tempfiles_encrypted test failure 2021-07-22 09:19:18 +02:00
Marko Mäkelä
a4dc926579 MDEV-26193: Wake up purge less often
Starting with commit 6e12ebd4a7
(MDEV-25062), srv_wake_purge_thread_if_not_active() became
more expensive operation, especially on NUMA systems, because
instead of reading an atomic global variable trx_sys.rseg_history_len
we are traversing up to 128 cache lines in trx_sys.history_exists().

trx_t::commit_cleanup(): Do not wake up purge at all.
We will wake up purge about once per second in srv_master_callback().

srv_master_do_active_tasks(), srv_master_do_idle_tasks():
Move some duplicated code to srv_master_callback().

srv_master_callback(): Invoke purge_coordinator_timer_callback()
to ensure that purge will be periodically woken up, even if the
latest execution of trx_t::commit_cleanup() allowed the purge view
to advance but did not wake up purge.
Do not call log_free_check(), because every thread that is going
to generate redo log is supposed to call that function anyway,
before acquiring any page latches. Additional calls to the function
every few seconds should not make any difference.

srv_shutdown_threads(): Ensure that srv_shutdown_state can be at most
SRV_SHUTDOWN_INITIATED in srv_master_callback(), by first invoking
srv_master_timer.reset() before changing srv_shutdown_state.
(Note: We first terminate the srv_master_callback and only then
terminate the purge tasks. Thus, the purge subsystem should exist
when srv_master_callback() invokes purge_coordinator_timer_callback()
if it was initiated in the first place.
2021-07-22 10:11:35 +03:00
Marko Mäkelä
641f09398f Merge 10.5 into 10.6 2021-07-22 10:11:08 +03:00
Marko Mäkelä
82d5994520 MDEV-26110: Do not rely on alignment on static allocation
It is implementation-defined whether alignment requirements
that are larger than std::max_align_t (typically 8 or 16 bytes)
will be honored by the compiler and linker.

It turns out that on IBM AIX, both alignas() and MY_ALIGNED()
only guarantees alignment up to 16 bytes.

For some data structures, specifying alignment to the CPU
cache line size (typically 64 or 128 bytes) is a mere performance
optimization, and we do not really care whether the requested
alignment is guaranteed.

But, for the correct operation of direct I/O, we do require that
the buffers be aligned at a block size boundary.

field_ref_zero: Define as a pointer, not an array.
For innochecksum, we can make this point to unaligned memory;
for anything else, we will allocate an aligned buffer from the heap.
This buffer will be used for overwriting freed data pages when
innodb_immediate_scrub_data_uncompressed=ON. And exactly that code
hit an assertion failure on AIX, in the test innodb.innodb_scrub.

log_sys.checkpoint_buf: Define as a pointer to aligned memory
that is allocated from heap.

log_t::file::write_header_durable(): Reuse log_sys.checkpoint_buf
instead of trying to allocate an aligned buffer from the stack.
2021-07-22 10:05:13 +03:00
Marko Mäkelä
bf435a3f4d MDEV-26200 buf_pool.flush_list corrupted by buffer pool resizing or ROW_FORMAT=COMPRESSED
The lazy deletion of clean blocks from buf_pool.flush_list that was
introduced in commit 6441bc614a (MDEV-25113)
introduced a race condition around the function
buf_flush_relocate_on_flush_list().

The test innodb_zip.wl5522_debug_zip as well as the buffer pool
resizing tests would occasionally fail in debug builds due to
buf_pool.flush_list.count disagreeing with the actual length of the
doubly-linked list.

The safe procedure for relocating a block in buf_pool.flush_list should be
as follows, now that we implement lazy deletion from buf_pool.flush_list:

1. Acquire buf_pool.mutex.
2. Acquire the exclusive buf_pool.page_hash.latch.
3. Acquire buf_pool.flush_list_mutex.
4. Copy the block descriptor.
5. Invoke buf_flush_relocate_on_flush_list().
6. Release buf_pool.flush_list_mutex.

buf_flush_relocate_on_flush_list(): Assert that
buf_pool.flush_list_mutex is being held. Invoke
buf_page_t::oldest_modification() only once, using
std::memory_order_relaxed, now that the mutex protects us.

buf_LRU_free_page(), buf_LRU_block_remove_hashed(): Avoid
an unlock-lock cycle on hash_lock. (We must not acquire hash_lock
while already holding buf_pool.flush_list_mutex, because that
could lead to a deadlock due to latching order violation.)
2021-07-22 10:05:13 +03:00
nia
316a8cebf5 Fix building crc32_arm64 on NetBSD/aarch64
pmull_supported is not necessarily defined before crc32c_aarch64

Signed-off-by: Nia Alarie <nia@NetBSD.org>
2021-07-22 16:41:59 +10:00
Daniel Black
1519013f51 mtr: aix - stack-trace is optional 2021-07-22 15:22:47 +10:00
Vladislav Vaintroub
7ffa801cf2 MDEV-22221 Compile WolfSSL with TLSv1.3 support 2021-07-21 22:19:52 +02:00
Sergei Golubchik
6190a02f35 Merge branch '10.2' into 10.3 2021-07-21 20:11:07 +02:00
Igor Babaev
4aeb2b1c6c MDEV-26189 Missing handling of unknown column in WHERE of recursive CTE
SQL processor failed to catch references to unknown columns and other
errors of the phase of semantic analysis in the specification of a
hanging recursive CTE. This happened because the function
With_clause::prepare_unreferenced_elements() failed to detect a CTE as
a hanging CTE if the CTE was recursive.
Fixing this problem in the code of the mentioned function opened another
problem: EXPLAIN started including the lines for the specifications of
hanging recursive CTEs in its output. This problem also was fixed in this
patch.

Approved by Dmitry Shulga <dmitry.shulga@mariadb.com>
2021-07-21 08:29:31 -07:00
Dmitry Shulga
f43370baf3 MDEV-26150: follow-up patch to add missing fill opt_trace,ps.rdiff 2021-07-21 19:31:17 +07:00
Hollow Man
bd711d4f3d Typo fixes in item_strfunc.cc 2021-07-21 10:31:15 +03:00
Heinz Wiesinger
751ebe44fd Add feature summary at the end of cmake.
This gives a short overview over found/missing dependencies as well
as enabled/disabled features.

Initial author Heinz Wiesinger <heinz@m2mobi.com>
Additions by Vicențiu Ciorbaru <vicentiu@mariadb.org>
* Report all plugins enabled via MYSQL_ADD_PLUGIN
* Simplify code. Eliminate duplication by making use of WITH_xxx
  variable values to set feature "ON" / "OFF" state.

Reviewed by: wlad@mariadb.com (code details) serg@mariadb.com (the idea)
2021-07-21 10:22:56 +03:00
Vicențiu Ciorbaru
2b017367c7 Delete unused MYSQL_CHECK_{LZ4|LZO}_STATIC macros 2021-07-21 10:22:56 +03:00
Vladislav Vaintroub
6a3e0009a6 WolfSSL 4.8.0 2021-07-21 09:16:28 +02:00
Daniel Black
8642f592e6 debian/salsa: Show complete auth and plugin situtation
SHOW PLUGINS has a more complete view of the installed
plugins into the server.

The mysql.user is a compatibility view that doesn't
show the complete authentication picture. Use global_priv.

Add `show create user` for default users to more clearly
represent its contents.
2021-07-21 17:02:49 +10:00
Igor Babaev
4c387945f0 MDEV-25565 Crash on 2-nd execution of SP/PS for query calculating window functions
from view

A crash of the server happened when executing a stored procedure whose the
only query calculated window functions over a mergeable view specified
as a select from non-mergeable view. The crash could be reproduced if
the window specifications of the window functions were identical and both
contained PARTITION lists and ORDER BY lists. A crash also happened on
the second execution of the prepared statement created for such query.
If to use derived tables or CTE instead of views the problem still
manifests itself crashing the server.

When optimizing the window specifications of a window function the
server can substitute the partition lists and the order lists for
the corresponding lists from another window specification in the case
when the lists are identical. This substitution is not permanent and should
be rolled back before the second execution. It was not done and this
ultimately led to a crash when resolving the column names at the second
execution of SP/PS.
2021-07-20 11:26:33 -07:00
Igor Babaev
872422dcbb MDEV-26025 Server crashes while executing query with CTE in PS/SP
This bug appeared after the patch for bug MDEV-23886. Due to this bug
execution of queries with CTEs used the same CTE at least twice via
prepared statements or with stored procedures caused crashes of the server.
It happened because the select created for any of not the first usage of
a CTE erroneously was not included into all_selects_list.
This patch corrects the patch applied to fix the bug MDEV-26108.

Approved by Oleksandr Byelkin <sanja@mariadb.com>
2021-07-20 10:37:37 -07:00
Eugene Kosov
7da1cfb07a avoid searching std::map twice in innochecksum 2021-07-20 19:32:33 +03:00
Eugene Kosov
1918bdf32c MDEV-25361 innochecksum must not report errors for freed pages
Store and maintain xdes pages always. And doesn't verify checksums for
freed pages.

innochecksum can work only with the first space file of multiple ones.
Tell about it and abort in case of not the first file.
2021-07-20 19:32:33 +03:00
Marko Mäkelä
61fcbed920 MDEV-26192: Sparse files are being created on thinly provisioned storage
In MDEV-26029 the intention was that page_compressed tables would
be written as regular (non-sparse) files if the file is stored on
a thinly provisioned block device.

We were incorrectly requesting os_file_set_size() to create
sparse files even on thinly provisioned storage.

fil_space_extend_must_retry(): Extend the file in the correct fashion.

fil_ibd_create(), recv_sys_t::recover_deferred(): Only create a
sparse file for page_compressed tables if thin provisioning is not
detected.
2021-07-20 17:36:46 +03:00
Marko Mäkelä
ed0a7b1b3f MDEV-24626 fixup: Remove useless code
fil_ibd_create(): Remove code that should have been removed in
commit 86dc7b4d4c already.
We no longer wrote an initialized page to the file, but we would
still allocate a page image in memory and write it.

xb_space_create_file(): Remove an unnecessary page write.
(This is a functional change for Mariabackup.)
2021-07-20 17:35:03 +03:00
Jagdeep Sidhu
5f8651ac23 Fix switch case statement in trx_flush_log_if_needed_low()
In commit 2e814d4702 on MariaDB 10.2
the switch case statement in trx_flush_log_if_needed_low() regressed.

Since 10.2 this code was refactored to have switches in descending
order, so value of 3 for innodb_flush_log_at_trx_commit is behaving
the same as value of 2, that is no FSYNC is being enforced during
COMMIT phase. The switch should however not be empty and cases 2 and 3
should not have the identical contents.

As per documentation, setting innodb_flush_log_at_trx_commit to 3
should do FSYNC to disk if innodb_flush_log_at_trx_commit is set to 3.
This fixes the regression so that the switch statement again does
what users expect the setting should do.

All new code of the whole pull request, including one or several files
that are either new files or modified ones, are contributed under the
BSD-new license. I am contributing on behalf of my employer Amazon Web
Services, Inc.
2021-07-20 16:05:40 +03:00
Marko Mäkelä
68694c8ed9 Update libmariadb 2021-07-20 12:36:35 +03:00
Vladislav Vaintroub
1cfcf32cd0 fix libmariadb compilation, on GCC. 2021-07-20 11:34:19 +02:00
Sergei Golubchik
ce2a2bff0f MDEV-20787 Script dgcov.pl does not work
When building with `make` gcov files use full path names,
when building with `ninja` gcov files use paths relative to the source root

in gcov_one_file() the current directory is somewhere under CMakeFiles/,
so if a file exists in the specified location, this location
must've been a full path name.
2021-07-20 10:29:53 +02:00
Sergei Golubchik
6638cf2e9e MDEV-20787 Script dgcov.pl does not work
For every file.gcda file, gcov <7.x created file.cc.gcda.gcov.
While gcov 7.x and 8.x create file.cc.gcov
And sometimes otherfile.h.gcov or otherfile.ic.gcov, for included files.

(gcov 9.x+ creates .json.gz files, see MDEV-26102)

So, we use `gcov -l` that will create file.cc.gcda##file.cc.gcov,
file.cc.gcda##otherfile.h.gcov, etc. And we search and parse all
those file.cc.gcda*.gcov files.
2021-07-20 10:24:12 +02:00
Marko Mäkelä
ae62f115be MDEV-26166: non-functional changes 2021-07-20 10:55:03 +03:00
Marko Mäkelä
eb9a28478f Merge 10.5 into 10.6 2021-07-20 10:54:17 +03:00