diff options
author | Monty <monty@mariadb.org> | 2018-05-15 11:46:55 +0300 |
---|---|---|
committer | Monty <monty@mariadb.org> | 2018-05-15 11:46:55 +0300 |
commit | 2b749a7bf4f6a6d70f05e8e4b42d088b397adea8 (patch) | |
tree | 6f81ed3e36863c24b492702eec05703b2fceae29 /storage/maria | |
parent | 318097bb8f6e12c546b5dcd287416158209dbb39 (diff) | |
download | mariadb-git-2b749a7bf4f6a6d70f05e8e4b42d088b397adea8.tar.gz |
MDEV-654 Assertion `share->now_transactional' failed in flush_log_for_bitmap on concurrent workload with Aria tables
Problem was that we the bitmap needs to be flushed before disabling
logging of redo entires, as writing the bitmap to disk by
background checkpoint may cause redo entries.
Diffstat (limited to 'storage/maria')
-rw-r--r-- | storage/maria/ha_maria.cc | 1 | ||||
-rw-r--r-- | storage/maria/ma_recovery.c | 8 |
2 files changed, 9 insertions, 0 deletions
diff --git a/storage/maria/ha_maria.cc b/storage/maria/ha_maria.cc index 0c41037f33e..ca2d050ddfe 100644 --- a/storage/maria/ha_maria.cc +++ b/storage/maria/ha_maria.cc @@ -1312,6 +1312,7 @@ int ha_maria::check(THD * thd, HA_CHECK_OPT * check_opt) old_proc_info= thd_proc_info(thd, "Checking status"); thd_progress_init(thd, 3); error= maria_chk_status(param, file); // Not fatal + /* maria_chk_size() will flush the page cache for this file */ if (maria_chk_size(param, file)) error= 1; if (!error) diff --git a/storage/maria/ma_recovery.c b/storage/maria/ma_recovery.c index 75a8f4f4559..af0d9476f2a 100644 --- a/storage/maria/ma_recovery.c +++ b/storage/maria/ma_recovery.c @@ -3521,6 +3521,14 @@ void _ma_tmp_disable_logging_for_table(MARIA_HA *info, { MARIA_SHARE *share= info->s; DBUG_ENTER("_ma_tmp_disable_logging_for_table"); + + /* + We have to ensure that bitmap is flushed, as it's checking + that share->now_transactional is set + */ + if (share->now_transactional && share->data_file_type == BLOCK_RECORD) + _ma_bitmap_flush_all(share); + if (log_incomplete) { uchar log_data[FILEID_STORE_SIZE]; |