1. 18 Jun, 2009 1 commit
  2. 17 Jun, 2009 17 commits
  3. 16 Jun, 2009 10 commits
    • Martin Hansson's avatar
      Bug#45168: assertion with convert() and empty set value · aa8677bc
      Martin Hansson authored
            
      The assertion in String::copy was added in order to avoid
      valgrind errors when the destination was the same as the source.
      Eased restriction to allow for the case when str == NULL.
      
      
      mysql-test/r/func_set.result:
        Bug#45168: Test result
      mysql-test/t/func_set.test:
        Bug#45168: Test case
      sql/item_strfunc.cc:
        Bug#45168: Code cleanup and grammar correction in comment
      sql/sql_string.cc:
        Bug#45168: Fix
      aa8677bc
    • Georgi Kodinov's avatar
      Addendum to the fix for bug #44821: move partition dependent test · 48d911e7
      Georgi Kodinov authored
      to a test file that guarantees the presence of partition code
      48d911e7
    • Kristofer Pettersson's avatar
      Automerge · 86c03462
      Kristofer Pettersson authored
      86c03462
    • Kristofer Pettersson's avatar
      Automerge · 19d5d486
      Kristofer Pettersson authored
      19d5d486
    • Martin Hansson's avatar
      Merge · 00900db5
      Martin Hansson authored
      00900db5
    • Kristofer Pettersson's avatar
      Automerge · b9e1ee63
      Kristofer Pettersson authored
      b9e1ee63
    • Georgi Kodinov's avatar
      automerge · 84241af5
      Georgi Kodinov authored
      84241af5
    • Kristofer Pettersson's avatar
      Bug#43758 Query cache can lock up threads in 'freeing items' state · 02e5ad98
      Kristofer Pettersson authored
      Early patch submitted for discussion.
      
      It is possible for more than one thread to enter the condition
      in query_cache_insert(), but the condition predicate is to
      signal one thread each time the cache status changes between
      the following states: {NO_FLUSH_IN_PROGRESS,FLUSH_IN_PROGRESS,
      TABLE_FLUSH_IN_PROGRESS}
      
      Consider three threads THD1, THD2, THD3
      
         THD2: select ... => Got a writer in ::store_query
         THD3: select ... => Got a writer in ::store_query
         THD1: flush tables => qc status= FLUSH_IN_PROGRESS;
                            new writers are blocked.
         THD2: select ... => Still got a writer and enters cond in
                             query_cache_insert
         THD3: select ... => Still got a writer and enters cond in
                             query_cache_insert
         THD1: flush tables => finished and signal status change.
         THD2: select ... => Wakes up and completes the insert.
         THD3: select ... => Happily waiting for better times. Why hurry?
      
      This patch is a refactoring of this lock system. It introduces four new methods:
         Query_cache::try_lock()
         Query_cache::lock()
         Query_cache::lock_and_suspend()
         Query_cache::unlock()
      
      This change also deprecates wait_while_table_flush_is_in_progress(). All threads are
      queued and put on a conditional wait. On each unlock the queue is signalled. This resolve
      the issues with left over threads. To assure that no threads are spending unnecessary
      time waiting a signal broadcast is issued every time a lock is taken before a full
      cache flush.
      
      mysql-test/r/query_cache_debug.result:
        * Added test case for bug43758
      mysql-test/t/query_cache_debug.test:
        * Added test case for bug43758
      sql/sql_cache.cc:
        * Replaced calls to wait_while_table_flush_is_in_progress() with
          calls to try_lock(), lock_and_suspend() and unlock().
        * Renamed enumeration Cache_status to Cache_lock_status.
        * Renamed enumeration items to UNLOCKED, LOCKED_NO_WAIT and LOCKED.
          If the LOCKED_NO_WAIT lock type is used to lock the query cache, other
          threads using try_lock() will fail to acquire the lock.
          This is useful if the query cache is temporary disabled due to 
          a full table flush.
      sql/sql_cache.h:
        * Replaced calls to wait_while_table_flush_is_in_progress() with
          calls to try_lock(), lock_and_suspend() and unlock().
        * Renamed enumeration Cache_status to Cache_lock_status.
        * Renamed enumeration items to UNLOCKED, LOCKED_NO_WAIT and LOCKED.
          If the LOCKED_NO_WAIT lock type is used to lock the query cache, other
          threads using try_lock() will fail to acquire the lock.
          This is useful if the query cache is temporary disabled due to 
          a full table flush.
      02e5ad98
    • Martin Hansson's avatar
      Merge · 5d44b2f3
      Martin Hansson authored
      5d44b2f3
    • Georgi Kodinov's avatar
      automerge · 4cd97cc7
      Georgi Kodinov authored
      4cd97cc7
  4. 15 Jun, 2009 12 commits
    • Davi Arnaut's avatar
      Post-merge fix: modify regular expression to better handle 24 hour · 3cc3aa7d
      Davi Arnaut authored
      times (ie: 2:16:20).
      
      mysql-test/r/log_tables_debug.result:
        Update test case result.
      mysql-test/t/log_tables_debug.test:
        Skip spaces and handle case when a leading zero is not printed.
      3cc3aa7d
    • Davi Arnaut's avatar
      Disable session debugging after its not necessary anymore. · cebad07c
      Davi Arnaut authored
      mysql-test/t/log_tables_debug.test:
        Remove spurious spaces and disable session debugging.
      cebad07c
    • Georgi Kodinov's avatar
      automerge · e7bec655
      Georgi Kodinov authored
      e7bec655
    • Staale Smedseng's avatar
      Bug #45387 Information about statement id for prepared · 37a5f2d4
      Staale Smedseng authored
      statements missed from general log
      
      A FLUSH LOGS is added to ensure that the log info hits
      the file before attempting to process.
      
      mysql-test/t/log_tables_debug.test:
        A FLUSH LOGS is added, and in the event that a match is
        not found, <FILE> is reset and the contents of the log
        file is dumped for debugging purposes.
      37a5f2d4
    • Georgi Kodinov's avatar
      automerge · 77899990
      Georgi Kodinov authored
      77899990
    • Georgi Kodinov's avatar
      automerge · 04483bcd
      Georgi Kodinov authored
      04483bcd
    • Georgi Kodinov's avatar
      merged 5.1-main -> 5.1-bugteam · 8e624524
      Georgi Kodinov authored
      8e624524
    • Georgi Kodinov's avatar
      merged 5.0-main to 5.0-bugteam · 9d0d363b
      Georgi Kodinov authored
      9d0d363b
    • Bernt M. Johnsen's avatar
      nullmerge · 32b63110
      Bernt M. Johnsen authored
      32b63110
    • Bernt M. Johnsen's avatar
      d6a9e61c
    • Georgi Kodinov's avatar
      automerge · f2646970
      Georgi Kodinov authored
      f2646970
    • Georgi Kodinov's avatar
      Bug #44810: index merge and order by with low sort_buffer_size · 6df6c8ee
      Georgi Kodinov authored
      crashes server!
      
      The problem affects the scenario when index merge is followed by a filesort
      and the sort buffer is not big enough for all the sort keys.
      In this case the filesort function will read the data to the end through the 
      index merge quick access method (and thus closing the cursor etc), 
      but will leave the pointer to the quick select method in place.
      It will then create a temporary file to hold the results of the filesort and
      will add it as a sort output file (in sort.io_cache).
      Note that filesort will copy the original 'sort' structure in an automatic
      variable and restore it after it's done.
      As a result at exiting filesort() we have a sort.io_cache filled in and 
      nothing else (as a result of close of the cursors at end of reading data 
      through index merge).
      Now create_sort_index() will note that there is a select and will clean it up
      (as it's been used already by filesort() reading the data in). While doing that
      a special case in the index merge destructor will clean up the sort.io_cache,
      assuming it's an output of the index merge method and is not needed anymore.
      As a result the code that tries to read the data back from the filesort output 
      will get no data in both memory and disk and will crash.
            
      Fixed similarly to how filesort() does it : by copying the sort.io_cache structure
      to a local variable, removing the pointer to the io_cache (so that it's not freed 
      by QUICK_INDEX_MERGE_SELECT::~QUICK_INDEX_MERGE_SELECT) and restoring the original 
      structure (together with the valid pointer) after the cleanup is done.
      This is a safe thing to do because all the structures are already cleaned up by
      hitting the end of the index merge's read method (QUICK_INDEX_MERGE_SELECT::get_next()) 
      and the cleanup code being written in a way that tolerates repeating cleanups.
      
      mysql-test/r/index_merge.result:
        Bug #44810: test case
      mysql-test/t/index_merge.test:
        Bug #44810: test case
      sql/sql_select.cc:
        Bug #44810: preserve the io_cache produced by filesort while cleaning up
        the index merge quick access method (QUICK_INDEX_MERGE_SELECT).
      6df6c8ee