1. 29 Jun, 2010 4 commits
    • Marko Mäkelä's avatar
      Bug#54408: txn rollback after recovery: row0umod.c:673 · c8e48de2
      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
      c8e48de2
    • Marko Mäkelä's avatar
      ChangeLog entry for Bug #54358 · c43070da
      Marko Mäkelä authored
      c43070da
    • Marko Mäkelä's avatar
      Bug#54358: READ UNCOMMITTED access failure of off-page DYNAMIC or COMPRESSED · 7271bcb4
      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
      7271bcb4
    • Jimmy Yang's avatar
      Check in fix for bug #53756: "ALTER TABLE ADD PRIMARY KEY affects · dec24a7d
      Jimmy Yang authored
      crash recovery"
      
      rb://369 approved by Marko
      dec24a7d
  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
      58f1c5fe
    • Sergey Glukhov's avatar
      Bug#38999 valgrind warnings for update statement in function compare_record() · d2db80c8
      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.
      d2db80c8
  13. 08 Jun, 2010 2 commits