1. 27 Sep, 2011 1 commit
    • Ashish Agarwal's avatar
      BUG#11759349 - 51655: CREATE TABLE IN MEMORY ENGINE DOESN'T STORE · 5dbcff9b
      Ashish Agarwal authored
                            CREATE_TIME IN INFORMATION_SC
      
      It was impossible to determine MEMORY table creation time,
      since it wasn't stored/exposed.
      
      With this patch creation time is saved and it is available via
      I_S.TABLES.CREATE_TIME.
      
      Note: it was decided that additional analysis is required before
      implementing UPDATE_TIME. Thus this patch doesn't store UPDATE_TIME.
      5dbcff9b
  2. 26 Sep, 2011 2 commits
  3. 22 Sep, 2011 1 commit
  4. 21 Sep, 2011 1 commit
    • unknown's avatar
      Bug 12963823 - Crash in Purge thread under unusual circumstances. · 265737d1
      unknown authored
      The problem occurred when indexes are added between the time that an
      UNDO record is created and the time that the purge thread comes around
      and deletes the old secondary index entries.  The purge thread would
      hit an assert when trying to build a secondary index entry for
      searching.  The problem was that the old value of those fields were not
      in the UNDO record since they were not part of an index when the UPDATE
      occured. 
      A test case was added to innodb-index.test.
      265737d1
  5. 20 Sep, 2011 1 commit
  6. 19 Sep, 2011 1 commit
  7. 16 Sep, 2011 2 commits
    • Sergey Vojtovich's avatar
      Merge. · a33b4214
      Sergey Vojtovich authored
      a33b4214
    • Sergey Vojtovich's avatar
      BUG#11761180 - 53646: MYISAMPACK CORRUPTS TABLES WITH · 3f9cbd77
      Sergey Vojtovich authored
                     FULLTEXT INDEXES
      
      myisamchk may create incorrect fulltext index for compressed
      tables. Incorrect data pointer size was used while creating
      fulltext index.
      
      mysql-test/r/myisampack.result:
        A test case for BUG#11761180.
      mysql-test/t/myisampack.test:
        A test case for BUG#11761180.
      storage/myisam/ft_boolean_search.c:
        rec_reflength on share may have adjustments required for
        compressed tables and must be used instead of rec_reflength
        on base info.
      storage/myisam/ft_nlq_search.c:
        rec_reflength on share may have adjustments required for
        compressed tables and must be used instead of rec_reflength
        on base info.
      storage/myisam/mi_check.c:
        rec_reflength on share may have adjustments required for
        compressed tables and must be used instead of rec_reflength
        on base info.
      storage/myisam/mi_write.c:
        rec_reflength on share may have adjustments required for
        compressed tables and must be used instead of rec_reflength
        on base info.
      3f9cbd77
  8. 15 Sep, 2011 2 commits
  9. 14 Sep, 2011 3 commits
  10. 13 Sep, 2011 2 commits
  11. 12 Sep, 2011 1 commit
    • Marko Mäkelä's avatar
      Bug#12601439 CONSISTENT READ FAILURE IN COLUMN PREFIX INDEX · cc496eb7
      Marko Mäkelä authored
      When there is a secondary index on a column prefix of an externally
      stored column and an entry in the secondary index is shorter than the
      reserved prefix length, it should mean that the secondary index entry
      is holding the complete column value. When comparing this secondary
      index column value to the column in the clustered index row, we must
      compare the entire prefix that was fetched from the clustered
      index. The bug was that we would just compare that the column in the
      clustered index starts with the value found in the secondary index
      column.
      
      This bug affects only the InnoDB Barracuda formats (ROW_FORMAT=DYNAMIC
      and ROW_FORMAT=COMPRESSED), in which columns that are stored off-page
      in the clustered index do not contain any prefix in the clustered
      index record.
      
      row_sel_sec_rec_is_for_blob(): Add the parameter prefix_len, for
      ifield->prefix_len. Add some assertions.
      
      Sorry, I did not manage to produce a test case. This patch does
      produce correct results on the data set that Michael isolated on our
      test machine. That was with the purge and background rollback
      suspended, because they would make the bug go away.
      
      rb:760 approved by Sunny Bains
      cc496eb7
  12. 09 Sep, 2011 1 commit
  13. 08 Sep, 2011 2 commits
  14. 07 Sep, 2011 1 commit
    • Vasil Dimov's avatar
      Use cursors for seeking records in SYS_FOREIGN and SYS_INDEXES from · 10e7b948
      Vasil Dimov authored
      DROP_TABLE_PROC().
      
      With this change I observe a speedup from 6.2s to 0.1s when executing
      DROP_TABLE_PROC() during DROP TABLE with 512 foreign keys, like what
      is being done in innodb_bug56143.test
      
      This fixes "Bug#11765460 DROP TABLE USES INEFFICIENT METHODS TO REMOVE
      FKS/INDEXES FROM INNODB SYS TABLES"
      
      Reviewed by:	Marko
      10e7b948
  15. 06 Sep, 2011 5 commits
    • Nirbhay Choubey's avatar
      Bug#11765888 58898: MYSQL_INSTALL_DB: NOT ALL OPTIONS DOCUMENTED · a667fe03
      Nirbhay Choubey authored
                                  (EG: --DEFAULTS-FILE )
        
      Updating help message in scripts/mysql_install_db.pl.in file.
      
      
      scripts/mysql_install_db.pl.in:
        Bug#11765888 58898: MYSQL_INSTALL_DB: NOT ALL OPTIONS DOCUMENTED
                                    (EG: --DEFAULTS-FILE )
          
        Updating help message.
      a667fe03
    • Nirbhay Choubey's avatar
      d24953af
    • Nirbhay Choubey's avatar
      Bug#11765888 58898: MYSQL_INSTALL_DB: NOT ALL OPTIONS DOCUMENTED · 079d3cc6
      Nirbhay Choubey authored
                          (EG: --DEFAULTS-FILE )
      
      Added help message for the missing options (--no-defaults,
      --defaults-file and --defaults-extra-file).
      
      
      079d3cc6
    • Marko Mäkelä's avatar
      Bug #12950803 62294: BUF_BUDDY_RELOCATE CALLS GETTIMEOFDAY ... · 7f48c174
      Marko Mäkelä authored
      buf_buddy_relocate(): The ut_time_us() function is needed for
      statistics, calculating the total time spent on relocating blocks.
      Until now, we invoked ut_time_us() every time buf_buddy_relocate() was
      called. Fix: Only call ut_time_us() when the block can be relocated.
      After this fix, the reported relocated_usec will no longer include the
      time for the page_hash lookup and for acquiring the block mutex.
      
      Approved by Sunny Bains on IM
      7f48c174
    • Marko Mäkelä's avatar
      Bug#12547647 UPDATE LOGGING COULD EXCEED LOG PAGE SIZE - take 2 · 2f49da3f
      Marko Mäkelä authored
      The original fix was accidentally pushed to mysql-5.1 after the 5.1.59
      clone-off in bzr revision id
      marko.makela@oracle.com-20110829081642-z0w992a0mrc62s6w with thne fix
      of Bug#12704861 Corruption after a crash during BLOB update.
      It was pushed separately to mysql-5.5 in bzr revision id
      marko.makela@oracle.com-20110901184804-2901f6qmuro3jas8.
      
      trx_undo_report_row_operation(): If the page for which the undo log
      was too big was empty, commit and start the mini-transaction before
      acquiring the rollback segment mutex and freeing the undo page. This
      is necessary, because the mini-transaction may be holding lower-order
      latches in the levels SYNC_FSP and SYNC_FSP_PAGE.
      
      trx_undo_erase_page_end(): Erase also empty pages, because
      trx_undo_report_row_operation() needs to commit the mini-transaction
      before freeing the empty page.
      
      rb:756 approved by Sunny Bains
      2f49da3f
  16. 05 Sep, 2011 1 commit
  17. 30 Aug, 2011 5 commits
  18. 29 Aug, 2011 4 commits
    • Bjorn Munch's avatar
      merge from 5.1 main · 98136ecf
      Bjorn Munch authored
      98136ecf
    • Tor Didriksen's avatar
      BUG#12911710 - VALGRIND FAILURE IN ROW-DEBUG:PERFSCHEMA.SOCKET_SUMMARY_BY_INSTANCE_FUNC · f610c565
      Tor Didriksen authored
      Converting the number zero to binary and back yielded the number zero,
      but with no digits, i.e. zero precision.
      This made the multiply algorithm go haywire in various ways.
      
      
      include/decimal.h:
        Document struct st_decimal_t
      mysql-test/r/type_newdecimal.result:
        New test case (valgrind warnings)
      mysql-test/t/type_newdecimal.test:
        New test case (valgrind warnings)
      sql/my_decimal.h:
        Remove the HAVE_purify enabled/disabled code.
      strings/decimal.c:
        Make a proper zero, with non-zero precision.
      f610c565
    • Tor Didriksen's avatar
      local merge · 5618a7d6
      Tor Didriksen authored
      5618a7d6
    • Marko Mäkelä's avatar
      Bug#12704861 Corruption after a crash during BLOB update · 41f229cd
      Marko Mäkelä authored
      The fix of Bug#12612184 broke crash recovery. When a record that
      contains off-page columns (BLOBs) is updated, we must first write redo
      log about the BLOB page writes, and only after that write the redo log
      about the B-tree changes. The buggy fix would log the B-tree changes
      first, meaning that after recovery, we could end up having a record
      that contains a null BLOB pointer.
      
      Because we will be redo logging the writes off the off-page columns
      before the B-tree changes, we must make sure that the pages chosen for
      the off-page columns are free both before and after the B-tree
      changes. In this way, the worst thing that can happen in crash
      recovery is that the BLOBs are written to free pages, but the B-tree
      changes are not applied. The BLOB pages would correctly remain free in
      this case. To achieve this, we must allocate the BLOB pages in the
      mini-transaction of the B-tree operation. A further quirk is that BLOB
      pages are allocated from the same file segment as leaf pages. Because
      of this, we must temporarily "hide" any leaf pages that were freed
      during the B-tree operation by "fake allocating" them prior to writing
      the BLOBs, and freeing them again before the mtr_commit() of the
      B-tree operation, in btr_mark_freed_leaves().
      
      btr_cur_mtr_commit_and_start(): Remove this faulty function that was
      introduced in the Bug#12612184 fix. The problem that this function was
      trying to address was that when we did mtr_commit() the BLOB writes
      before the mtr_commit() of the update, the new BLOB pages could have
      overwritten clustered index B-tree leaf pages that were freed during
      the update. If recovery applied the redo log of the BLOB writes but
      did not see the log of the record update, the index tree would be
      corrupted. The correct solution is to make the freed clustered index
      pages unavailable to the BLOB allocation. This function is also a
      likely culprit of InnoDB hangs that were observed when testing the
      Bug#12612184 fix.
      
      btr_mark_freed_leaves(): Mark all freed clustered index leaf pages of
      a mini-transaction allocated (nonfree=TRUE) before storing the BLOBs,
      or freed (nonfree=FALSE) before committing the mini-transaction.
      
      btr_freed_leaves_validate(): A debug function for checking that all
      clustered index leaf pages that have been marked free in the
      mini-transaction are consistent (have not been zeroed out).
      
      btr_page_alloc_low(): Refactored from btr_page_alloc(). Return the
      number of the allocated page, or FIL_NULL if out of space. Add the
      parameter "mtr_t* init_mtr" for specifying the mini-transaction where
      the page should be initialized, or if this is a "fake allocation"
      (init_mtr=NULL) by btr_mark_freed_leaves(nonfree=TRUE).
      
      btr_page_alloc(): Add the parameter init_mtr, allowing the page to be
      initialized and X-latched in a different mini-transaction than the one
      that is used for the allocation. Invoke btr_page_alloc_low(). If a
      clustered index leaf page was previously freed in mtr, remove it from
      the memo of previously freed pages.
      
      btr_page_free(): Assert that the page is a B-tree page and it has been
      X-latched by the mini-transaction. If the freed page was a leaf page
      of a clustered index, link it by a MTR_MEMO_FREE_CLUST_LEAF marker to
      the mini-transaction.
      
      btr_store_big_rec_extern_fields_func(): Add the parameter alloc_mtr,
      which is NULL (old behaviour in inserts) and the same as local_mtr in
      updates. If alloc_mtr!=NULL, the BLOB pages will be allocated from it
      instead of the mini-transaction that is used for writing the BLOBs.
      
      fsp_alloc_from_free_frag(): Refactored from
      fsp_alloc_free_page(). Allocate the specified page from a partially
      free extent.
      
      fseg_alloc_free_page_low(), fseg_alloc_free_page_general(): Add the
      parameter "mtr_t* init_mtr" for specifying the mini-transaction where
      the page should be initialized, or NULL if this is a "fake allocation"
      that prevents the reuse of a previously freed B-tree page for BLOB
      storage. If init_mtr==NULL, try harder to reallocate the specified page
      and assert that it succeeded.
      
      fsp_alloc_free_page(): Add the parameter "mtr_t* init_mtr" for
      specifying the mini-transaction where the page should be initialized.
      Do not allow init_mtr == NULL, because this function is never to be
      used for "fake allocations".
      
      mtr_t: Add the operation MTR_MEMO_FREE_CLUST_LEAF and the flag
      mtr->freed_clust_leaf for quickly determining if any
      MTR_MEMO_FREE_CLUST_LEAF operations have been posted.
      
      row_ins_index_entry_low(): When columns are being made off-page in
      insert-by-update, invoke btr_mark_freed_leaves(nonfree=TRUE) and pass
      the mini-transaction as the alloc_mtr to
      btr_store_big_rec_extern_fields(). Finally, invoke
      btr_mark_freed_leaves(nonfree=FALSE) to avoid leaking pages.
      
      row_build(): Correct a comment, and add a debug assertion that a
      record that contains NULL BLOB pointers must be a fresh insert.
      
      row_upd_clust_rec(): When columns are being moved off-page, invoke
      btr_mark_freed_leaves(nonfree=TRUE) and pass the mini-transaction as
      the alloc_mtr to btr_store_big_rec_extern_fields(). Finally, invoke
      btr_mark_freed_leaves(nonfree=FALSE) to avoid leaking pages.
      
      buf_reset_check_index_page_at_flush(): Remove. The function
      fsp_init_file_page_low() already sets
      bpage->check_index_page_at_flush=FALSE.
      
      There is a known issue in tablespace extension. If the request to
      allocate a BLOB page leads to the tablespace being extended, crash
      recovery could see BLOB writes to pages that are off the tablespace
      file bounds. This should trigger an assertion failure in fil_io() at
      crash recovery. The safe thing would be to write redo log about the
      tablespace extension to the mini-transaction of the BLOB write, not to
      the mini-transaction of the record update. However, there is no redo
      log record for file extension in the current redo log format.
      
      rb:693 approved by Sunny Bains
      41f229cd
  19. 26 Aug, 2011 1 commit
    • Rohit Kalhans's avatar
      BUG#11878104: FIXES OF BUG 11752963 - 44312 TO BACKPORT TO MYSQL-5.1 · e46b3453
      Rohit Kalhans authored
      Background: Backporting fix for BUG 11752963 to Mysql5.1 branch.
      Problem: Fix of bug 11752963 was only available for trunk and 5.5 branch.
      Partial fix has been pushed to 5.1 branch as well. 
      Fix: backporting the fixes of bug 11752963 to 5.1 branch. 
      1. Made all major changes to make 5.1 branch in line with 5.5 and the trunk.
      2. skipped the partial patch that was already applied to the 5.1 branch. 
      
      sql/rpl_rli.h:
        Made inited Volatile (find inline comments)
      sql/slave.cc:
        backported all changes from the fix of BUG#11752963.
      e46b3453
  20. 25 Aug, 2011 1 commit
    • Tor Didriksen's avatar
      Bug#12856915 VALGRIND FAILURE IN FILESORT/CREATE_SORT_INDEX · 0c7db783
      Tor Didriksen authored
      Suppress the known warnings generated by filesort().
      
      The real fix belongs to worklog 1509:
      Pack values of non-sorted fields in the sort buffer
      (which is basically the same issue, but in an optimization context:
       We are writing the entire sort buffer to disk, 
       including un-used space for varchar columns.)
      
      
      
      mysql-test/valgrind.supp:
        Add new Memcheck suppressions for filesort.
      sql/filesort.cc:
        Remove the ifdef HAVE_purify/bzero code, use valgrind suppressions instead.
      0c7db783
  21. 24 Aug, 2011 1 commit
  22. 22 Aug, 2011 1 commit