1. 29 Jun, 2010 5 commits
    • Marko Mäkelä's avatar
      ChangeLog entry for Bug #54408 · d8421300
      Marko Mäkelä authored
      d8421300
    • Marko Mäkelä's avatar
      Bug#54408: txn rollback after recovery: row0umod.c:673 · 63c44558
      Marko Mäkelä authored
      dict_table_get_format(index->table)
      
      The REDUNDANT and COMPACT formats store a local 768-byte prefix of
      each externally stored column. No row_ext cache is needed, but we
      initialized one nevertheless. When the BLOB pointer was zero, we would
      ignore the locally stored prefix as well. This triggered an assertion
      failure in row_undo_mod_upd_exist_sec().
      
      row_build(): Allow ext==NULL when a REDUNDANT or COMPACT table
      contains externally stored columns.
      
      row_undo_search_clust_to_pcur(), row_upd_store_row(): Invoke
      row_build() with ext==NULL on REDUNDANT and COMPACT tables.
      
      rb://382 approved by Jimmy Yang
      63c44558
    • Marko Mäkelä's avatar
      ChangeLog entry for Bug #54358 · 4ee0dc7c
      Marko Mäkelä authored
      4ee0dc7c
    • Marko Mäkelä's avatar
      Bug#54358: READ UNCOMMITTED access failure of off-page DYNAMIC or COMPRESSED · 62084feb
      Marko Mäkelä authored
      columns
      
      When the server crashes after a record stub has been inserted and
      before all its off-page columns have been written, the record will
      contain incomplete off-page columns after crash recovery. Such records
      may only be accessed at the READ UNCOMMITTED isolation level or when
      rolling back a recovered transaction in recv_recovery_rollback_active().
      Skip these records at the READ UNCOMMITTED isolation level.
      
      TODO: Add assertions for checking the above assumptions hold when an
      incomplete BLOB is encountered.
      
      btr_rec_copy_externally_stored_field(): Return NULL if the field is
      incomplete.
      
      row_prebuilt_t::templ_contains_blob: Clarify what "BLOB" means in this
      context. Hint: MySQL BLOBs are not the same as InnoDB BLOBs.
      
      row_sel_store_mysql_rec(): Return FALSE if not all columns could be
      retrieved. Previously this function always returned TRUE.  Assert that
      the record is not delete-marked.
      
      row_sel_push_cache_row_for_mysql(): Return FALSE if not all columns
      could be retrieved.
      
      row_search_for_mysql(): Skip records containing incomplete off-page
      columns. Assert that the transaction isolation level is READ
      UNCOMMITTED.
      
      rb://380 approved by Jimmy Yang
      62084feb
    • Jimmy Yang's avatar
      Check in fix for bug #53756: "ALTER TABLE ADD PRIMARY KEY affects · 1b31b3a3
      Jimmy Yang authored
      crash recovery"
      
      rb://369 approved by Marko
      1b31b3a3
  2. 25 Jun, 2010 6 commits
  3. 24 Jun, 2010 5 commits
  4. 23 Jun, 2010 2 commits
  5. 22 Jun, 2010 5 commits
  6. 21 Jun, 2010 2 commits
  7. 18 Jun, 2010 3 commits
  8. 17 Jun, 2010 2 commits
  9. 15 Jun, 2010 1 commit
  10. 14 Jun, 2010 2 commits
  11. 10 Jun, 2010 4 commits
  12. 09 Jun, 2010 2 commits
    • Sergey Glukhov's avatar
      Bug#38999 valgrind warnings for update statement in function compare_record() · 022e2ef8
      Sergey Glukhov authored
      (InnoDB plugin branch)
      
      mysql-test/suite/innodb_plugin/r/innodb_mysql.result:
        test case
      mysql-test/suite/innodb_plugin/t/innodb_mysql.test:
        test case
      storage/innodb_plugin/row/row0sel.c:
        init null bytes with default values as they might be
        left uninitialized in some cases and these uninited bytes
        might be copied into mysql record buffer that leads to
        valgrind warnings on next use of the buffer.
      022e2ef8
    • Sergey Glukhov's avatar
      Bug#38999 valgrind warnings for update statement in function compare_record() · 60a66c45
      Sergey Glukhov authored
      Valgrind warning happpens because of uninitialized null bytes.
      In row_sel_push_cache_row_for_mysql() function we fill fetch cache
      with necessary field values, row_sel_store_mysql_rec() is called
      for this and leaves null bytes untouched.
      Later row_sel_pop_cached_row_for_mysql() rewrites table record
      buffer with uninited null bytes. We can see the problem from the
      test case:
      At 'SELECT...' we call row_sel_push...->row_sel_store...->row_sel_pop_cached...
      chain which rewrites table->record[0] buffer with uninitialized null bytes.
      When we call 'UPDATE...' statement, compare_record uses this buffer and
      valgrind warning occurs.
      The fix is to init null bytes with default values.
      
      
      mysql-test/suite/innodb/r/innodb_mysql.result:
        test case
      mysql-test/suite/innodb/t/innodb_mysql.test:
        test case
      mysql-test/t/ps_3innodb.test:
        enable valgrind testing
      storage/innobase/row/row0sel.c:
        init null bytes with default values as they might be
        left uninitialized in some cases and these uninited bytes
        might be copied into mysql record buffer that leads to
        valgrind warnings on next use of the buffer.
      60a66c45
  13. 08 Jun, 2010 1 commit