1. 16 Jun, 2009 1 commit
    • 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
  2. 12 Jun, 2009 1 commit
  3. 10 Jun, 2009 3 commits
    • Davi Arnaut's avatar
      Merge from mysql-5.0-bugteam. · eac6619f
      Davi Arnaut authored
      eac6619f
    • Davi Arnaut's avatar
      Bug#41190: shared memory connections do not work in Vista, if server started from cmdline · afacea4d
      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.
      afacea4d
    • Philip Stoev's avatar
      Bug #29971 status.test fails · d98dee2c
      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.
      d98dee2c
  4. 09 Jun, 2009 8 commits
  5. 08 Jun, 2009 5 commits
  6. 07 Jun, 2009 1 commit
    • Gleb Shchepa's avatar
      Bug #44886: SIGSEGV in test_if_skip_sort_order() - · ed7f0f30
      Gleb Shchepa authored
                  uninitialized variable used as subscript
      
      Grouping select from a "constant" InnoDB table (a table
      of a single row) joined with other tables caused a crash.
      
      
      mysql-test/r/innodb_mysql.result:
        Added test case for bug bug #44886.
      mysql-test/t/innodb_mysql.test:
        Added test case for bug bug #44886.
      sql/sql_select.cc:
        Bug #44886: SIGSEGV in test_if_skip_sort_order() -
                    uninitialized variable used as subscript
        
        1. The test_if_order_by_key function returned unitialized
           used_key_parts parameter in case of a "constant" InnoDB
           table. Calling function uses this parameter values as
           an array index, thus sometimes it caused a crash.
           The test_if_order_by_key function has been modified
           to set used_key_parts to 0 (no need for ordering).
        
        2. The test_if_skip_sort_order function has been
           modified to accept zero used_key_parts value and
           to prevent an array access by negative index.
      ed7f0f30
  7. 06 Jun, 2009 7 commits
  8. 05 Jun, 2009 14 commits