mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Fixed bug where automaticly zerofilled table was not part of recovery if crash happended before next checkpoint.
mysql-test/suite/maria/r/maria-autozerofill.result: Updated test case storage/maria/ha_maria.cc: Write create_rename_lsn for auto_zerofilled tables. storage/maria/ma_delete.c: Added DBUG_ASSERT() to find errors when deleting pages. storage/maria/ma_locking.c: Fixed typo storage/maria/ma_open.c: Don't regard file as movable if create_rename_lsn is not LSN_NEEDS_NEW_STATE_LSNS
This commit is contained in:
@@ -13,8 +13,7 @@ a
|
||||
Warnings:
|
||||
Error 1194 t1' is marked as crashed and should be repaired
|
||||
flush table t1;
|
||||
Status: changed,sorted index pages,zerofilled,movable
|
||||
create_rename_lsn has magic value
|
||||
Status: changed,sorted index pages,zerofilled
|
||||
insert into t1 values(2);
|
||||
flush table t1;
|
||||
create_rename_lsn has non-magic value
|
||||
|
@@ -1425,8 +1425,12 @@ int ha_maria::zerofill(THD * thd, HA_CHECK_OPT *check_opt)
|
||||
|
||||
if (!error)
|
||||
{
|
||||
TrID create_trid= trnman_get_min_safe_trid();
|
||||
pthread_mutex_lock(&share->intern_lock);
|
||||
share->state.changed|= STATE_NOT_MOVABLE;
|
||||
maria_update_state_info(¶m, file, UPDATE_TIME | UPDATE_OPEN_COUNT);
|
||||
_ma_update_state_lsns_sub(share, LSN_IMPOSSIBLE, create_trid,
|
||||
TRUE, TRUE);
|
||||
pthread_mutex_unlock(&share->intern_lock);
|
||||
}
|
||||
return error;
|
||||
|
@@ -247,6 +247,7 @@ my_bool _ma_ck_real_delete(register MARIA_HA *info, MARIA_KEY *key,
|
||||
|
||||
if (page.size <= page.node + share->keypage_header + 1)
|
||||
{
|
||||
DBUG_ASSERT(page.size == page.node + share->keypage_header);
|
||||
if (page.node)
|
||||
*root= _ma_kpos(page.node, root_buff +share->keypage_header +
|
||||
page.node);
|
||||
|
@@ -398,7 +398,7 @@ int _ma_mark_file_changed(register MARIA_SHARE *share)
|
||||
/*
|
||||
For transactional tables, the table is marked changed when the first page
|
||||
is written. Here we just mark the state to be updated so that caller
|
||||
can do 'anaylze table' and find that is has changed before any pages
|
||||
can do 'analyze table' and find that is has changed before any pages
|
||||
are written.
|
||||
*/
|
||||
if (! test_all_bits(share->state.changed,
|
||||
|
@@ -748,6 +748,11 @@ MARIA_HA *maria_open(const char *name, int mode, uint open_flags)
|
||||
HA_ERR_CRASHED_ON_REPAIR : HA_ERR_CRASHED_ON_USAGE);
|
||||
goto err;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* create_rename_lsn != LSN_NEEDS_NEW_STATE_LSNS */
|
||||
share->state.changed|= STATE_NOT_MOVABLE;
|
||||
}
|
||||
}
|
||||
else
|
||||
share->page_type= PAGECACHE_PLAIN_PAGE;
|
||||
|
Reference in New Issue
Block a user