Merge gbichot@bk-internal.mysql.com:/home/bk/mysql-maria
into gbichot4.local:/home/mysql_src/mysql-maria-monty
This commit is contained in:
commit
17b9038942
@ -60,6 +60,7 @@
|
|||||||
#define T_WAIT_FOREVER (1L << 30)
|
#define T_WAIT_FOREVER (1L << 30)
|
||||||
#define T_WRITE_LOOP ((ulong) 1L << 31)
|
#define T_WRITE_LOOP ((ulong) 1L << 31)
|
||||||
#define T_ZEROFILL ((ulonglong) 1L << 32)
|
#define T_ZEROFILL ((ulonglong) 1L << 32)
|
||||||
|
#define T_ZEROFILL_KEEP_LSN ((ulonglong) 1L << 33)
|
||||||
/** If repair should not bump create_rename_lsn */
|
/** If repair should not bump create_rename_lsn */
|
||||||
#define T_NO_CREATE_RENAME_LSN ((ulonglong) 1L << 33)
|
#define T_NO_CREATE_RENAME_LSN ((ulonglong) 1L << 33)
|
||||||
|
|
||||||
|
@ -2952,7 +2952,8 @@ static my_bool maria_zerofill_index(HA_CHECK *param, MARIA_HA *info,
|
|||||||
my_off_t pos;
|
my_off_t pos;
|
||||||
my_off_t key_file_length= share->state.state.key_file_length;
|
my_off_t key_file_length= share->state.state.key_file_length;
|
||||||
uint block_size= share->block_size;
|
uint block_size= share->block_size;
|
||||||
my_bool transactional= share->base.born_transactional;
|
my_bool zero_lsn= share->base.born_transactional &&
|
||||||
|
!(param->testflag & T_ZEROFILL_KEEP_LSN);
|
||||||
DBUG_ENTER("maria_zerofill_index");
|
DBUG_ENTER("maria_zerofill_index");
|
||||||
|
|
||||||
if (!(param->testflag & T_SILENT))
|
if (!(param->testflag & T_SILENT))
|
||||||
@ -2979,7 +2980,7 @@ static my_bool maria_zerofill_index(HA_CHECK *param, MARIA_HA *info,
|
|||||||
llstr(pos, llbuff), my_errno);
|
llstr(pos, llbuff), my_errno);
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
if (transactional)
|
if (zero_lsn)
|
||||||
bzero(buff, LSN_SIZE);
|
bzero(buff, LSN_SIZE);
|
||||||
length= _ma_get_page_used(share, buff);
|
length= _ma_get_page_used(share, buff);
|
||||||
/* Skip mailformed blocks */
|
/* Skip mailformed blocks */
|
||||||
@ -3021,6 +3022,7 @@ static my_bool maria_zerofill_data(HA_CHECK *param, MARIA_HA *info,
|
|||||||
pgcache_page_no_t page;
|
pgcache_page_no_t page;
|
||||||
uint block_size= share->block_size;
|
uint block_size= share->block_size;
|
||||||
MARIA_FILE_BITMAP *bitmap= &share->bitmap;
|
MARIA_FILE_BITMAP *bitmap= &share->bitmap;
|
||||||
|
my_bool zero_lsn= !(param->testflag & T_ZEROFILL_KEEP_LSN);
|
||||||
DBUG_ENTER("maria_zerofill_data");
|
DBUG_ENTER("maria_zerofill_data");
|
||||||
|
|
||||||
/* This works only with BLOCK_RECORD files */
|
/* This works only with BLOCK_RECORD files */
|
||||||
@ -3055,15 +3057,22 @@ static my_bool maria_zerofill_data(HA_CHECK *param, MARIA_HA *info,
|
|||||||
page_type= buff[PAGE_TYPE_OFFSET] & PAGE_TYPE_MASK;
|
page_type= buff[PAGE_TYPE_OFFSET] & PAGE_TYPE_MASK;
|
||||||
switch ((enum en_page_type) page_type) {
|
switch ((enum en_page_type) page_type) {
|
||||||
case UNALLOCATED_PAGE:
|
case UNALLOCATED_PAGE:
|
||||||
|
if (zero_lsn)
|
||||||
bzero(buff, block_size);
|
bzero(buff, block_size);
|
||||||
|
else
|
||||||
|
bzero(buff + LSN_SIZE, block_size - LSN_SIZE);
|
||||||
break;
|
break;
|
||||||
case BLOB_PAGE:
|
case BLOB_PAGE:
|
||||||
if (_ma_bitmap_get_page_bits(info, bitmap, page) == 0)
|
if (_ma_bitmap_get_page_bits(info, bitmap, page) == 0)
|
||||||
{
|
{
|
||||||
/* Unallocated page */
|
/* Unallocated page */
|
||||||
|
if (zero_lsn)
|
||||||
bzero(buff, block_size);
|
bzero(buff, block_size);
|
||||||
|
else
|
||||||
|
bzero(buff + LSN_SIZE, block_size - LSN_SIZE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
if (zero_lsn)
|
||||||
bzero(buff, LSN_SIZE);
|
bzero(buff, LSN_SIZE);
|
||||||
break;
|
break;
|
||||||
case HEAD_PAGE:
|
case HEAD_PAGE:
|
||||||
@ -3073,6 +3082,7 @@ static my_bool maria_zerofill_data(HA_CHECK *param, MARIA_HA *info,
|
|||||||
uint offset, dir_start;
|
uint offset, dir_start;
|
||||||
uchar *dir;
|
uchar *dir;
|
||||||
|
|
||||||
|
if (zero_lsn)
|
||||||
bzero(buff, LSN_SIZE);
|
bzero(buff, LSN_SIZE);
|
||||||
if (max_entry != 0)
|
if (max_entry != 0)
|
||||||
{
|
{
|
||||||
@ -3123,7 +3133,8 @@ err:
|
|||||||
|
|
||||||
int maria_zerofill(HA_CHECK *param, MARIA_HA *info, const char *name)
|
int maria_zerofill(HA_CHECK *param, MARIA_HA *info, const char *name)
|
||||||
{
|
{
|
||||||
my_bool error, reenable_logging;
|
my_bool error, reenable_logging,
|
||||||
|
zero_lsn= !(param->testflag & T_ZEROFILL_KEEP_LSN);
|
||||||
DBUG_ENTER("maria_zerofill");
|
DBUG_ENTER("maria_zerofill");
|
||||||
if ((reenable_logging= info->s->now_transactional))
|
if ((reenable_logging= info->s->now_transactional))
|
||||||
_ma_tmp_disable_logging_for_table(info, 0);
|
_ma_tmp_disable_logging_for_table(info, 0);
|
||||||
@ -3132,11 +3143,12 @@ int maria_zerofill(HA_CHECK *param, MARIA_HA *info, const char *name)
|
|||||||
_ma_set_uuid(info, 0))))
|
_ma_set_uuid(info, 0))))
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Mark that table is movable and that we have done zerofill of data and
|
Mark that we have done zerofill of data and index. If we zeroed pages'
|
||||||
index
|
LSN, table is movable.
|
||||||
*/
|
*/
|
||||||
info->s->state.changed&= ~(STATE_NOT_ZEROFILLED | STATE_NOT_MOVABLE |
|
info->s->state.changed&= ~STATE_NOT_ZEROFILLED;
|
||||||
STATE_MOVED);
|
if (zero_lsn)
|
||||||
|
info->s->state.changed&= ~(STATE_NOT_MOVABLE | STATE_MOVED);
|
||||||
/* Ensure state are flushed to disk */
|
/* Ensure state are flushed to disk */
|
||||||
info->update= (HA_STATE_CHANGED | HA_STATE_ROW_CHANGED);
|
info->update= (HA_STATE_CHANGED | HA_STATE_ROW_CHANGED);
|
||||||
}
|
}
|
||||||
|
@ -183,7 +183,7 @@ enum options_mc {
|
|||||||
OPT_SORT_KEY_BLOCKS, OPT_DECODE_BITS, OPT_FT_MIN_WORD_LEN,
|
OPT_SORT_KEY_BLOCKS, OPT_DECODE_BITS, OPT_FT_MIN_WORD_LEN,
|
||||||
OPT_FT_MAX_WORD_LEN, OPT_FT_STOPWORD_FILE,
|
OPT_FT_MAX_WORD_LEN, OPT_FT_STOPWORD_FILE,
|
||||||
OPT_MAX_RECORD_LENGTH, OPT_AUTO_CLOSE, OPT_STATS_METHOD, OPT_TRANSACTION_LOG,
|
OPT_MAX_RECORD_LENGTH, OPT_AUTO_CLOSE, OPT_STATS_METHOD, OPT_TRANSACTION_LOG,
|
||||||
OPT_SKIP_SAFEMALLOC
|
OPT_SKIP_SAFEMALLOC, OPT_ZEROFILL_KEEP_LSN
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct my_option my_long_options[] =
|
static struct my_option my_long_options[] =
|
||||||
@ -375,6 +375,12 @@ static struct my_option my_long_options[] =
|
|||||||
{ "zerofill", 'z',
|
{ "zerofill", 'z',
|
||||||
"Fill empty space in data and index files with zeroes",
|
"Fill empty space in data and index files with zeroes",
|
||||||
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
#ifdef IDENTICAL_PAGES_AFTER_RECOVERY
|
||||||
|
{ "zerofill-keep-lsn", OPT_ZEROFILL_KEEP_LSN,
|
||||||
|
"Like --zerofill but does not zero out LSN of data/index pages;"
|
||||||
|
" used only for testing and debugging",
|
||||||
|
#endif
|
||||||
|
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{ 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
|
{ 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -505,7 +511,13 @@ static void usage(void)
|
|||||||
(It may be VERY slow to do a sort the first time!).\n\
|
(It may be VERY slow to do a sort the first time!).\n\
|
||||||
-b, --block-search=#\n\
|
-b, --block-search=#\n\
|
||||||
Find a record, a block at given offset belongs to.\n\
|
Find a record, a block at given offset belongs to.\n\
|
||||||
-z, --zerofill Fill empty space in data and index files with zeroes.");
|
-z, --zerofill Fill empty space in data and index files with zeroes"
|
||||||
|
#ifdef IDENTICAL_PAGES_AFTER_RECOVERY
|
||||||
|
"\n\
|
||||||
|
--zerofill-keep-lsn Like --zerofill but does not zero out LSN of\n\
|
||||||
|
data/index pages; used only for testing and debugging"
|
||||||
|
#endif
|
||||||
|
".");
|
||||||
|
|
||||||
print_defaults("my", load_default_groups);
|
print_defaults("my", load_default_groups);
|
||||||
my_print_variables(my_long_options);
|
my_print_variables(my_long_options);
|
||||||
@ -778,6 +790,14 @@ get_one_option(int optid,
|
|||||||
else
|
else
|
||||||
check_param.testflag|= T_ZEROFILL;
|
check_param.testflag|= T_ZEROFILL;
|
||||||
break;
|
break;
|
||||||
|
#ifdef IDENTICAL_PAGES_AFTER_RECOVERY
|
||||||
|
case OPT_ZEROFILL_KEEP_LSN:
|
||||||
|
if (argument == disabled_my_option)
|
||||||
|
check_param.testflag&= ~(T_ZEROFILL_KEEP_LSN | T_ZEROFILL);
|
||||||
|
else
|
||||||
|
check_param.testflag|= (T_ZEROFILL_KEEP_LSN | T_ZEROFILL);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
case 'H':
|
case 'H':
|
||||||
my_print_help(my_long_options);
|
my_print_help(my_long_options);
|
||||||
exit(0);
|
exit(0);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user