• sunny's avatar
    branches/zip: Merge revisions 2702:2722 from branches/5.1: · 00189b7a
    sunny authored
      ------------------------------------------------------------------------
      r2702 | sunny | 2008-09-30 11:41:56 +0300 (Tue, 30 Sep 2008) | 13 lines
      Changed paths:
         M /branches/5.1/handler/ha_innodb.cc
      
      branches/5.1: Since handler::get_auto_increment() doesn't allow us
      to return the cause of failure we have to inform MySQL using the
      sql_print_warning() function to return the cause for autoinc failure.
      Previously we simply printed the error code, this patch prints the
      text string representing the following two error codes:
      
      DB_LOCK_WAIT_TIMEOUT
      DB_DEADLOCK.
      
      Bug#35498 Cannot get table test/table1 auto-inccounter value in ::info
      
      Approved by Marko.
      
      ------------------------------------------------------------------------
      r2709 | vasil | 2008-10-01 10:13:13 +0300 (Wed, 01 Oct 2008) | 10 lines
      Changed paths:
         M /branches/5.1/include/lock0lock.h
         M /branches/5.1/lock/lock0lock.c
         A /branches/5.1/mysql-test/innodb_bug38231.result
         A /branches/5.1/mysql-test/innodb_bug38231.test
         M /branches/5.1/row/row0mysql.c
      
      branches/5.1:
      
      Fix Bug#38231 Innodb crash in lock_reset_all_on_table() on TRUNCATE + LOCK / UNLOCK
      
      In TRUNCATE TABLE and discard tablespace: do not remove table-level S
      and X locks and do not assert on such locks not being wait locks.
      Leave such locks alone.
      
      Approved by:	Heikki (rb://14)
      
      ------------------------------------------------------------------------
      r2710 | vasil | 2008-10-01 14:13:58 +0300 (Wed, 01 Oct 2008) | 6 lines
      Changed paths:
         M /branches/5.1/include/sync0sync.ic
      
      branches/5.1:
      
      Silence a compilation warning in UNIV_DEBUG.
      
      Approved by:	Marko (via IM)
      
      ------------------------------------------------------------------------
      r2719 | vasil | 2008-10-03 18:17:28 +0300 (Fri, 03 Oct 2008) | 49 lines
      Changed paths:
         M /branches/5.1/handler/ha_innodb.cc
         A /branches/5.1/mysql-test/innodb_bug39438-master.opt
         A /branches/5.1/mysql-test/innodb_bug39438.result
         A /branches/5.1/mysql-test/innodb_bug39438.test
      
      branches/5.1:
      
      Fix Bug#39438 Testcase for Bug#39436 crashes on 5.1 in fil_space_get_latch
      
      In ha_innobase::info() - do not try to get the free space for a tablespace
      which has been discarded with ALTER TABLE ... DISCARD TABLESPACE or if the
      .ibd file is missing for some other reason.
      
      ibd_file_missing and tablespace_discarded are manipulated only in
      row_discard_tablespace_for_mysql() and in row_import_tablespace_for_mysql()
      and the manipulation is protected/surrounded by
      row_mysql_lock_data_dictionary()/row_mysql_unlock_data_dictionary() thus we
      do the same in ha_innobase::info() when checking the values of those members
      to avoid race conditions. I have tested the code-path with UNIV_DEBUG and
      UNIV_SYNC_DEBUG.
      
      Looks like it is not possible to avoid mysqld printing warnings in the
      mysql-test case and thus this test innodb_bug39438 must be added to the
      list of exceptional test cases that are allowed to print warnings. For this,
      the following patch must be applied to the mysql source tree:
      
        --- cut ---
        === modified file 'mysql-test/lib/mtr_report.pl'
        --- mysql-test/lib/mtr_report.pl	2008-08-12 10:26:23 +0000
        +++ mysql-test/lib/mtr_report.pl	2008-10-01 11:57:41 +0000
        @@ -412,7 +412,10 @@
         
                         # When trying to set lower_case_table_names = 2
                         # on a case sensitive file system. Bug#37402.
        -                /lower_case_table_names was set to 2, even though your the file system '.*' is case sensitive.  Now setting lower_case_table_names to 0 to avoid future problems./
        +                /lower_case_table_names was set to 2, even though your the file system '.*' is case sensitive.  Now setting lower_case_table_names to 0 to avoid future problems./ or
        +
        +                # this test is expected to print warnings
        +                ($testname eq 'main.innodb_bug39438')
         		)
                     {
                       next;                       # Skip these lines
        
        --- cut ---
      
      The mysql-test is currently somewhat disabled (see inside
      innodb_bug39438.test), after the above patch has been applied to the mysql
      source tree, the test can be enabled.
      
      rb://20
      
      Reviewed by:	Inaam, Calvin
      Approved by:	Heikki
      
      ------------------------------------------------------------------------
      r2720 | vasil | 2008-10-03 19:52:39 +0300 (Fri, 03 Oct 2008) | 8 lines
      Changed paths:
         M /branches/5.1/handler/ha_innodb.cc
      
      branches/5.1:
      
      Print a warning if an attempt is made to get the free space for a table
      whose .ibd file is missing or the tablespace has been discarded. This is a
      followup to r2719.
      
      Suggested by:	Inaam
      
      ------------------------------------------------------------------------
      r2721 | sunny | 2008-10-04 02:08:23 +0300 (Sat, 04 Oct 2008) | 6 lines
      Changed paths:
         M /branches/5.1/handler/ha_innodb.cc
      
      branches/5.1: We need to send the messages to the client because
      handler::get_auto_increment() doesn't allow a way to return the
      specific error for why it failed.
      
      rb://18
      
      ------------------------------------------------------------------------
      r2722 | sunny | 2008-10-04 02:48:04 +0300 (Sat, 04 Oct 2008) | 18 lines
      Changed paths:
         M /branches/5.1/dict/dict0mem.c
         M /branches/5.1/handler/ha_innodb.cc
         M /branches/5.1/include/dict0mem.h
         M /branches/5.1/include/row0mysql.h
         M /branches/5.1/mysql-test/innodb-autoinc.result
         M /branches/5.1/mysql-test/innodb-autoinc.test
         M /branches/5.1/row/row0mysql.c
      
      branches/5.1: This bug has always existed but was masked by other errors. The
      fix for bug# 38839 triggered this bug. When the offset and increment are > 1
      we need to calculate the next value taking into consideration the two
      variables. Previously we simply assumed they were 1 particularly offset was
      never used. MySQL does its own calculation and that's probably why it seemed
      to work in the past. We would return what we thought was the correct next
      value and then MySQL would recalculate the actual value from that and return
      it to the caller (e.g., handler::write_row()). Several new tests have been
      added that try and catch some edge cases. The tests exposed a wrap around
      error in MySQL next value calculation which was filed as bug#39828. The tests
      will need to be updated once MySQL fix that bug.
      
      One good side effect of this fix is that dict_table_t size has been
      reduced by 8 bytes because we have moved the autoinc_increment field to
      the row_prebuilt_t structure. See review-board for a detailed discussion.
      
      rb://3
      
      ------------------------------------------------------------------------
    00189b7a
row0mysql.h 28.1 KB