1. 02 Jun, 2010 2 commits
    • Marko Mäkelä's avatar
      Bug#53674: InnoDB: Error: unlock row could not find a 4 mode lock on the record · 4a8aa70e
      Marko Mäkelä authored
      In semi-consistent read, only unlock freshly locked non-matching records.
      
      Define DB_SUCCESS_LOCKED_REC for indicating a successful operation
      where a record lock was created.
      
      lock_rec_lock_fast(): Return LOCK_REC_SUCCESS,
      LOCK_REC_SUCCESS_CREATED, or LOCK_REC_FAIL instead of TRUE/FALSE.
      
      lock_sec_rec_read_check_and_lock(),
      lock_clust_rec_read_check_and_lock(), lock_rec_enqueue_waiting(),
      lock_rec_lock_slow(), lock_rec_lock(), row_ins_set_shared_rec_lock(),
      row_ins_set_exclusive_rec_lock(), sel_set_rec_lock(),
      row_sel_get_clust_rec_for_mysql(): Return DB_SUCCESS_LOCKED_REC if a
      new record lock was created. Adjust callers.
      
      row_unlock_for_mysql(): Correct the function documentation.
      
      row_prebuilt_t::new_rec_locks: Correct the documentation.
      4a8aa70e
    • Marko Mäkelä's avatar
  2. 01 Jun, 2010 5 commits
  3. 31 May, 2010 1 commit
    • Vasil Dimov's avatar
      Merge a change from mysql-trunk-innodb: · f5fd8530
      Vasil Dimov authored
        ------------------------------------------------------------
        revno: 3127
        revision-id: vasil.dimov@oracle.com-20100531152341-x2d4hma644icamh1
        parent: vasil.dimov@oracle.com-20100531105923-kpjwl4rbgfpfj13c
        committer: Vasil Dimov <vasil.dimov@oracle.com>
        branch nick: mysql-trunk-innodb
        timestamp: Mon 2010-05-31 18:23:41 +0300
        message:
          Fix Bug #53947 InnoDB: Assertion failure in thread 4224 in file .\sync\sync0sync.c line 324
          
          Destroy the rw-lock object before freeing the memory it is occupying.
          If we do not do this, then the mutex that is contained in the rw-lock
          object btr_search_latch_temp->mutex gets "freed" and subsequently
          mutex_free() from sync_close() hits a mutex whose memory has been
          freed and crashes.
          
          Approved by:	Heikki (via IRC)
          Discussed with:	Calvin
      f5fd8530
  4. 28 May, 2010 1 commit
  5. 27 May, 2010 1 commit
  6. 26 May, 2010 2 commits
  7. 25 May, 2010 6 commits
  8. 24 May, 2010 2 commits
    • Marko Mäkelä's avatar
      Document the Bug #53578 fix. · 1a892fa2
      Marko Mäkelä authored
      1a892fa2
    • Marko Mäkelä's avatar
      Bug#53578: assert on invalid page access, in fil_io() · b7a24744
      Marko Mäkelä authored
      Store the max_space_id in the data dictionary header in order to avoid
      space_id reuse.
      
      DICT_HDR_MIX_ID: Renamed to DICT_HDR_MAX_SPACE_ID, DICT_HDR_MIX_ID_LOW.
      
      dict_hdr_get_new_id(): Return table_id, index_id, space_id or a subset of them.
      
      fil_system_t: Add ibool space_id_reuse_warned.
      
      fil_create_new_single_table_tablespace(): Get the space_id from the caller.
      
      fil_space_create(): Issue a warning if the fil_system->max_assigned_id
      is exceeded.
      
      fil_assign_new_space_id(): Return TRUE/FALSE and take a pointer to the
      space_id as a parameter. Make the function public.
      
      fil_init(): Initialize all fil_system fields by mem_zalloc(). Remove
      explicit initializations of certain fields to 0 or NULL.
      b7a24744
  9. 20 May, 2010 7 commits
    • Vasil Dimov's avatar
      ffa35ab3
    • Vasil Dimov's avatar
      Disable main.ps_3innodb for valgrind tests since it results in known · 0f913e03
      Vasil Dimov authored
      failures, that are described in
      
      Bug#38999 valgrind warnings for update statement in function compare_record()
      
      At the time I am adding this the failures are:
      
      main.ps_3innodb                          [ fail ]  Found warnings/errors in server log file!
              Test ended at 2010-05-20 01:17:34
      line
      ==31559== Thread 11:
      ==31559== Conditional jump or move depends on uninitialised value(s)
      ==31559==    at 0x75C5BD: compare_record(st_table*) (sql_update.cc:35)
      ==31559==    by 0x744732: write_record(THD*, st_table*, st_copy_info*) (sql_insert.cc:1486)
      ==31559==    by 0x74A0D7: mysql_insert(THD*, TABLE_LIST*, List<Item>&, List<List<Item> >&, List<Item>&, List<Item>&, enum_duplicates, bool) (sql_insert.cc:835)
      ==31559==    by 0x6A79B4: mysql_execute_command(THD*) (sql_parse.cc:3198)
      ==31559==    by 0x754998: Prepared_statement::execute(String*, bool) (sql_prepare.cc:3583)
      ==31559==    by 0x754C4F: Prepared_statement::execute_loop(String*, bool, unsigned char*, unsigned char*) (sql_prepare.cc:3258)
      ==31559==    by 0x754F33: mysql_sql_stmt_execute(THD*) (sql_prepare.cc:2529)
      ==31559==    by 0x6A5028: mysql_execute_command(THD*) (sql_parse.cc:2272)
      ==31559==    by 0x6ADAE8: mysql_parse(THD*, char const*, unsigned, char const**) (sql_parse.cc:5986)
      ==31559==    by 0x6AF3A4: dispatch_command(enum_server_command, THD*, char*, unsigned) (sql_parse.cc:1233)
      ==31559==    by 0x6B0800: do_command(THD*) (sql_parse.cc:874)
      ==31559==    by 0x69CB46: handle_one_connection (sql_connect.cc:1134)
      ==31559==    by 0x33EDA062F6: start_thread (in /lib64/libpthread-2.5.so)
      ==31559==    by 0x33ECED1B6C: clone (in /lib64/libc-2.5.so)
      ==31559== Conditional jump or move depends on uninitialised value(s)
      ==31559==    at 0x75C5D0: compare_record(st_table*) (sql_update.cc:35)
      ==31559==    by 0x744732: write_record(THD*, st_table*, st_copy_info*) (sql_insert.cc:1486)
      ==31559==    by 0x74A0D7: mysql_insert(THD*, TABLE_LIST*, List<Item>&, List<List<Item> >&, List<Item>&, List<Item>&, enum_duplicates, bool) (sql_insert.cc:835)
      ==31559==    by 0x6A79B4: mysql_execute_command(THD*) (sql_parse.cc:3198)
      ==31559==    by 0x754998: Prepared_statement::execute(String*, bool) (sql_prepare.cc:3583)
      ==31559==    by 0x754C4F: Prepared_statement::execute_loop(String*, bool, unsigned char*, unsigned char*) (sql_prepare.cc:3258)
      ==31559==    by 0x754F33: mysql_sql_stmt_execute(THD*) (sql_prepare.cc:2529)
      ==31559==    by 0x6A5028: mysql_execute_command(THD*) (sql_parse.cc:2272)
      ==31559==    by 0x6ADAE8: mysql_parse(THD*, char const*, unsigned, char const**) (sql_parse.cc:5986)
      ==31559==    by 0x6AF3A4: dispatch_command(enum_server_command, THD*, char*, unsigned) (sql_parse.cc:1233)
      ==31559==    by 0x6B0800: do_command(THD*) (sql_parse.cc:874)
      ==31559==    by 0x69CB46: handle_one_connection (sql_connect.cc:1134)
      ==31559==    by 0x33EDA062F6: start_thread (in /lib64/libpthread-2.5.so)
      ==31559==    by 0x33ECED1B6C: clone (in /lib64/libc-2.5.so)
      ^ Found warnings in /export/home4/pb2/test/sb_3-1827397-1274300957.87/mysql-5.1.48-linux-x86_64-test/mysql-test/var-n_mix/log/mysqld.1.err
      0f913e03
    • Marko Mäkelä's avatar
      8ca5398c
    • Vasil Dimov's avatar
      88725725
    • Marko Mäkelä's avatar
      Bug#53593: Add some instrumentation to improve Valgrind sensitivity · 5fc862d6
      Marko Mäkelä authored
      BUILD/*: Add valgrind_configs=--with-valgrind.
      BUILD/*: Remove -USAFEMALLOC from valgrind_flags.
      
      configure.in: Add AC_ARG_WITH(valgrind) and HAVE_VALGRIND.
      
      include/my_sys.h: Define a number of MEM_ wrappers for VALGRIND_ functions.
      include/my_sys.h: Make TRASH do MEM_UNDEFINED().
      
      include/m_string.h: Remove unused macro bzero_if_purify(A,B).
      
      _mymalloc(): Declare MEM_UNDEFINED() on the allocated memory.
      
      _myfree(): Declare MEM_NOACCESS() on the freed memory.
      
      storage/innobase/include/univ.i: Enable UNIV_DEBUG_VALGRIND based on
      HAVE_VALGRIND rather than HAVE_purify.
      
      Possible things to do:
       * In my_global.h, remove the defined(HAVE_purify) condition
         from the _WIN32 uint3korr().
       * In my_global.h *int*korr(), use | instead of +
         in order to keep the Valgrind V bits accurate
       * Consider replacing HAVE_purify with HAVE_VALGRIND
       * Use VALGRIND_CREATE_BLOCK, VALGRIND_DISCARD in mem_root and similar places
      5fc862d6
    • Vasil Dimov's avatar
      Merge from mysql-trunk-innodb into mysql-5.1-innodb/storage/innodb_plugin: · 497ff20f
      Vasil Dimov authored
        ------------------------------------------------------------
        revno: 3094
        revision-id: vasil.dimov@oracle.com-20100513074652-0cvlhgkesgbb2bfh
        parent: vasil.dimov@oracle.com-20100512173700-byf8xntxjur1hqov
        committer: Vasil Dimov <vasil.dimov@oracle.com>
        branch nick: mysql-trunk-innodb
        timestamp: Thu 2010-05-13 10:46:52 +0300
        message:
          Followup to Bug#51920, fix binlog.binlog_killed
          
          This is a followup to the fix of
          
          Bug#51920 Innodb connections in row lock wait ignore KILL until lock wait
          timeout
          
          in that fix (rb://279) the behavior was changed to honor when a trx is
          interrupted during lock wait, but the returned error code was still
          "lock wait timeout" when it should be "interrupted".
          
          This change fixes the non-deterministically failing test binlog.binlog_killed,
          that failed like this:
          
          binlog.binlog_killed 'stmt'              [ fail ]
                  Test ended at 2010-05-12 11:39:08
          
          CURRENT_TEST: binlog.binlog_killed
          mysqltest: At line 208: query 'reap' failed with wrong errno 1205: 'Lock wait timeout exceeded; try restarting transaction', instead of 0...
          
          Approved by:	Sunny Bains (rb://344)
        ------------------------------------------------------------
      497ff20f
    • Vasil Dimov's avatar
      Merge from mysql-trunk-innodb into mysql-5.1-innodb/storage/innobase: · 8a03ef79
      Vasil Dimov authored
        ------------------------------------------------------------
        revno: 3094
        revision-id: vasil.dimov@oracle.com-20100513074652-0cvlhgkesgbb2bfh
        parent: vasil.dimov@oracle.com-20100512173700-byf8xntxjur1hqov
        committer: Vasil Dimov <vasil.dimov@oracle.com>
        branch nick: mysql-trunk-innodb
        timestamp: Thu 2010-05-13 10:46:52 +0300
        message:
          Followup to Bug#51920, fix binlog.binlog_killed
          
          This is a followup to the fix of
          
          Bug#51920 Innodb connections in row lock wait ignore KILL until lock wait
          timeout
          
          in that fix (rb://279) the behavior was changed to honor when a trx is
          interrupted during lock wait, but the returned error code was still
          "lock wait timeout" when it should be "interrupted".
          
          This change fixes the non-deterministically failing test binlog.binlog_killed,
          that failed like this:
          
          binlog.binlog_killed 'stmt'              [ fail ]
                  Test ended at 2010-05-12 11:39:08
          
          CURRENT_TEST: binlog.binlog_killed
          mysqltest: At line 208: query 'reap' failed with wrong errno 1205: 'Lock wait timeout exceeded; try restarting transaction', instead of 0...
          
          Approved by:	Sunny Bains (rb://344)
        ------------------------------------------------------------
      
      This merge is non-trivial since it has to introduce the DB_INTERRUPTED
      error code.
      
      Also revert vasil.dimov@oracle.com-20100408165555-9rpjh24o0sa9ad5y
      which adjusted the binlog.binlog_killed test to the new (wrong) behavior
      8a03ef79
  10. 19 May, 2010 6 commits
  11. 18 May, 2010 1 commit
  12. 14 May, 2010 4 commits
    • Marko Mäkelä's avatar
      d7ab161e
    • Marko Mäkelä's avatar
      Make the InnoDB FOREIGN KEY parser understand multi-statements. (Bug #48024) · 8b3820e2
      Marko Mäkelä authored
      Also make InnoDB thinks that /*/ only starts a comment. (Bug #53644).
      
      This fixes the bugs in the InnoDB Plugin.
      
      ha_innodb.h: Use trx_query_string() instead of trx_query() when
      available (MySQL 5.1.42 or later).
      
      innobase_get_stmt(): New function, to retrieve the currently running
      SQL statement.
      
      struct trx_struct: Remove mysql_query_str. Use innobase_get_stmt() instead.
      
      dict_strip_comments(): Add and observe the parameter sql_length. Treat
      /*/ as the start of a comment.
      
      dict_create_foreign_constraints(), row_table_add_foreign_constraints():
      Add the parameter sql_length.
      8b3820e2
    • Marko Mäkelä's avatar
      Make the InnoDB FOREIGN KEY parser understand multi-statements. (Bug #48024) · b93e7892
      Marko Mäkelä authored
      Also make InnoDB thinks that /*/ only starts a comment. (Bug #53644).
      
      struct trx_struct: Add mysql_query_len.
      
      ha_innodb.cc: Use trx_query_string() instead of trx_query() and
      initialize trx->mysql_query_len.
      
      INNOBASE_COPY_STMT(thd, trx): New macro, to initialize
      trx->mysql_query_str and trx->mysql_query_len.
      
      dict_strip_comments(): Add and observe the parameter sql_length. Treat
      /*/ as the start of a comment.
      
      dict_create_foreign_constraints(), row_table_add_foreign_constraints():
      Add the parameter sql_length.
      b93e7892
    • Marko Mäkelä's avatar
      Remove unused code. · 679b9833
      Marko Mäkelä authored
      679b9833
  13. 12 May, 2010 2 commits