MDEV-28806 Assertion `flag == 1' failure in row_build_index_entry_low upon concurrent ALTER and UPDATE
Update operation doesn't affect the online index, but still innodb
tries to log the update operation during index rebuild. InnoDB should
ignore the logging for the index which wasn't affect the update
operation.
MDEV-26294 Duplicate entries in unique index not detected when
changing collation with INPLACE / NOCOPY algoritm
Problem:
=======
InnoDB inplace DDL fails to detect the duplicate entries
for the unique index when collation changes.
Solution:
========
InnoDB DDL has to create newly collaiton changed column
and map to the rebuild index fields. In that case, DDL code path
can apply the old record from the table without any issue.
change_column_collation(): Note down the changed column collation
and map the column to the rebuild index.
cleanup_col_collation(): In case of rollback, InnoDB has
to store the changed collation column to its own heap.
dict_change_col_info: Structure to store change collation
column in a index. It will be used only during
rollback_inplace_alter_table().
Revert "TSAN: data race on vptr (ctor/dtor vs virtual call)"
This reverts commit 78084fa747f373f2b404c3cb543d19f439100d9e.
This commit was done to please TSAN, which falsely reported an error
where there was none.
Yet as consequence, it could cause a real error, a crash in os_aio_free on
shutdown
fil_name_process(): If the recovery of a tablespace was deferred,
do invoke fil_ibd_load() even though the name in recv_spaces is
not changing. This allows us to recover from a situation where
there are many FILE_RENAME records, renaming a tablespace back
and forth, and a FILE_MODIFY record that had been written by
fil_names_clear().
MDEV-28920 Rescheduling of innodb_stats_func() missing
Fixed tpool timer implementation on POSIX.
Prior to this patch, under some specific rare circumstances (concurrency
related), timer callback execution might be skipped.
When attempting to recover a database with an incorrect encryption key,
the unencrypted page contents should be expected to differ from what
was written before recovery. Let us suppress some more messages.
This caused intermittent failures, depending on when the latest
log checkpoint was triggered.
On GNU/Linux, even though the C11 aligned_alloc() appeared in
GNU libc early on, some custom memory allocators did not
implement it until recently. For example, before
gperftools/gperftools@d406f2285390c402e824dd28e6992f7f890dcdf9
the free() in tcmalloc would fail to free memory that was
returned by aligned_alloc(), because the latter would map to the
built-in allocator of libc. The Linux specific memalign() has a
similar interface and is safer to use, because it has been
available for a longer time. For AddressSanitizer, we will use
aligned_alloc() so that the constraint on size can be enforced.
buf_tmp_reserve_compression_buf(): When HAVE_ALIGNED_ALLOC holds,
round up the size to be an integer multiple of the alignment.
pfs_malloc(): In the unit test stub, round up the size to be an
integer multiple of the alignment.