1. 16 Jun, 2009 12 commits
    • Jonathan Perkin's avatar
      42e0f151
    • Georgi Kodinov's avatar
      version change · 7295c05b
      Georgi Kodinov authored
      7295c05b
    • Georgi Kodinov's avatar
      Addendum to the fix for bug #44821: move partition dependent test · b317a020
      Georgi Kodinov authored
      to a test file that guarantees the presence of partition code
      b317a020
    • Kristofer Pettersson's avatar
      Automerge · 62ac678f
      Kristofer Pettersson authored
      62ac678f
    • Kristofer Pettersson's avatar
      Automerge · 578d3156
      Kristofer Pettersson authored
      578d3156
    • Martin Hansson's avatar
      Merge · ec8944da
      Martin Hansson authored
      ec8944da
    • Kristofer Pettersson's avatar
      Automerge · 95947c96
      Kristofer Pettersson authored
      95947c96
    • Georgi Kodinov's avatar
      automerge · 2ec90aaf
      Georgi Kodinov authored
      2ec90aaf
    • Kristofer Pettersson's avatar
      Bug#43758 Query cache can lock up threads in 'freeing items' state · 1b31401c
      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.
      1b31401c
    • Martin Hansson's avatar
      Merge · b686ee66
      Martin Hansson authored
      b686ee66
    • Georgi Kodinov's avatar
      automerge · bdf67f14
      Georgi Kodinov authored
      bdf67f14
    • Georgi Kodinov's avatar
      fixed version · 0f937ed0
      Georgi Kodinov authored
      0f937ed0
  2. 15 Jun, 2009 12 commits
    • Davi Arnaut's avatar
      Post-merge fix: modify regular expression to better handle 24 hour · 1db058e6
      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.
      1db058e6
    • Davi Arnaut's avatar
      Disable session debugging after its not necessary anymore. · e2b6e764
      Davi Arnaut authored
      mysql-test/t/log_tables_debug.test:
        Remove spurious spaces and disable session debugging.
      e2b6e764
    • Georgi Kodinov's avatar
      automerge · 2d077cf3
      Georgi Kodinov authored
      2d077cf3
    • Staale Smedseng's avatar
      Bug #45387 Information about statement id for prepared · 422e834a
      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.
      422e834a
    • Georgi Kodinov's avatar
      automerge · a3f7fc85
      Georgi Kodinov authored
      a3f7fc85
    • Georgi Kodinov's avatar
      automerge · 2034aa77
      Georgi Kodinov authored
      2034aa77
    • Georgi Kodinov's avatar
      merged 5.1-main -> 5.1-bugteam · 28745d5d
      Georgi Kodinov authored
      28745d5d
    • Georgi Kodinov's avatar
      merged 5.0-main to 5.0-bugteam · 0d2eea42
      Georgi Kodinov authored
      0d2eea42
    • Bernt M. Johnsen's avatar
      nullmerge · cd7b6bb7
      Bernt M. Johnsen authored
      cd7b6bb7
    • Bernt M. Johnsen's avatar
      b0bfc52c
    • Georgi Kodinov's avatar
      automerge · a575bc51
      Georgi Kodinov authored
      a575bc51
    • Georgi Kodinov's avatar
      Bug #44810: index merge and order by with low sort_buffer_size · 10c61461
      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).
      10c61461
  3. 12 Jun, 2009 8 commits
    • Davi Arnaut's avatar
      Bug#45100: Incomplete DROP USER in case of SQL_MODE = 'PAD_CHAR_TO_FULL_LENGTH' · 0d6ded59
      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.
      
      mysql-test/r/sql_mode.result:
        Add test case result for Bug#45100.
      mysql-test/t/sql_mode.test:
        Add test case for Bug#45100.
      sql/sql_acl.cc:
        Clear MODE_PAD_CHAR_TO_FULL_LENGTH before dropping privileges.
      0d6ded59
    • Staale Smedseng's avatar
      Bug #45387 Information about statement id for prepared · f6291bab
      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.
      
      mysql-test/t/log_tables_debug.test:
        New test file. A debug feature is used to ensure that
        log entries are prefixed with a timestamp.
      sql/log.cc:
        A debug feature is implemented to ensure that
        log entries are prefixed with a timestamp.
      f6291bab
    • Georgi Kodinov's avatar
      automerge · 18620db2
      Georgi Kodinov authored
      18620db2
    • Georgi Kodinov's avatar
      fixed the build-tags command · 8a8115bc
      Georgi Kodinov authored
      8a8115bc
    • Georgi Kodinov's avatar
      automerge · a14b6161
      Georgi Kodinov authored
      a14b6161
    • Georgi Kodinov's avatar
      automerge · 00450a5b
      Georgi Kodinov authored
      00450a5b
    • Patrick Crews's avatar
      Bug#44920: MTR2 is not processing master.opt input properly on Windows · 897a7c39
      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.
      897a7c39
    • Georgi Kodinov's avatar
      Bug #45386: Wrong query result with MIN function in field list, · 131c9556
      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.
      
      mysql-test/r/group_min_max.result:
        Bug #45386: test case
      mysql-test/t/group_min_max.test:
        Bug #45386: test case
      sql/opt_range.cc:
        Bug #45386: fix the check whether to use the value if on the
        interval boundry
      131c9556
  4. 11 Jun, 2009 4 commits
  5. 10 Jun, 2009 4 commits
    • Davi Arnaut's avatar
      Merge from mysql-5.0-bugteam. · 51da49d4
      Davi Arnaut authored
      51da49d4
    • Davi Arnaut's avatar
      Bug#41190: shared memory connections do not work in Vista, if server started from cmdline · 980d337b
      Davi Arnaut authored
      Backport to MySQL 5.0/1 fix by Vladislav Vaintroub:
      
      In Vista and later and also in when using terminal services, when
      server is started from  command line, client cannot connect to it
      via shared memory protocol.
      
      This is a regression introduced when  Bug#24731 was fixed.  The
      reason is that client is trying to attach to shared memory using
      global kernel object  namespace (all kernel objects are prefixed
      with Global\). However, server started from the command line in
      Vista and later will create shared memory and events using current
      session namespace. Thus, client is unable to find the server and
      connection fails.
      
      The fix for the client is to first try to find server using "local"
      names  (omitting Global\  prefix) and only if server is not found,
      trying global namespace.
      980d337b
    • Martin Hansson's avatar
      Bug#44821: select distinct on partitioned table returns wrong results · 5659973b
      Martin Hansson authored
      Range analysis did not request sorted output from the storage engine,
      which cause partitioned handlers to process one partition at a time
      while reading key prefixes in ascending order, causing values to be 
      missed. Fixed by always requesting sorted order during range analysis.
      This fix is introduced in 6.0 by the fix for bug no 41136.
      
      mysql-test/r/group_min_max.result:
        Bug#44821: Test result.
      mysql-test/t/group_min_max.test:
        Bug#44821: Test case
      sql/opt_range.cc:
        Bug#44821: Fix.
      5659973b
    • Philip Stoev's avatar
      Bug #29971 status.test fails · 7f55c09c
      Philip Stoev authored
      This test uses SHOW STATUS and the like, which may be unstable in the face
      of logging to table, since the CSV handler is actively executing operations
      and thus incrementing the counters.
      
      Fixed by disabling logging to table for the duration of the test and restoring
      it afterwards. This causes various counters to properly start counting from zero
      and never advance due to CSV operations.
      7f55c09c