List:Commits« Previous MessageNext Message »
From:Dmitry Shulga Date:November 29 2010 8:51am
Subject:Re: bzr commit into mysql-5.1-bugteam branch (Dmitry.Shulga:3511) Bug#54486
View as plain text  
On 26.11.2010, at 18:01, Sergey Vojtovich wrote:

> Hi Dmitry,
> 
> a few myisam specific questions.
> 
> On Fri, Nov 19, 2010 at 05:43:31AM +0000, Dmitry Shulga wrote:
>> #At file:///Users/shulga/projects/mysql/5.1-bugteam-bug54486/ based on
> revid:vasil.dimov@stripped
>> 
>> 3511 Dmitry Shulga	2010-11-19
>>      Fixed bug#54486 - assert in my_seek, concurrent
>>      DROP/CREATE SCHEMA, CREATE TABLE, REPAIR.
>> 
>>      The cause of assert was concurrent execution of
>>      DROP DATABASE and REPAIR TABLE where first statement
>>      deleted table's file .TMD at the same time when
>>      REPAIR TABLE statement tried replace
>>      old file by temporary file that has just been removed.
>> 
>>      Additionally was fixed trouble when DROP TABLE try delete
>>      all files belong to table being dropped at the same time
>>      when REPAIR TABLE statement has just deleted .TMD file.
>>     @ sql/sql_db.cc
>>        mysql_rm_known_files() modified: ignore possible errors
>>        when trying delete all table's files. Such aggressigve 
>>        algorithm permits skip already deleted (in another thread)
>>        files.
>>     @ storage/myisam/mi_check.c
>>        mi_repair() was modified: set param->retry_repair= 0
>>        in order to don't call following failover procedure
>>        in ha_myisam::repair() in case of error in access to
>>        .TMD file.
>> 
>>    modified:
>>      sql/sql_db.cc
>>      storage/myisam/mi_check.c
>> === modified file 'sql/sql_db.cc'
>> --- a/sql/sql_db.cc	2010-10-19 10:27:09 +0000
>> +++ b/sql/sql_db.cc	2010-11-19 05:43:28 +0000
>> @@ -985,6 +985,9 @@ bool mysql_rm_db(THD *thd,char *db,bool 
>>     }
>>     thd->pop_internal_handler();
>>   }
>> +  DBUG_ASSERT(deleted >= 0 ||
>> +              (deleted < 0 && thd->main_da.is_set()));
>> +
>>   if (!silent && deleted>=0)
>>   {
>>     const char *query;
>> @@ -1213,10 +1216,7 @@ static long mysql_rm_known_files(THD *th
>>     else
>>     {
>>       strxmov(filePath, org_path, "/", file->name, NullS);
>> -      if (my_delete_with_symlink(filePath,MYF(MY_WME)))
>> -      {
>> -	goto err;
>> -      }
>> +      my_delete_with_symlink(filePath, MYF(MY_WME));
>>     }
>>   }
>>   if (thd->killed ||
>> 
>> === modified file 'storage/myisam/mi_check.c'
>> --- a/storage/myisam/mi_check.c	2010-03-25 12:08:21 +0000
>> +++ b/storage/myisam/mi_check.c	2010-11-19 05:43:28 +0000
>> @@ -51,6 +51,7 @@
>> #include <sys/mman.h>
>> #endif
>> #include "rt_index.h"
>> +#include "mysqld_error.h"
>> 
>> #ifndef USE_RAID
>> #define my_raid_create(A,B,C,D,E,F,G) my_create(A,B,C,G)
>> @@ -1739,8 +1740,11 @@ err:
>> 			    DATA_TMP_EXT, share->base.raid_chunks,
>> 			    (param->testflag & T_BACKUP_DATA ?
>> 			     MYF(MY_REDEL_MAKE_BACKUP): MYF(0))) ||
>> -	  mi_open_datafile(info,share,name,-1))
>> +          mi_open_datafile(info,share,name,-1)) {
> Why open brace on the same line?
Fixed.
> 
>> 	got_error=1;
>> +	param->retry_repair= 0;
> Afair we agreed retry_repair must be 0 independently of reopen status.
> Because there are no more methods to failover.

> 
>> +	my_error(ER_CANT_DELETE_FILE, MYF(0), share->data_file_name, errno);
> Why my_error(ER_CANT_DELETE_FILE)?
I can't find more suitable constant for this case. I'll change it if you suggest me
another constant.

> Why tabs?
It's just my text editor's strangeness. Fixed.

> 
>> +      }
>>     }
>>   }
>>   if (got_error)
>> @@ -1774,6 +1778,7 @@ err:
>>   }
>>   share->state.changed|= (STATE_NOT_OPTIMIZED_KEYS | STATE_NOT_SORTED_PAGES |
>> 			  STATE_NOT_ANALYZED);
>> +  DBUG_ASSERT(info->dfile >= 0 || (info->dfile < 0 &&
> !param->retry_repair));
> Why not DBUG_ASSERT(!param->retry_repair || info->dfile >= 0) ?
Fixed.
> 
>>   DBUG_RETURN(got_error);
>> }
>> 
>> @@ -2587,6 +2592,7 @@ err:
>>     share->state.header.options[0]&= (uchar) ~HA_OPTION_COMPRESS_RECORD;
>>     share->pack.header_length=0;
>>   }
>> +  DBUG_ASSERT(info->dfile >= 0 || (info->dfile < 0 &&
> !param->retry_repair));
>>   DBUG_RETURN(got_error);
>> }
>> 
>> @@ -3126,6 +3132,7 @@ err:
>>     share->state.header.options[0]&= (uchar) ~HA_OPTION_COMPRESS_RECORD;
>>     share->pack.header_length=0;
>>   }
>> +  DBUG_ASSERT(info->dfile >= 0 || (info->dfile < 0 &&
> !param->retry_repair));
>>   DBUG_RETURN(got_error);
>> #endif /* THREAD */
>> }
>> @@ -3268,8 +3275,8 @@ static int sort_get_next_record(MI_SORT_
>>       {
>> 	if (sort_param->read_cache.error)
>> 	  param->out_flag |= O_DATA_LOST;
>> -        param->retry_repair=1;
>> -        param->testflag|=T_RETRY_WITHOUT_QUICK;
>> +          param->retry_repair=1;
>> +          param->testflag|=T_RETRY_WITHOUT_QUICK;
> Ehm?
Just another editors's strangeness. :(
Fixed.

>> 	DBUG_RETURN(-1);
>>       }
>>       sort_param->start_recpos=sort_param->pos;
>> 
> 
> Regards,
> Sergey
> -- 
> Sergey Vojtovich <svoj@stripped>
> MySQL AB, Software Engineer
> Izhevsk, Russia, www.mysql.com

Thread
bzr commit into mysql-5.1-bugteam branch (Dmitry.Shulga:3511) Bug#54486Dmitry Shulga19 Nov
  • Re: bzr commit into mysql-5.1-bugteam branch (Dmitry.Shulga:3511)Bug#54486Jon Olav Hauglid25 Nov
  • Re: bzr commit into mysql-5.1-bugteam branch (Dmitry.Shulga:3511)Bug#54486Sergey Vojtovich26 Nov
    • Re: bzr commit into mysql-5.1-bugteam branch (Dmitry.Shulga:3511) Bug#54486Dmitry Shulga29 Nov