List:Commits« Previous MessageNext Message »
From:alfranio correia Date:November 11 2008 10:53am
Subject:Re: bzr commit into mysql-5.0-bugteam branch (alfranio.correia:2704)
Bug#31665 Bug#35542 Bug#40337
View as plain text  
He Zhenxing wrote:
> alfranio correia wrote:
>   
>> Hi,
>>
>>
>> In-line comments.
>>
>> He Zhenxing wrote:
>>     
>>> alfranio correia wrote: 
>>>   
>>>       
>>>> Alfranio Correia wrote:
>>>>     
>>>>         
>>>>> #At
> file:///home/acorreia/workspace.sun/playground.mysql/mysql-5.0.68-custom_build/
>>>>>
>>>>>  2704 Alfranio Correia	2008-11-07
>>>>>       Added option to sync master.info (--sync-master-info, integer)
> 
>>>>>       and relay log (--sync-relay-log, integer) to disk after 
>>>>>       every event and the relay info (--sync-relay-log-info, boolean)
> per transaction. 
>>>>>       This supersedes the patch proposed 
>>>>>       by Sinisa and modified by He Zhenxing to fix bugs: BUG#35542
> and BUG#31665. This is an update to BUG#40337.
>>>>> modified:
>>>>>   sql/log.cc
>>>>>   sql/mysql_priv.h
>>>>>   sql/mysqld.cc
>>>>>   sql/set_var.cc
>>>>>   sql/set_var.h
>>>>>   sql/slave.cc
>>>>>   sql/sql_class.h
>>>>>
>>>>> === modified file 'sql/log.cc'
>>>>> --- a/sql/log.cc	2008-07-24 12:28:21 +0000
>>>>> +++ b/sql/log.cc	2008-11-07 19:21:48 +0000
>>>>> @@ -32,8 +32,7 @@
>>>>>  #include "message.h"
>>>>>  #endif
>>>>>  
>>>>> -MYSQL_LOG mysql_log, mysql_slow_log, mysql_bin_log;
>>>>> -ulong sync_binlog_counter= 0;
>>>>> +MYSQL_LOG mysql_log, mysql_slow_log,
> mysql_bin_log(&sync_binlog_period);
>>>>>  
>>>>>  static Muted_query_log_event invisible_commit;
>>>>>  
>>>>> @@ -402,10 +401,11 @@ static int find_uniq_filename(char *name
>>>>>  }
>>>>>  
>>>>>  
>>>>> -MYSQL_LOG::MYSQL_LOG()
>>>>> +MYSQL_LOG::MYSQL_LOG(uint *sync_period)
>>>>>    :bytes_written(0), last_time(0), query_start(0), name(0),
>>>>>     prepared_xids(0), log_type(LOG_CLOSED), file_id(1),
> open_count(1),
>>>>>     write_error(FALSE), inited(FALSE), need_start_event(TRUE),
>>>>> +   sync_period_ptr(sync_period),
>>>>>     description_event_for_exec(0), description_event_for_queue(0)
>>>>>  {
>>>>>    /*
>>>>> @@ -1622,6 +1622,8 @@ bool MYSQL_LOG::append(Log_event* ev)
>>>>>    }
>>>>>    bytes_written+= ev->data_written;
>>>>>    DBUG_PRINT("info",("max_size: %lu",max_size));
>>>>> +  if (flush_and_sync())
>>>>> +    goto err;
>>>>>    if ((uint) my_b_append_tell(&log_file) > max_size)
>>>>>      new_file(0);
>>>>>  
>>>>> @@ -1652,6 +1654,8 @@ bool MYSQL_LOG::appendv(const char* buf,
>>>>>      bytes_written += len;
>>>>>    } while ((buf=va_arg(args,const char*)) &&
> (len=va_arg(args,uint)));
>>>>>    DBUG_PRINT("info",("max_size: %lu",max_size));
>>>>> +  if (flush_and_sync())
>>>>> +    goto err;
>>>>>    if ((uint) my_b_append_tell(&log_file) > max_size)
>>>>>      new_file(0);
>>>>>  
>>>>> @@ -1758,9 +1762,10 @@ bool MYSQL_LOG::flush_and_sync()
>>>>>    safe_mutex_assert_owner(&LOCK_log);
>>>>>    if (flush_io_cache(&log_file))
>>>>>      return 1;
>>>>> -  if (++sync_binlog_counter >= sync_binlog_period &&
> sync_binlog_period)
>>>>> +  uint sync_period= get_sync_period();
>>>>> +  if (sync_period && ++sync_counter >= sync_period)
>>>>>    {
>>>>> -    sync_binlog_counter= 0;
>>>>> +    sync_counter= 0;
>>>>>      err=my_sync(fd, MYF(MY_WME));
>>>>>    }
>>>>>    return err;
>>>>>
>>>>> === modified file 'sql/mysql_priv.h'
>>>>> --- a/sql/mysql_priv.h	2008-10-02 11:57:52 +0000
>>>>> +++ b/sql/mysql_priv.h	2008-11-07 19:21:48 +0000
>>>>> @@ -1310,7 +1310,8 @@ extern ulong max_binlog_size, max_relay_
>>>>>  extern ulong rpl_recovery_rank, thread_cache_size;
>>>>>  extern ulong back_log;
>>>>>  extern ulong specialflag, current_pid;
>>>>> -extern ulong expire_logs_days, sync_binlog_period,
> sync_binlog_counter;
>>>>> +extern ulong expire_logs_days;
>>>>> +extern uint sync_binlog_period, sync_relaylog_period,
> sync_relayloginfo_period, sync_masterinfo_period;
>>>>>   
>>>>>       
>>>>>           
>>>> Jasonh, any reason to change from ulong to uint?
>>>>
>>>>     
>>>>         
>>> read and write int are supposed to be atomic on all platforms supported
>>> by MySQL, so we don't need to add LOCKs to protect the access of these
>>> variables. And we cannot expect the same for long.
>>>
>>>   
>>>       
>> Do we really need this?
>> I think we can survive without the atomicity in this case.
>>
>>     
>
> these variables can be changed by user at runtime by using SET command,
> so it is possible that two threads are reading and writing the value of
> the variable at the same time.
>
> [snip]
>   
My point is that we don't need any mutex, atomic variables, etc, etc.
You are not updating a structure that will be corrupted due to a race
condition.
Anyway, I will keep the integer value.
Thread
bzr commit into mysql-5.0-bugteam branch (alfranio.correia:2704) Bug#31665Bug#35542 Bug#40337Alfranio Correia7 Nov
  • Re: bzr commit into mysql-5.0-bugteam branch (alfranio.correia:2704)Bug#31665 Bug#35542 Bug#40337alfranio correia9 Nov
    • Re: bzr commit into mysql-5.0-bugteam branch (alfranio.correia:2704)Bug#31665 Bug#35542 Bug#40337He Zhenxing10 Nov
      • Re: bzr commit into mysql-5.0-bugteam branch (alfranio.correia:2704)Bug#31665 Bug#35542 Bug#40337alfranio correia10 Nov
        • Re: bzr commit into mysql-5.0-bugteam branch (alfranio.correia:2704)Bug#31665 Bug#35542 Bug#40337He Zhenxing11 Nov
          • Re: bzr commit into mysql-5.0-bugteam branch (alfranio.correia:2704)Bug#31665 Bug#35542 Bug#40337alfranio correia11 Nov
            • Re: bzr commit into mysql-5.0-bugteam branch (alfranio.correia:2704)Bug#31665 Bug#35542 Bug#40337alfranio correia11 Nov
              • Re: bzr commit into mysql-5.0-bugteam branch (alfranio.correia:2704)Bug#31665 Bug#35542 Bug#40337He Zhenxing12 Nov
            • Re: bzr commit into mysql-5.0-bugteam branch (alfranio.correia:2704)Bug#31665 Bug#35542 Bug#40337He Zhenxing12 Nov