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:
|
Warnings:
|
||||||
Error 1194 t1' is marked as crashed and should be repaired
|
Error 1194 t1' is marked as crashed and should be repaired
|
||||||
flush table t1;
|
flush table t1;
|
||||||
Status: changed,sorted index pages,zerofilled,movable
|
Status: changed,sorted index pages,zerofilled
|
||||||
create_rename_lsn has magic value
|
|
||||||
insert into t1 values(2);
|
insert into t1 values(2);
|
||||||
flush table t1;
|
flush table t1;
|
||||||
create_rename_lsn has non-magic value
|
create_rename_lsn has non-magic value
|
||||||
|
@@ -1425,8 +1425,12 @@ int ha_maria::zerofill(THD * thd, HA_CHECK_OPT *check_opt)
|
|||||||
|
|
||||||
if (!error)
|
if (!error)
|
||||||
{
|
{
|
||||||
|
TrID create_trid= trnman_get_min_safe_trid();
|
||||||
pthread_mutex_lock(&share->intern_lock);
|
pthread_mutex_lock(&share->intern_lock);
|
||||||
|
share->state.changed|= STATE_NOT_MOVABLE;
|
||||||
maria_update_state_info(¶m, file, UPDATE_TIME | UPDATE_OPEN_COUNT);
|
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);
|
pthread_mutex_unlock(&share->intern_lock);
|
||||||
}
|
}
|
||||||
return error;
|
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)
|
if (page.size <= page.node + share->keypage_header + 1)
|
||||||
{
|
{
|
||||||
|
DBUG_ASSERT(page.size == page.node + share->keypage_header);
|
||||||
if (page.node)
|
if (page.node)
|
||||||
*root= _ma_kpos(page.node, root_buff +share->keypage_header +
|
*root= _ma_kpos(page.node, root_buff +share->keypage_header +
|
||||||
page.node);
|
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
|
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
|
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.
|
are written.
|
||||||
*/
|
*/
|
||||||
if (! test_all_bits(share->state.changed,
|
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);
|
HA_ERR_CRASHED_ON_REPAIR : HA_ERR_CRASHED_ON_USAGE);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* create_rename_lsn != LSN_NEEDS_NEW_STATE_LSNS */
|
||||||
|
share->state.changed|= STATE_NOT_MOVABLE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
share->page_type= PAGECACHE_PLAIN_PAGE;
|
share->page_type= PAGECACHE_PLAIN_PAGE;
|
||||||
|
Reference in New Issue
Block a user