Commit 934c57c7 authored by Michael Widenius's avatar Michael Widenius

merge with 5.1

parents b2abd1cb c0fc6d42
...@@ -28,7 +28,7 @@ $opt_port=0; ...@@ -28,7 +28,7 @@ $opt_port=0;
$exit_status=0; $exit_status=0;
GetOptions( GetOptions(
"e|engine|type=s" => \$opt_type, "e|engine|type=s" => \$opt_engine,
"f|force" => \$opt_force, "f|force" => \$opt_force,
"help|?" => \$opt_help, "help|?" => \$opt_help,
"h|host=s" => \$opt_host, "h|host=s" => \$opt_host,
......
...@@ -2058,6 +2058,7 @@ bool ha_maria::check_and_repair(THD *thd) ...@@ -2058,6 +2058,7 @@ bool ha_maria::check_and_repair(THD *thd)
DBUG_ENTER("ha_maria::check_and_repair"); DBUG_ENTER("ha_maria::check_and_repair");
check_opt.init(); check_opt.init();
check_opt.flags= T_MEDIUM | T_AUTO_REPAIR;
error= 1; error= 1;
if ((file->s->state.changed & if ((file->s->state.changed &
...@@ -2078,7 +2079,6 @@ bool ha_maria::check_and_repair(THD *thd) ...@@ -2078,7 +2079,6 @@ bool ha_maria::check_and_repair(THD *thd)
DBUG_RETURN(error); DBUG_RETURN(error);
error= 0; error= 0;
check_opt.flags= T_MEDIUM | T_AUTO_REPAIR;
// Don't use quick if deleted rows // Don't use quick if deleted rows
if (!file->state->del && (maria_recover_options & HA_RECOVER_QUICK)) if (!file->state->del && (maria_recover_options & HA_RECOVER_QUICK))
check_opt.flags |= T_QUICK; check_opt.flags |= T_QUICK;
......
...@@ -2630,6 +2630,7 @@ int maria_repair(HA_CHECK *param, register MARIA_HA *info, ...@@ -2630,6 +2630,7 @@ int maria_repair(HA_CHECK *param, register MARIA_HA *info,
maria_lock_memory(param); /* Everything is alloced */ maria_lock_memory(param); /* Everything is alloced */
sort_param.sort_info->info->in_check_table= 1;
/* Re-create all keys, which are set in key_map. */ /* Re-create all keys, which are set in key_map. */
while (!(error=sort_get_next_record(&sort_param))) while (!(error=sort_get_next_record(&sort_param)))
{ {
...@@ -2797,6 +2798,7 @@ int maria_repair(HA_CHECK *param, register MARIA_HA *info, ...@@ -2797,6 +2798,7 @@ int maria_repair(HA_CHECK *param, register MARIA_HA *info,
VOID(end_io_cache(&sort_info.new_info->rec_cache)); VOID(end_io_cache(&sort_info.new_info->rec_cache));
info->opt_flag&= ~(READ_CACHE_USED | WRITE_CACHE_USED); info->opt_flag&= ~(READ_CACHE_USED | WRITE_CACHE_USED);
sort_info.new_info->opt_flag&= ~(READ_CACHE_USED | WRITE_CACHE_USED); sort_info.new_info->opt_flag&= ~(READ_CACHE_USED | WRITE_CACHE_USED);
sort_param.sort_info->info->in_check_table= 0;
/* this below could fail, shouldn't we detect error? */ /* this below could fail, shouldn't we detect error? */
if (got_error) if (got_error)
{ {
...@@ -3247,6 +3249,7 @@ static my_bool maria_zerofill_index(HA_CHECK *param, MARIA_HA *info, ...@@ -3247,6 +3249,7 @@ static my_bool maria_zerofill_index(HA_CHECK *param, MARIA_HA *info,
uint block_size= share->block_size; uint block_size= share->block_size;
my_bool zero_lsn= (share->base.born_transactional && my_bool zero_lsn= (share->base.born_transactional &&
!(param->testflag & T_ZEROFILL_KEEP_LSN)); !(param->testflag & T_ZEROFILL_KEEP_LSN));
int error= 1;
DBUG_ENTER("maria_zerofill_index"); DBUG_ENTER("maria_zerofill_index");
if (!(param->testflag & T_SILENT)) if (!(param->testflag & T_SILENT))
...@@ -3271,7 +3274,7 @@ static my_bool maria_zerofill_index(HA_CHECK *param, MARIA_HA *info, ...@@ -3271,7 +3274,7 @@ static my_bool maria_zerofill_index(HA_CHECK *param, MARIA_HA *info,
_ma_check_print_error(param, _ma_check_print_error(param,
"Page %9s: Got error %d when reading index file", "Page %9s: Got error %d when reading index file",
llstr(pos, llbuff), my_errno); llstr(pos, llbuff), my_errno);
DBUG_RETURN(1); goto end;
} }
if (zero_lsn) if (zero_lsn)
bzero(buff, LSN_SIZE); bzero(buff, LSN_SIZE);
...@@ -3279,7 +3282,7 @@ static my_bool maria_zerofill_index(HA_CHECK *param, MARIA_HA *info, ...@@ -3279,7 +3282,7 @@ static my_bool maria_zerofill_index(HA_CHECK *param, MARIA_HA *info,
if (share->base.born_transactional) if (share->base.born_transactional)
{ {
uint keynr= _ma_get_keynr(share, buff); uint keynr= _ma_get_keynr(share, buff);
if (keynr != MARIA_DELETE_KEY_NR) if (keynr < share->base.keys)
{ {
MARIA_PAGE page; MARIA_PAGE page;
DBUG_ASSERT(keynr < share->base.keys); DBUG_ASSERT(keynr < share->base.keys);
...@@ -3291,7 +3294,7 @@ static my_bool maria_zerofill_index(HA_CHECK *param, MARIA_HA *info, ...@@ -3291,7 +3294,7 @@ static my_bool maria_zerofill_index(HA_CHECK *param, MARIA_HA *info,
"Page %9s: Got error %d when reading index " "Page %9s: Got error %d when reading index "
"file", "file",
llstr(pos, llbuff), my_errno); llstr(pos, llbuff), my_errno);
DBUG_RETURN(1); goto end;
} }
} }
} }
...@@ -3305,10 +3308,13 @@ static my_bool maria_zerofill_index(HA_CHECK *param, MARIA_HA *info, ...@@ -3305,10 +3308,13 @@ static my_bool maria_zerofill_index(HA_CHECK *param, MARIA_HA *info,
PAGECACHE_UNPIN, LSN_IMPOSSIBLE, PAGECACHE_UNPIN, LSN_IMPOSSIBLE,
LSN_IMPOSSIBLE, 1, FALSE); LSN_IMPOSSIBLE, 1, FALSE);
} }
error= 0; /* ok */
end:
if (flush_pagecache_blocks(share->pagecache, &share->kfile, if (flush_pagecache_blocks(share->pagecache, &share->kfile,
FLUSH_FORCE_WRITE)) FLUSH_FORCE_WRITE))
DBUG_RETURN(1); DBUG_RETURN(1);
DBUG_RETURN(0); DBUG_RETURN(error);
} }
...@@ -4768,7 +4774,7 @@ static int sort_get_next_record(MARIA_SORT_PARAM *sort_param) ...@@ -4768,7 +4774,7 @@ static int sort_get_next_record(MARIA_SORT_PARAM *sort_param)
DBUG_RETURN(-1); DBUG_RETURN(-1);
} }
/* Retry only if wrong record, not if disk error */ /* Retry only if wrong record, not if disk error */
if (flag != HA_ERR_WRONG_IN_RECORD) if (flag != HA_ERR_WRONG_IN_RECORD && flag != HA_ERR_WRONG_CRC)
{ {
retry_if_quick(sort_param, flag); retry_if_quick(sort_param, flag);
DBUG_RETURN(flag); DBUG_RETURN(flag);
...@@ -6458,6 +6464,9 @@ static void change_data_file_descriptor(MARIA_HA *info, File new_file) ...@@ -6458,6 +6464,9 @@ static void change_data_file_descriptor(MARIA_HA *info, File new_file)
static void unuse_data_file_descriptor(MARIA_HA *info) static void unuse_data_file_descriptor(MARIA_HA *info)
{ {
(void) flush_pagecache_blocks(info->s->pagecache,
&info->s->bitmap.file,
FLUSH_IGNORE_CHANGED);
info->dfile.file= info->s->bitmap.file.file= -1; info->dfile.file= info->s->bitmap.file.file= -1;
_ma_bitmap_reset_cache(info->s); _ma_bitmap_reset_cache(info->s);
} }
......
...@@ -275,12 +275,13 @@ static ha_rows find_all_keys(MARIA_SORT_PARAM *info, uint keys, ...@@ -275,12 +275,13 @@ static ha_rows find_all_keys(MARIA_SORT_PARAM *info, uint keys,
idx=error=0; idx=error=0;
sort_keys[0]= (uchar*) (sort_keys+keys); sort_keys[0]= (uchar*) (sort_keys+keys);
info->sort_info->info->in_check_table= 1;
while (!(error=(*info->key_read)(info,sort_keys[idx]))) while (!(error=(*info->key_read)(info,sort_keys[idx])))
{ {
if (info->real_key_length > info->key_length) if (info->real_key_length > info->key_length)
{ {
if (write_key(info,sort_keys[idx],tempfile_for_exceptions)) if (write_key(info,sort_keys[idx],tempfile_for_exceptions))
DBUG_RETURN(HA_POS_ERROR); /* purecov: inspected */ goto err; /* purecov: inspected */
continue; continue;
} }
...@@ -289,7 +290,7 @@ static ha_rows find_all_keys(MARIA_SORT_PARAM *info, uint keys, ...@@ -289,7 +290,7 @@ static ha_rows find_all_keys(MARIA_SORT_PARAM *info, uint keys,
if (info->write_keys(info,sort_keys,idx-1, if (info->write_keys(info,sort_keys,idx-1,
(BUFFPEK *)alloc_dynamic(buffpek), (BUFFPEK *)alloc_dynamic(buffpek),
tempfile)) tempfile))
DBUG_RETURN(HA_POS_ERROR); /* purecov: inspected */ goto err; /* purecov: inspected */
sort_keys[0]=(uchar*) (sort_keys+keys); sort_keys[0]=(uchar*) (sort_keys+keys);
memcpy(sort_keys[0],sort_keys[idx-1],(size_t) info->key_length); memcpy(sort_keys[0],sort_keys[idx-1],(size_t) info->key_length);
...@@ -298,18 +299,23 @@ static ha_rows find_all_keys(MARIA_SORT_PARAM *info, uint keys, ...@@ -298,18 +299,23 @@ static ha_rows find_all_keys(MARIA_SORT_PARAM *info, uint keys,
sort_keys[idx]=sort_keys[idx-1]+info->key_length; sort_keys[idx]=sort_keys[idx-1]+info->key_length;
} }
if (error > 0) if (error > 0)
DBUG_RETURN(HA_POS_ERROR); /* Aborted by get_key */ /* purecov: inspected */ goto err; /* purecov: inspected */
if (buffpek->elements) if (buffpek->elements)
{ {
if (info->write_keys(info,sort_keys,idx,(BUFFPEK *)alloc_dynamic(buffpek), if (info->write_keys(info,sort_keys,idx,(BUFFPEK *)alloc_dynamic(buffpek),
tempfile)) tempfile))
DBUG_RETURN(HA_POS_ERROR); /* purecov: inspected */ goto err; /* purecov: inspected */
*maxbuffer=buffpek->elements-1; *maxbuffer=buffpek->elements-1;
} }
else else
*maxbuffer=0; *maxbuffer=0;
info->sort_info->info->in_check_table= 0;
DBUG_RETURN((*maxbuffer)*(keys-1)+idx); DBUG_RETURN((*maxbuffer)*(keys-1)+idx);
err:
info->sort_info->info->in_check_table= 0; /* purecov: inspected */
DBUG_RETURN(HA_POS_ERROR); /* purecov: inspected */
} /* find_all_keys */ } /* find_all_keys */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment