1. 17 Jun, 2009 8 commits
  2. 16 Jun, 2009 9 commits
    • Georgi Kodinov's avatar
      Addendum to the fix for bug #44821: move partition dependent test · de713f7e
      Georgi Kodinov authored
      to a test file that guarantees the presence of partition code
      de713f7e
    • Kristofer Pettersson's avatar
      Automerge · 7d98d240
      Kristofer Pettersson authored
      7d98d240
    • Kristofer Pettersson's avatar
      Automerge · 5f205e1a
      Kristofer Pettersson authored
      5f205e1a
    • Martin Hansson's avatar
      Merge · 94723b49
      Martin Hansson authored
      94723b49
    • Kristofer Pettersson's avatar
      Automerge · ccfd18de
      Kristofer Pettersson authored
      ccfd18de
    • Georgi Kodinov's avatar
      automerge · 3e56e6b7
      Georgi Kodinov authored
      3e56e6b7
    • Kristofer Pettersson's avatar
      Bug#43758 Query cache can lock up threads in 'freeing items' state · b22d02ad
      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.
      b22d02ad
    • Martin Hansson's avatar
      Merge · 4c4c7ccc
      Martin Hansson authored
      4c4c7ccc
    • Georgi Kodinov's avatar
      automerge · 47ca83f2
      Georgi Kodinov authored
      47ca83f2
  3. 15 Jun, 2009 12 commits
    • Davi Arnaut's avatar
      Post-merge fix: modify regular expression to better handle 24 hour · 4b691ace
      Davi Arnaut authored
      times (ie: 2:16:20).
      4b691ace
    • Davi Arnaut's avatar
      2a8bad17
    • Georgi Kodinov's avatar
      automerge · 9fe6b8b6
      Georgi Kodinov authored
      9fe6b8b6
    • Staale Smedseng's avatar
      Bug #45387 Information about statement id for prepared · 81b5a391
      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.
      81b5a391
    • Georgi Kodinov's avatar
      automerge · 9a49934a
      Georgi Kodinov authored
      9a49934a
    • Georgi Kodinov's avatar
      automerge · b85b705d
      Georgi Kodinov authored
      b85b705d
    • Georgi Kodinov's avatar
      merged 5.1-main -> 5.1-bugteam · feeb7906
      Georgi Kodinov authored
      feeb7906
    • Georgi Kodinov's avatar
      merged 5.0-main to 5.0-bugteam · e008ba64
      Georgi Kodinov authored
      e008ba64
    • Bernt M. Johnsen's avatar
      nullmerge · a964a711
      Bernt M. Johnsen authored
      a964a711
    • Bernt M. Johnsen's avatar
      f014fa02
    • Georgi Kodinov's avatar
      automerge · 3fe572dd
      Georgi Kodinov authored
      3fe572dd
    • Georgi Kodinov's avatar
      Bug #44810: index merge and order by with low sort_buffer_size · b1560b9f
      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.
      b1560b9f
  4. 12 Jun, 2009 8 commits
    • Davi Arnaut's avatar
      Bug#45100: Incomplete DROP USER in case of SQL_MODE = 'PAD_CHAR_TO_FULL_LENGTH' · 1ad80169
      Davi Arnaut authored
      The SQL-mode PAD_CHAR_TO_FULL_LENGTH could prevent a DROP USER
      statement from privileges associated with the user being dropped.
      What ocurred was that reading from the User and Host fields of
      the tables tables_priv or columns_priv would yield values padded
      with spaces, causing a failure to match a specified user or host 
      ('user' != 'user     ');
      
      The solution is to disregard the PAD_CHAR_TO_FULL_LENGTH mode
      when iterating over and matching values in the privileges tables
      for a DROP USER statement.
      1ad80169
    • Staale Smedseng's avatar
      Bug #45387 Information about statement id for prepared · d3a9323a
      Staale Smedseng authored
      statements missed from general log
      
      A refinement of the test in the previous patch to avoid
      using sleep as a means to ensure that timestamps are
      added to the log entries.
      d3a9323a
    • Georgi Kodinov's avatar
      automerge · 73a13603
      Georgi Kodinov authored
      73a13603
    • Georgi Kodinov's avatar
      fixed the build-tags command · 67384e7f
      Georgi Kodinov authored
      67384e7f
    • Georgi Kodinov's avatar
      automerge · f8a25015
      Georgi Kodinov authored
      f8a25015
    • Georgi Kodinov's avatar
      automerge · 34ec1572
      Georgi Kodinov authored
      34ec1572
    • Patrick Crews's avatar
      Bug#44920: MTR2 is not processing master.opt input properly on Windows · 8f2ff694
      Patrick Crews authored
      Re-enabled tests main.init_connect and rpl.rpl_init_slave.test for non-Windows
      platforms.
      
      Please remove this code upon fixing the bug.
      8f2ff694
    • Georgi Kodinov's avatar
      Bug #45386: Wrong query result with MIN function in field list, · 1f2b5b30
      Georgi Kodinov authored
      WHERE and GROUP BY clause
      
      Loose index scan may use range conditions on the argument of 
      the MIN/MAX aggregate functions to find the beginning/end of 
      the interval that satisfies the range conditions in a single go.
      These range conditions may have open or closed minimum/maximum 
      values. When the comparison returns 0 (equal) the code should 
      check the type of the min/max values of the current interval 
      and accept or reject the row based on whether the limit is 
      open or not.
      There was a wrong composite condition on checking this and it was
      not working in all cases.
      Fixed by simplifying the conditions and reversing the logic.
      1f2b5b30
  5. 11 Jun, 2009 3 commits