Commit graph

191564 commits

Author SHA1 Message Date
Vladislav Vaintroub
b5dab19efa MDEV-24757 : fix potential null pointer dereference in I_S.thread_pool_queues
With the fix, new connection without THDs will now show NULL in
thread_pool_queues.CONNECTION_ID.
2021-02-02 00:19:52 +01:00
Sergei Golubchik
e2c571ad84 MDEV-24498 mysql_config reports wrong libs for libmysqld
filter out tpool
2021-02-01 20:05:54 +01:00
Marko Mäkelä
324e5f02a9 MDEV-24754 Crash in ha_partition_inplace_ctx::~ha_partition_inplace_ctx()
ha_innobase::commit_inplace_alter_table(): Fix a regression that was
introduced in 6d1f1b61b5 (MDEV-24564).
2021-02-01 18:45:35 +02:00
David CARLIER
b1241585b2
Mac M1 build support proposal (minus rocksdb option) (#1743) 2021-01-30 17:04:27 +02:00
FX Coudert
52795c2f78 Apple Silicon is a 64-bit platform 2021-01-30 16:35:46 +02:00
Sergei Petrunia
73c43ee9ed MDEV-24739: Assertion `root->weight >= ...' failed in SEL_ARG::tree_delete
Also update the SEL_ARG graph weight in:
- sel_add()
- SEL_ARG::clone()

Make key_{and,or}_with_limit() to also verify weight for the arguments
(There is no single point to verify SEL_ARG graphs constructed from
conditions that are not AND-OR formulas, so we hope that those are
connected with AND/OR and do it here).
2021-01-30 00:54:21 +03:00
Marko Mäkelä
a70a47f2f3 MDEV-24661: Remove the test innodb.innodb_wl6326_big
The purpose of the test was to ensure that the SX (update) mode of
index tree and buffer page latches are being used.

The test has become unstable, possibly due to changes related to
buf_pool.mutex and buf_pool.page_hash, or to the use of MDL in the
purge of transaction history.

In 10.6, the test depends on instrumentation that was refactored
or removed in MDEV-24142.

The use of different latching modes can better be indirectly observed
through high-concurrency benchmarks. For MDEV-14637, a performance test
was conducted where the finer-grained latching and
BTR_CUR_FINE_HISTORY_LENGTH were removed. It caused a 20% performance
regression for UPDATE and somewhat smaller for INSERT.

Any new problem with latching granularity should be easily caught by
performance testing, or by stress tests with Random Query Generator.
2021-01-29 18:03:20 +02:00
Vladislav Vaintroub
d8373fea5f MDEV-24685 - remove IO thread states output from SHOW ENGINE INNODB STATUS
There are no IO threads anymore.
2021-01-29 18:02:14 +02:00
Sergei Petrunia
c36720388d MDEV-9750: Quick memory exhaustion with 'extended_keys=on' ...
(Variant #5, full patch, for 10.5)

Do not produce SEL_ARG graphs that would yield huge numbers of ranges.
Introduce a concept of SEL_ARG graph's "weight". If we are about to
produce a graph whose "weight" exceeds the limit, remove the parts
of SEL_ARG graph that represent the biggest key parts. Do so until
the graph's is within the limit.

Includes
- debug code to verify SEL_ARG graph weight
- A user-visible @@optimizer_max_sel_arg_weight to control the optimization
- Logging the optimization into the optimizer trace.
2021-01-29 16:20:57 +03:00
sjaakola
a2eb974b50 MDEV-24721 galera.mysql-wsrep-bugs-607 test failure
The implementation for MDEV-17048 apperas to be direct copy from mysql version.
The group commit works differently in mariadb and the assert in wsrep_unregister_from_group_commit() is too strict.

The reason is that in: Wsrep_high_priority_service::log_dummy_write_set(), the transaction will undergo full rollback:
    {
      cs.before_rollback();
      cs.after_rollback();
    }

After that, the client's transaction state is set to be:  wsrep::transaction::s_aborted.
The execution then continues execution by:

...
 wsrep_register_for_group_commit(m_thd);
...
 wsrep_unregister_from_group_commit(m_thd);

The bogus assert in wsrep_unregister_from_group_commit() allows only transactions states of :s_ordered_commit or s_aborting.

As the fix, I brought back the same assert as is present in MariaDB 10.4 version.
2021-01-29 12:14:08 +02:00
Anel Husakovic
85130c5a4f MDEV-24093: Detect during mysql_upgrade if type_mysql_json.so is needed and load it
a. The change makes `mariadb-upgrade` detect if `MYSQL_JSON` data type is needed.
b. Install the data type if it's not installed.
c. Uninstalls the data type once finished.
d. Create `.opt` and `.inc` files `have_type_mysql_json` and adapt the
tests

Reviewed by: vicentiu@mariadb.org
2021-01-28 19:01:32 +01:00
Marko Mäkelä
6d1f1b61b5 MDEV-24564 Statistics are lost after ALTER TABLE
Ever since commit 007f68c37f,
ALTER TABLE no longer invokes handler::open() after
handler::commit_inplace_alter_table().

ha_innobase::reload_statistics(): Reload or recompute statistics
after ALTER TABLE.

innodb_notify_tabledef_changed(): A new function to invoke
ha_innobase::reload_statistics().

handlerton::notify_tabledef_changed(): Add the parameter handler*
so that ha_innobase::reload_statistics() can be invoked.

ha_partition::notify_tabledef_changed(),
partition_notify_tabledef_changed(): Pass through the call
to any partitions or subpartitions.

This is based on code that was supplied by Monty.
2021-01-28 14:15:01 +02:00
Vlad Lesin
744e9752d8 MDEV-24705 add check that LSN of the last skipped log record equals to FIL_PAGE_LSN field
The check is added.
2021-01-28 14:31:25 +03:00
Thirunarayanan Balathandayuthapani
6e80a34d68 MDEV-24695 Encryption modifies a freed page
During recovery, InnoDB fails if it tries to apply a FREE_PAGE
and WRITE record to the page. InnoDB encryption thread accesses
the freed page and writes redo log for it.

This is similar to commit deadec4e68 (MDEV-24569)
InnoDB is missing buf_page_free() while freeing the segment.
To avoid accessing of freed page in buffer pool, InnoDB should
mark the pages as FREED while freeing the segment. Also to
avoid reading of freed page, InnoDB should check the
allocation bitmap page.

fseg_free_step(): Mark the page in buffer pool as FREED

fseg_free_step_not_header(): Mark the page in buffer pool as FREED

buf_dump(): Ignore the freed pages while dumping the buffer pool content

fil_crypt_get_page_throttle_func(): Skip the rotation for FREED page
to avoid the assert failure during recovery

fil_crypt_rotate_page(): Skip the rotation for the freed page

Reviewed-by: Marko Mäkelä
2021-01-28 13:26:34 +05:30
Marko Mäkelä
c6308355e5 MDEV-24612 fixup: Skip the test for --embedded 2021-01-28 07:51:43 +02:00
Thirunarayanan Balathandayuthapani
700ae20d45 MDEV-24693 LeakSanitizer: detected memory leaks in mem_heap_create_block_func / fts_optimize_create_msg
- This issue is caused by the commit bf1f9b59c7
(MDEV-24638). Delay the creation of SYNC message in
fts_optimize_request_sync_table. So that InnoDB can avoid creating
the message if the table already has SYNC message in fts_optimize_wq queue
2021-01-27 20:41:36 +05:30
Jan Lindström
30379d906b Update disabled.def in suites
* galera
* galera_sr
* galera_3nodes
2021-01-27 14:16:47 +02:00
Jan Lindström
e2bcf68279 MDEV-24010 : galera_3nodes.GCF-354 MTR fails : WSREP has not yet prepared node for application use
Correct test.
2021-01-27 10:55:10 +02:00
Roman Nozdrin
0565d19973 MDEV-24298 Select Handler now process INSERT..SELECT with a single derived at
the top level
2021-01-26 14:07:14 +00:00
Marko Mäkelä
927a882341 Merge 10.4 into 10.5 2021-01-25 15:06:52 +02:00
Marko Mäkelä
e626f511f9 MDEV-24653 fixup: Make the test deterministic 2021-01-25 14:56:38 +02:00
Marko Mäkelä
5db3827689 Merge 10.3 into 10.4 2021-01-25 14:43:07 +02:00
Marko Mäkelä
75538f94ca MDEV-24653 fixup: Make the test deterministic 2021-01-25 14:40:22 +02:00
Marko Mäkelä
0c3d264207 instant_alter_debug: Cover everything with innodb_instant_alter_column 2021-01-25 13:56:10 +02:00
Marko Mäkelä
961c7938bb Merge 10.4 into 10.5 2021-01-25 12:44:24 +02:00
Marko Mäkelä
3467f63764 Merge 10.3 into 10.4 2021-01-25 11:02:07 +02:00
Marko Mäkelä
eaeb8ec4b8 MDEV-24653 Assertion block->page.id.page_no() == index->page failed in innobase_add_instant_try()
We may end up with an empty leaf page (containing only an ADD COLUMN
metadata record) that is not the root page.

innobase_add_instant_try(): Disable an optimization for a non-canonical
empty table that contains a metadata record somewhere else than in
the root page.

btr_pcur_store_position(): Tolerate a non-canonical empty table.
2021-01-25 10:24:35 +02:00
Marko Mäkelä
5adcb2e7b8 MDEV-24661: Disable an unstable test 2021-01-23 17:56:50 +02:00
Marko Mäkelä
84b8f529c7 MDEV-24659 Assertion !fsp_is_system_temporary(bpage->id().space()) failed in buf_flush_relocate_on_flush_list()
When commit 5eb539555b (MDEV-12227)
removed the pages of temporary tables from the buf_pool.flush_list,
an adjustment to the buffer pool resizing was forgotten.

buf_pool_t::realloc(): Do not invoke buf_flush_relocate_on_flush_list()
for pages that belong to the temporary tablespace. Also, deduplicate
some code at the end.

buf_page_t::set_corrupt_id(): Tolerate oldest_modification()==1
(the dummy value) for temporary tablespace pages. The revised
buf_pool_t::realloc() may invoke this on dirty temporary tablespace pages.
2021-01-23 17:45:03 +02:00
Marko Mäkelä
0e10d7ea14 MDEV-22351 InnoDB may recover wrong information after RESET MASTER
Ever since commit 947efe17ed
InnoDB no longer writes binlog position in one place.
It will not at all be written to the TRX_SYS page, and
instead it will be written to the undo log header page that
changes the transaction state.

trx_rseg_mem_restore(): Recover the information from the latest
written page.
2021-01-22 16:44:17 +02:00
Thirunarayanan Balathandayuthapani
bf1f9b59c7 MDEV-24638 Avoid repetitive FTS SYNC request for table
fts_optimize_request_sync_table() can avoid the repetitive
FTS SYNC request of the table if the table already has FTS_SYNC
message in fts_optimize_wq queue.

Reviewed-by: Marko Mäkelä
2021-01-22 18:27:08 +05:30
Jan Lindström
ce141d0714 MDEV-24463 : galera.galera_sst_mysqldump_with_key MTR failed: 'INSERT failed: 1213: Deadlock found when trying to get lock
We need to complete SST if both new and old start positions are
not same as initial positions. If they are initial positions
just set local uuid and seqno.
2021-01-22 12:12:42 +02:00
Thirunarayanan Balathandayuthapani
816808d6c9 MDEV-24652 mtr fails while reusing the cached undo log block
While reusing the cached undo log block, mtr expects the page
write to change while writing the trx id. cached undo log block
could contain bytes which were originally written for some other
transaction. So InnoDB should make mtr to do MAYBE_NOP while reusing
cached undo log block.

Reviewed-by: Marko Mäkelä
2021-01-22 14:58:49 +05:30
Sergei Golubchik
4e503aec7f MDEV-24593 Signal 11 when group by primary key of table joined to information_schema.columns
I_S tables were materialized too late, an attempt to use table
statistics before the table was created caused a crash.

Let's move table creation up. it only needs read_set to
be calculated properly, this happens in JOIN::optimize_inner(),
after semijoin transformation.

Note that tables are not populated at that point, so most of the
statistics would make no sense anyway. But at least field sizes
will be correct. And it won't crash.
2021-01-22 00:04:31 +01:00
Sergei Golubchik
61feb568bb remove now-unused rdiff file 2021-01-22 00:04:31 +01:00
Monty
6eb1eed53f MDEV-24452 ALTER TABLE event take infinite time which for example breaks mysql_upgrade
The problem was that update_timing_fields_for_event() didn't release all
MDL locks it took.
2021-01-21 18:34:22 +02:00
Jan Lindström
be5fce16a0 MDEV-24596 : Assertion `state_ == s_exec || state_ == s_quitting' failed in wsrep::client_state::disable_streaming
There were multiple problems here
* wsrep_trx_fragment_size should not be set when wsrep is disabled or provider is not loaded
* wsrep_trx_fragment_unit should not be set when wsrep is disabled or provider is not loaded
* wsrep_debug has no effect if wsrep is disabled or provider is not loaded
* wsrep_start_position should not be set when wsrep is disabled or provider is not loaded any other value than default
* wsrep_start_position should be changed only when we are joiner or initialized
* wsrep_start_position should be allowed to set only a value that exits, thus
we need to add error handling to wsrep_sst_complete
2021-01-21 11:41:29 +02:00
sjaakola
9377e9ba0c MDEV-21153 Replica nodes crash due to indexed virtual columns and FK cascading delete
Fix for MDEV-23033 fixes a problem in replication applying of transactions, which contain cascading foreign key delete for a table, which has indexed virtual column.
This fix adds slave_fk_event_map flag for table, to mark when the prelocking is needed for applying of a transaction.
See commit 608b0ee52e for more details.
However, this fix is targeted for async replication only, Rows_log_event::do_apply_event() has condition to rule out galera replication from the fix domain, and use cases suffering from MDEV-23033 and related MDEV-21153 will fail in galera cluster.

The fix in this commit removes the condition to rule out the setting of slave_fk_event_map flag from galera replication, and makes the fix in MDEV-23033 effective for galera replication as well.

However, the above fix has caused regressions for some galera_sr suite tests, which run tests for streaming replication.
This regression can be observed e.g. by: /mtr galera_sr.galera_sr_multirow_rollback  --mysqld=--slave_run_triggers_for_rbr=yes
These galera_sr suite tests were failing in last phase of replication applying, where actual transaction is already applied, and streaming replication related meta data needs to be updated in wsrep system tables.
Opening the wsrep system tables failed for corrupt data in THD::lex:query_tables_list. The fix in this commit uses back query table list for the duration of fragment update operation.

Finally, a mtr test for virtual column support has been added. galera.galera_virtual_column.test has as first test a scenario from MDEV-21153

new fix

Reviewed-by: Jan Lindström <jan.lindstrom@mariadb.com>
2021-01-20 08:11:13 +02:00
sjaakola
7d04ce6a2d MDEV-21153 Replica nodes crash due to indexed virtual columns and FK cascading delete
Fix for MDEV-23033 fixes a problem in replication applying of transactions, which contain cascading foreign key delete for a table, which has indexed virtual column.
This fix adds slave_fk_event_map flag for table, to mark when the prelocking is needed for applying of a transaction.
See commit 608b0ee52e for more details.
However, this fix is targeted for async replication only, Rows_log_event::do_apply_event() has condition to rule out galera replication from the fix domain, and use cases suffering from MDEV-23033 and related MDEV-21153 will fail in galera cluster.

The fix in this commit removes the condition to rule out the setting of slave_fk_event_map flag from galera replication, and makes the fix in MDEV-23033 effective for galera replication as well.

Finally, a mtr test for virtual column support has been added. galera.galera_virtual_column.test has as first test a scenario from MDEV-21153

Reviewed-by: Jan Lindström <jan.lindstrom@mariadb.com>
2021-01-19 12:12:10 +02:00
Dmitry Shulga
8bcddb02b7 MDEV-24577: Fix warnings generated during compilation of plugin/auth_pam/testing/pam_mariadb_mtr.c on FreeBSD
Compiler warnings generated on building MariaDB server for BSD has the same
reason as in case building is performed on MacOS. Both platforms do use
clang as a C/C++ compiler. So, fix the compiler warnings in case the compiler
is clang doesn't matter what kind of building platform do we use for building.

This is a follow-up patch for the following bug reports:
  MDEV-23564: CMAKE failing due to deprecated Apple GSS method
  MDEV-23935: Fix warnings generated during compilation of
              plugin/auth_pam/testing/pam_mariadb_mtr.c on MacOS
2021-01-19 16:08:46 +07:00
Marko Mäkelä
049811ec3c Merge 10.2 into 10.3 2021-01-19 08:31:03 +02:00
Vlad Lesin
9930cb22c7 MDEV-24612: innodb hangs if it's initialization is broken before encryption threads are started
Do not init encryption threads if shutdown is in progress.
2021-01-19 06:43:56 +03:00
Sergei Golubchik
7c052cdf0b cmake warning, if/endif mismatch 2021-01-17 13:21:55 +01:00
Monty
a5b54f78a7 Code cleanups
- Fix long lines to be <= 80 character
- Trivial changes (no logic changes)
2021-01-15 17:53:11 +02:00
Monty
9a60e89a90 Fixed some possible usage of freed memory
- Create_tmp_table::finalize didn't clear file after delete which
  could cause a double free. This is however not a likely problem as
  this code path is very unlikely to happen
- free_tmp_table() could do handler calls even if the table was never
  opened. Fixed by adding a test if the table is opened.
2021-01-15 14:12:26 +02:00
Marko Mäkelä
76b58c2af7 MDEV-24600 performance_schema.events_transactions_history_long.trx_id reports garbage
The table performance_schema.events_transactions_history_long that
was imported from MySQL 5.7.28 in
commit 0ea717f51a
may report bogus trx_id values for InnoDB transactions.

innobase_register_trx(): Pass trx->id to trans_register_ha(),
even if it is 0. It is more appropriate to report NULL than some
arbitrary value that has been constructed from the address of a
transaction identifier.
2021-01-15 13:43:05 +02:00
David Carlier
d79141d641 msys: detects crc/cryptosupport on FreeBSD/arm
closes #1737

Reviewers: Marko Mäkelä, Krunal Bauskar
2021-01-15 18:49:43 +11:00
pkubaj
dc3681e5ed Implement CPU feature checks for FreeBSD/powerpc64
Fixes build on powerpc64 and powerpc64le.

Closes: #1710
2021-01-15 15:40:10 +11:00
Marko Mäkelä
deadec4e68 MDEV-24569: Change buffer merge modifies freed page
Starting with MDEV-15528, we will avoid writing freed pages back
to data files. During stress testing, the assertion
mach_read_from_4(frame + 4U) == block.page.id().page_no()
failed in log_phys_t::apply(), because before the server was
killed and restarted, change buffer merge was executed on a
previously freed page.

During recovery, the assertion would fail when InnoDB would apply
a FREE_PAGE and a WRITE record to the page.

ibuf_merge_or_delete_for_page(): Before applying any changes, check whether
the secondary index leaf page has already been freed according to
the allocation bitmap page. If it is freed, then we must reset the bits
in change buffer bitmap page.

ibuf_reset_bitmap(): Auxiliary function for repeated code.

mtr_t::sx_lock_space(): Replaces mtr_t::x_lock_space(). Due to the
lazy approach of the change buffer, The function
ibuf_merge_or_delete_for_page() may be executed in buf_page_create()
while the tablespace is already X-latched. An S-latch must not be
acquired while the thread already holds an X-latch, but a redundant
SX-latch is fine.

The fix was developed by Thirunarayanan Balathandayuthapani.
2021-01-14 14:26:24 +02:00
Jan Lindström
b87828b6c8 MDEV-22285 : Assertion `xid_seqno > wsrep_seqno' failed in trx_rseg_update_wsrep_checkpoint on SET @@global.wsrep_start_position
Actual assertion mentioned on MDEV seems to be already fixed but
setting seqno to -2 will trigger a different assertion

mysqld: /home/jan/mysql/10.4-bugs/wsrep-lib/src/server_state.cpp:702: void wsrep::server_state::sst_received(wsrep::client_service&, int): Assertion `state_ == s_joiner || state_ == s_initialized' failed.

Fixed this by not allowing user to set seqno < -1 (-1 is special
seqno meaning undefined and seqno is initialized to it). MariaDB
releases 10.2 and 10.3 already do not allow to set seqno < -1.
2021-01-14 11:26:28 +02:00