1. 14 Mar, 2008 1 commit
    • hezx@mail.hezx.com's avatar
      BUG#33029 5.0 to 5.1 replication fails on dup key when inserting · 97ae23f4
      hezx@mail.hezx.com authored
      using a trig in SP
      
      For all 5.0 and up to 5.1.12 exclusive, when a stored routine or
      trigger caused an INSERT into an AUTO_INCREMENT column, the
      generated AUTO_INCREMENT value should not be written into the
      binary log, which means if a statement does not generate
      AUTO_INCREMENT value itself, there will be no Intvar event (SET
      INSERT_ID) associated with it even if one of the stored routine
      or trigger caused generation of such a value. And meanwhile, when
      executing a stored routine or trigger, it would ignore the
      INSERT_ID value even if there is a INSERT_ID value available set
      by a SET INSERT_ID statement.
      
      Starting from MySQL 5.1.12, the generated AUTO_INCREMENT value is
      written into the binary log, and the value will be used if
      available when executing the stored routine or trigger.
      
      Prior fix of this bug in MySQL 5.0 and prior MySQL 5.1.12
      (referenced as the buggy versions in the text below), when a
      statement that generates AUTO_INCREMENT value by the top
      statement was executed in the body of a SP, all statements in the
      SP after this statement would be treated as if they had generated
      AUTO_INCREMENT by the top statement.  When a statement that did
      not generate AUTO_INCREMENT value by the top statement but by a
      function/trigger called by it, an erroneous Intvar event would be
      associated with the statement, this erroneous INSERT_ID value
      wouldn't cause problem when replicating between masters and
      slaves of 5.0.x or prior 5.1.12, because the erroneous INSERT_ID
      value was not used when executing functions/triggers. But when
      replicating from buggy versions to 5.1.12 or newer, which will
      use the INSERT_ID value in functions/triggers, the erroneous
      value will be used, which would cause duplicate entry error and
      cause the slave to stop.
      
      The patch for 5.0 fixed it not to generate the erroneous Intvar
      event, another patch for 5.1 fixed it to ignore the SET INSERT_ID
      value when executing functions/triggers if it is replicating from
      a master of buggy versions.
      97ae23f4
  2. 15 Feb, 2008 1 commit
  3. 14 Feb, 2008 3 commits
  4. 13 Feb, 2008 1 commit
    • aelkin/andrei@mysql1000.dsl.inet.fi's avatar
      Bug #33931 assertion at write_ignored_events_info_to_relay_log if init_slave_thread() fails · 22072c5c
      aelkin/andrei@mysql1000.dsl.inet.fi authored
      and
      bug#33932  assertion at handle_slave_sql if init_slave_thread() fails
      
      the asserts were caused by 
        bug33931: having thd deleted at time of executing err: code plus
                  a missed initialization;
        bug33932: initialization of slave_is_running member was missed;
      
      fixed with relocating mi members initialization and removing delete thd
      It is safe to do as deletion happens later explicitly in the caller of
      init_slave_thread().
      
      Todo: at merging the test is better to be moved into suite/bugs for 5.x (when x>0).
      22072c5c
  5. 12 Feb, 2008 2 commits
  6. 11 Feb, 2008 3 commits
  7. 08 Feb, 2008 3 commits
    • aelkin/andrei@mysql1000.dsl.inet.fi's avatar
      bug#34427 slave misses rendezvous in rpl_variables · f01531b7
      aelkin/andrei@mysql1000.dsl.inet.fi authored
      There was no instruction in the test that enforces the slave successfully connect
      to the master.
      The way the test was been written allowed the slave to had been late for rendezvous 
      so that about-connecting time queries to the master failed and are error-logged
      to had been seen in Warnings of pb.
      
      Fixed with adding a sychronization primitive to the test.
      No test case is possible, observe error logs on pb.
      
      Todo: revise need of rpl_report.pl's rules due to failing execution of
      queries from get_master_verion_and_clock().
      Any test should try to use a synchornization primitive like the current fix
      makes and do not let the slave to miss successful connecting.
      f01531b7
    • kostja@dipika.(none)'s avatar
      Merge bk-internal.mysql.com:/home/bk/mysql-5.0 · 0e4b6ea0
      kostja@dipika.(none) authored
      into  dipika.(none):/opt/local/work/mysql-5.0-runtime
      0e4b6ea0
    • davi@mysql.com/endora.local's avatar
      Bug#33798 prepared statements improperly handle large unsigned ints · 24b9abf3
      davi@mysql.com/endora.local authored
      The unsignedness of large integer user variables was not being
      properly preserved when feeded to prepared statements. This was
      happening because the unsigned flags wasn't being updated when
      converting the user variable is converted to a parameter.
      
      The solution is to copy the unsigned flag when converting the
      user variable to a parameter and take the unsigned flag into
      account when converting the integer to a string.
      24b9abf3
  8. 07 Feb, 2008 2 commits
  9. 06 Feb, 2008 2 commits
  10. 05 Feb, 2008 1 commit
    • aelkin/elkin@koti.dsl.inet.fi's avatar
      Bug #34305 show slave status handling segfaults when slave io is about · 51b33ea3
      aelkin/elkin@koti.dsl.inet.fi authored
          to leave
      
      The artifact was caused by
      a flaw in concurrent accessing the slave's io thd by
      the io itself and a handling show slave status thread.
      Namely, show_master_info did not acquire mi->run_lock mutex that is
      specified for mi->io_thd member.
      
      Fixed with deploying the mutex locking and unlocking. The mutex is kept
      short time and without interleaving with mi->data_lock mutex.
      
      Todo: to report and fix an issue with 
          sys_var_slave_skip_counter::{methods} 
      seem to acquire incorrectly
           active_mi->rli.run_lock
      instead of the specified
           active_mi->rli.data_lock
      
      A test case is difficult to compose, so rpl_packet should continue serving
      as the indicator.
      51b33ea3
  11. 04 Feb, 2008 4 commits
  12. 01 Feb, 2008 6 commits
  13. 31 Jan, 2008 3 commits
  14. 30 Jan, 2008 4 commits
  15. 29 Jan, 2008 2 commits
    • hezx@mail.hezx.com's avatar
      update test result · 7572a9e3
      hezx@mail.hezx.com authored
      7572a9e3
    • hezx@mail.hezx.com's avatar
      BUG#26489 Corruption in relay logs · e4f37eab
      hezx@mail.hezx.com authored
      Here is the scenario that causes the failure.(by Mats)
      
      1. The to-be corrupt log event (let's call it X), is split into two
         packets B and C on the network level (net_write_buff()). The parts
         are X = (x',x''). The part x' ends up in packet B and part x''
         ends up in packet C. Prior to the corrupt event X, the event Y has
         been written successfully, but has been split into two packets as
         well, which we call (y',y'').
      2. The master sends packet A = (y'',x') to the slave, increases the
         packet sequence number, the slave receives the packet, but fails
         to reply before the master gets a timeout.
      3. Since the master got a timeout, it reports failure, and aborts
         sending the binary log by exiting mysql_binlog_send(). However, it
         leaves the buffer intact, still holding y'' (but not x', since the
         write_pos is not increased).
      4. After exiting mysql_binlog_send(), the master does a
         disconnection of the client thread, which involves sending an
         error message e to the client (i.e., the slave).
      5. In this case, net_write_buff() is used again, but this time the
         old contents of the packet is used so that the new packet is
         D = (y'',e). Note that this will use a new packet sequence number,
         since the packet number was increased in step 2.
      6. The slave receives the tail y'' of the Y log event, concatenates
         this with x' (which it already received), and writes the event
         (x',y'') it to the relay log since it hasn't noticed anything is
         amiss.
      7. It then tries to read more bytes, which is either e (if the length
         given for X just happened to match the length given for Y, or just
         plain garbage because the slave is out of sync with what is
         actually sent.
      8. After a while, the SQL thread tries to execute the event (x',y''),
         which is very likely to be just nonsense.
      
      The problem can be fixed by not resetting net->error after the call of 
      mysql_binlog_send, so the error message will not be sent and the connection
      will be closed.
      e4f37eab
  16. 27 Jan, 2008 1 commit
  17. 25 Jan, 2008 1 commit