Commit graph

18834 commits

Author SHA1 Message Date
Marko Mäkelä
a72f34c0a2 MDEV-12868 MySQL bug #84038 also affects MariaDB 10.2
Cherry-pick the commit from MySQL 5.7.19, and adapt the test case:

commit 45c933ac19c73a3e9c756a87ee1ba18ba1ac564c
Author: Aakanksha Verma <aakanksha.verma@oracle.com>
Date:   Tue Mar 21 10:31:43 2017 +0530

    Bug #25189192   ERRORS WHEN RESTARTING MYSQL AFTER RENAME TABLE.

    PROBLEM

    While renaming table innodb doesn't update the InnoDB Dictionary table
    INNODB_SYS_DATAFILES incase there is change in database while doing
    rename table. Hence on a restart the server log shows error that it
    couldnt find table with old path before rename which has actually been
    renamed. So the errors would only vanish if we update the system
    tablespace

    FIX

    Update the innodb dictionary table with new path in the case there is
    not a change in the table but the database holding the table as well.

    Reviewed-by: Jimmy Yang<Jimmy.Yang@oracle.com>
    RB: 15751
2017-08-09 22:28:04 +03:00
Marko Mäkelä
c720e68f53 MDEV-13472 rpl.rpl_semi_sync_wait_point crashes because of thd_destructor_proxy
The thd_destructor_proxy detects that no transactions are active and
starts srv_shutdown_bg_undo_sources(), but fails to take into account
that new transactions can still start, especially be slave but also
by other threads. In addition there is no mutex when checking for
active transaction so this is not safe.

We relax the failing InnoDB debug assertion by allowing the execution
of user transactions after the purge thread has been shut down.

FIXME: If innodb_fast_shutdown=0, we should somehow guarantee that no
new transactions can start after thd_destructor_proxy observed that
trx_sys_any_active_transactions() did not hold.
2017-08-09 08:14:39 +03:00
Marko Mäkelä
ffa3789495 Follow-up to MDEV-11487: Remove InnoDB internal temporary tables
row_update_for_mysql(): Remove the wrapper function and
rename the function from row_update_for_mysql_using_upd_graph().
Remove the unused parameter mysql_rec.
2017-08-08 15:34:41 +03:00
Marko Mäkelä
c3f9fdeaf5 Add DBUG "trx" instrumentation that was used for catching MDEV-13470 2017-08-08 15:32:23 +03:00
Marko Mäkelä
6f623907cd Backport MDEV-13430 recovery improvement to MariaDB 10.2
If the latest InnoDB redo log checkpoint was stored in the
first checkpoint slot and not the second one, InnoDB would
incorrectly set log_sys->log.lsn to the previous checkpoint.

It is possible that this logic error did not exist before
commit 86927cc712, which
removed traces of multiple InnoDB redo logs, to prepare for
MDEV-12548 (Mariabackup for MariaDB 10.2). In the worst case,
this error could mean that InnoDB unnecessarily fails to
recover from redo log when the last-but-one checkpoint was
overwritten, but the last checkpoint is intact.

recv_find_max_checkpoint(), recv_find_max_checkpoint_0():
Do not overwrite the fields of log_sys->log with the information
of an older checkpoint.

recv_find_max_checkpoint(): Do not return DB_SUCCESS on an error.

recv_recovery_from_checkpoint_start(): Return early if the log is
in a version-tagged format but not in the latest format. (In this case,
the log must be logically empty, and there is nothing to apply.)
2017-08-08 09:44:38 +03:00
Jan Lindström
34eef269eb MDEV-11939: innochecksum mistakes a file for an encrypted one (page 0 invalid)
Always read full page 0 to determine does tablespace contain
encryption metadata. Tablespaces that are page compressed or
page compressed and encrypted do not compare checksum as
it does not exists. For encrypted tables use checksum
verification written for encrypted tables and normal tables
use normal method.

buf_page_is_checksum_valid_crc32
buf_page_is_checksum_valid_innodb
buf_page_is_checksum_valid_none
        Modify Innochecksum logging to file to avoid compilation
	warnings.

fil0crypt.cc fil0crypt.h
        Modify to be able to use in innochecksum compilation and
        move fil_space_verify_crypt_checksum to end of the file.
        Add innochecksum logging to file.

univ.i
        Add innochecksum strict_verify, log_file and cur_page_num
        variables as extern.

page_zip_verify_checksum
        Add innochecksum logging to file and remove unnecessary code.

innochecksum.cc
        Lot of changes most notable able to read encryption
        metadata from page 0 of the tablespace.

Added test case where we corrupt intentionally
FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION (encryption key version)
FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION+4 (post encryption checksum)
FIL_DATA+10 (data)
2017-08-08 09:41:09 +03:00
Kristian Nielsen
36e81a23c5 MDEV-11937: InnoDB flushes redo log too often
Problem was introduced with the InnoDB 5.7 merge, the code related to
avoiding extra fsync at the end of commit when binlog is enabled. The
MariaDB method for this was removed, but the replacement MySQL method
based on thd_get_durability_property() is not functional in MariaDB.

This commit reverts the offending parts of the merge and adds a test
case, to fix the problem for InnoDB. But other storage engines are
likely to have a similar problem.
2017-08-07 18:23:55 +02:00
Sergei Petrunia
5ae598390a Attempt to make rocksdb.rocksdb_parts stable 2017-08-07 18:12:24 +03:00
Sergei Petrunia
30c36b2c15 Make rocksdb.rocksdb_icp test stable 2017-08-07 17:25:11 +03:00
Marko Mäkelä
dcdc1c6d09 MDEV-13452 Assertion `!recv_no_log_write' failed in log_reserve_and_open()
The debug flag recv_no_log_write prohibits writes of redo log records for
modifying page data. The debug assertion was failing when fil_names_clear()
was writing the informative MLOG_FILE_NAME and MLOG_CHECKPOINT records
which do not modify any data.

log_reserve_and_open(), log_write_low(): Remove the debug assertion.

log_pad_current_log_block(), mtr_write_log(),
mtr_t::Command::prepare_write(): Add the debug assertion.
2017-08-07 13:54:37 +03:00
Marko Mäkelä
a33220fbef MDEV-13451 Assertion `!recv_no_ibuf_operations' failed in ibuf_page_low()
During InnoDB startup, change buffer merge operations are prohibited
before recv_apply_hashed_log_recs(true), which performs the last phase
of redo log apply. Before this call, ibuf_init_at_db_start() would be
invoked, and it could trigger the debug assertion.

ibuf_init_at_db_start(): Do not declare the mini-transaction as
"inside change buffer", because nothing is being written in the
mini-transaction. The purpose of this function is only to initialize
the memory data structures from the persistent data structures.
2017-08-07 13:50:31 +03:00
Sergei Petrunia
93a6eed607 Backport to 10.2: Make rocksdb.type_varchar test stable
It may produce test failures like this because of non-deterministic
cost calculations:

-1	SIMPLE	t1	#	col1	col1	259	NULL	#	Using where
+1	SIMPLE	t1	#	col1	NULL	NULL	NULL	#	Using where
2017-08-06 15:36:50 +03:00
Sergei Petrunia
7925a4bce8 More comments 2017-08-05 13:57:17 +00:00
Sergei Petrunia
eda033255a Make "SET @@rocksdb_bulk_load=0" return an error instead of crashing the server
- This is more in line with MariaDB environment
- And help with rocksdb.bulk_load_errors test, too
2017-08-03 15:16:40 +00:00
Sergei Petrunia
fcb8d8e598 Make rocksdb.prefix_extractor_override work on Windows 2017-08-01 19:19:54 +00:00
Sergei Petrunia
0899724257 Use proper #include's 2017-08-01 08:50:48 +00:00
Sergei Petrunia
2963a49f72 Post-merge fix: Rdb_io_watchdog doesn't support windows
Part #2.
2017-08-01 08:50:25 +00:00
Sergei Petrunia
61ca3cf524 Post-merge fix: Rdb_io_watchdog doesn't support windows
So disable it there for now.
2017-07-31 17:34:47 +00:00
Sergei Petrunia
1388afcd84 MDEV-13413: After the merge rocksdb.drop_table fails with warnings
- Fix the bad merge in drop_table.test
- Remove the obsolete rocksdb_info_log_level=info_level option
  which caused warnings to be found in the error log.
2017-07-31 13:44:15 +00:00
Sergei Petrunia
6bf757a2a9 Disable rocksdb.issue243_transactionStatus
It uses SHOW ENGINE TRANSACTION STATUS, which is not supported in MariaDB
2017-07-30 13:37:04 +00:00
Sergei Petrunia
4eec6d4cca Update test result for rocksdb.tbl_opt_data_index_dir
See MDEV-12279, MariaDB is still not able to produce nice error messages
in this case.
2017-07-30 13:36:11 +00:00
Sergei Petrunia
da9c669210 Fixes for a few more post-merge test failures 2017-07-30 12:09:51 +00:00
Sergei Petrunia
d74e43e7bc Fix rocksdb.duplicate_table test 2017-07-30 11:12:54 +00:00
Sergei Petrunia
894c797eaf Mark all tests that are derived from rocksdb.bulk_load as "big".
(Could we just put the mark into bulk_load.inc ?)
2017-07-30 10:51:27 +00:00
Sergei Petrunia
1e6b02e688 MDEV-13404: MyRocks upstream uses I_S.table_statistics.row_lock_deadlocks
Comment out a part of testcase that uses it.
2017-07-30 10:42:39 +00:00
Sergei Petrunia
123187dfed Fix the merge of rocksdb_sys_vars test suite 2017-07-29 18:06:46 +00:00
Sergei Petrunia
ff0ae68eae Merge branch 'bb-10.2-mariarocks' of github.com:MariaDB/server into bb-10.2-mariarocks 2017-07-29 17:05:38 +00:00
Sergei Petrunia
d083c2490a Make rocksdb.bloomfilter_skip pass. 2017-07-29 17:05:14 +00:00
Sergei Petrunia
a95ace491b Test result updates: don't hardcode error numbers in the tests. 2017-07-29 15:26:55 +00:00
Sergei Petrunia
b2617cae3f Post-merge fix: fix compilation 2017-07-29 17:24:10 +03:00
Sergei Petrunia
be6c4f5d15 More post-merge updates to get the tests pass 2017-07-29 13:24:55 +00:00
Sergei Petrunia
a89d01fb60 Trivial updates to get a few rocksdb.* testcases to pass 2017-07-29 11:06:22 +00:00
Sergei Petrunia
f2952485a1 Merge MyRocks merge tree into bb-10.2-mariarocks, unfinished.
It compiles on Linux but fails a lot of tests still
2017-07-29 10:06:09 +00:00
Sergei Petrunia
43d5edf97c Copy of
commit 394d0712d3d46a87a8063e14e998e9c22336e3a6
Author: Anca Agape <anca@fb.com>
Date:   Thu Jul 27 15:43:07 2017 -0700

    Fix rpl.rpl_4threads_deadlock test broken by D5005670

    Summary:
    In D5005670 in fill_fields_processlist() function we introduced a point
    where we were trying to take the LOCK_thd_data before the
    synchronization point used by test
    processlist_after_LOCK_thd_count_before_LOCK_thd_data. This was
    happening in get_attached_srv_session() function called. Replaced this
    with get_attached_srv_session_safe() and moved it after lock is aquired.

    Reviewed By: tianx

    Differential Revision: D5505992

    fbshipit-source-id: bc53924
2017-07-28 17:52:07 +00:00
Sergei Petrunia
488f46f3de MDEV-13153: Assertion ... failed on partitioned RocksDB table
ha_partition creates temporary ha_XXX objects for its partitions when
performing DDL operations. The objects were created on a MEM_ROOT and
never deleted.
This works as long as ha_XXX objects free all data ha_XXX::close() and
don't rely on a proper destructor invocation. Unfortunately, ha_rocksdb
includes String members which need to be delete'd properly.

Fixed the bug by having ha_partition::~ha_partition delete these temporary
objects.
2017-07-28 13:22:28 +00:00
Sergei Golubchik
1b3cf18e4e CONNECT: accessed p[i] outside of the loop
this failed json.test on fulltest2 builder
2017-07-15 19:36:43 +02:00
Sergei Golubchik
95dcfeded4 deb packages didn't build
because they compile with -Werror=format-security
2017-07-13 19:19:43 +02:00
Sergei Golubchik
b9aab7d9e3 Merge branch 'connect/10.2' into 10.2 2017-07-13 10:33:24 +02:00
Elena Stepanova
5ff2db7f67 Follow-up for MDEV-13089 (identifier quoting in partitioning)
Adjust results for storage_engine tests
2017-07-10 00:05:45 +03:00
Elena Stepanova
4df726e180 storage_engine subsuites should also be disabled for XtraDB 2017-07-10 00:05:06 +03:00
Elena Stepanova
93e32d725c Follow-up for MDEV-13089 (identifier quoting in partitioning)
Adjust results for tests in non-default suites
2017-07-09 20:38:57 +03:00
Sergei Golubchik
c9801135c1 Merge branch '10.1' into 10.2 2017-07-08 09:56:28 +02:00
Marko Mäkelä
42f657cd2f MDEV-13267 At startup with crash recovery: mtr_t::commit_checkpoint(lsn_t, bool): Assertion `!recv_no_log_write' failed
This is a bogus debug assertion failure that should be possible
starting with MariaDB 10.2.2 (which merged WL#7142 via MySQL 5.7.9).

While generating page-change redo log records is strictly out of the
question during tat certain parts of crash recovery, the
fil_names_clear() is only emitting informational MLOG_FILE_NAME
and MLOG_CHECKPOINT records to guarantee that if the server is killed
during or soon after the crash recovery, subsequent crash recovery
will be possible.

The metadata buffer that fil_names_clear() is flushing to the redo log
is being filled by recv_init_crash_recovery_spaces(), right before
starting to apply redo log, by invoking fil_names_dirty() on every
discovered tablespace for which there are changes to apply.

When it comes to Mariabackup (xtrabackup --prepare), it is strictly out
of the question to generate any redo log whatsoever, because that could
break the restore of incremental backups by causing LSN deviation.
So, the fil_names_dirty() call must be skipped when restoring backups.

recv_recovery_from_checkpoint_start(): Do not invoke fil_names_clear()
when restoring a backup.

mtr_t::commit_checkpoint(): Remove the failing assertion. The only
caller is fil_names_clear(), and it must be called by
recv_recovery_from_checkpoint_start() for normal server startup to be
crash-safe. The debug assertion in mtr_t::commit() will still
catch rogue redo log writes.
2017-07-07 18:40:57 +03:00
Sergei Golubchik
9e11e055ce Merge branch '10.0' into 10.1 2017-07-07 11:30:03 +02:00
Sergei Golubchik
89dc445a55 Merge branch '5.5' into 10.0 2017-07-06 23:47:33 +02:00
Marko Mäkelä
d902d43ce7 Merge 10.1 into 10.2 2017-07-06 20:28:08 +03:00
Vladislav Vaintroub
6f1f911497 MDEV-12445 : Rocksdb does not shutdown worker threads and aborts in memleak check on server shutdown
Disable memory leak check in debug server, if rocksdb is loaded.
There is some subtle bug somewhere in 3rd party code we cannot
do much about.

The bug is manifested as follows

Rocksdb does not shutdown worker threads, when plugin is shut down. Thus
OS does not unload the library since there are some active threads using
this library's code. Thus global destructors in the library do not run,
and there is still some memory allocated when server exits.

The workaround disables server's memory leak check, if rocksdb engine was
loaded.
2017-07-06 11:36:17 +00:00
Vladislav Vaintroub
53d6325db0 Fix assertion in rocksb.
Use thd_query_safe() to read query from a different connection.
2017-07-06 11:35:54 +00:00
Marko Mäkelä
2b5c9bc2c8 MDEV-13247 innodb_log_compressed_pages=OFF breaks crash recovery of ROW_FORMAT=COMPRESSED tables
The option innodb_log_compressed_pages was contributed by
Facebook to MySQL 5.6. It was disabled in the 5.6.10 GA release
due to problems that were fixed in 5.6.11, which is when the
option was enabled.

The option was set to innodb_log_compressed_pages=ON by default
(disabling the feature), because safety was considered more
important than speed. The option innodb_log_compressed_pages=OFF
can *CORRUPT* ROW_FORMAT=COMPRESSED tables on crash recovery
if the zlib deflate function is behaving differently (producing
a different amount of compressed data) from how it behaved
when the redo log records were written (prior to the crash recovery).

In MDEV-6935, the default value was changed to
innodb_log_compressed_pages=OFF. This is inherently unsafe, because
there are very many different environments where MariaDB can be
running, using different zlib versions. While zlib can decompress
data just fine, there are no guarantees that different versions will
always compress the same data to the exactly same size. To avoid
problems related to zlib upgrades or version mismatch, we must
use a safe default setting.

This will reduce the write performance for users of
ROW_FORMAT=COMPRESSED tables. If you configure
innodb_log_compressed_pages=ON, please make sure that you will
always cleanly shut down InnoDB before upgrading the server
or zlib.
2017-07-06 14:18:53 +03:00
Marko Mäkelä
0ff62ad808 InnoDB: Remove a redundant condition and an outdated comment
Since MariaDB 10.2.2, temporary table metadata is not written
to the InnoDB data dictionary tables. Therefore,
the DICT_TF2_TEMPORARY flag cannot be set in SYS_TABLES,
except if there exist orphan temporary tables that were created
before MariaDB 10.2.2.

trx_resurrect_table_locks(): Do not skip temporary tables.
If a resurrect transaction modified a temporary table that was
created before MariaDB 10.2.2, that table would be treated
internally as a persistent table. It is safer to resurrect
locks than to skip the table, because the table would be modified
on transaction rollback.
2017-07-06 02:14:33 +03:00