1. 05 Nov, 2009 8 commits
  2. 03 Nov, 2009 2 commits
    • Kristofer Pettersson's avatar
    • Vladislav Vaintroub's avatar
      Bug #47423 mtr connects to wrong database · 2377eed3
      Vladislav Vaintroub authored
      The reason for the bug is that mysqtest as well as other client tools
      running in test suite (mysqlbinlog, mysqldump) will first try to connect 
      whatever database has created shared memory with default base name 
      "MySQL" and use this. (Same effect could be seen on Unix if mtr would
      not care to calculate "port" and "socket" parameter).
            
      The fix ensures that all client tools and  running in mtr use unique  
      per-database shared memory base parameters, so there is no possibility
      to clash with already installed one. We use socket name for shared memory 
      base (it's known to be unique). This shared-memory-base is written to the
      MTR config file to the [client] and [mysqld] sections. Fix made also made 
      sure all client tools understand and correctly handle --shared-memory-base.
      Prior to this patch  it was not the case for  mysqltest, mysqlbinlog and 
      mysql_client_test.
            
      All new connections done from mtr scripts via connect() will by default 
      set shared-memory-base. And finally, there is a possibility to force 
      shared memory or pipe connection and overwrite shared memory/pipe base name
      from within mtr scripts via optional PIPE or SHM modifier. This functionality
      was manually backported from 6.0
      (original patch  http://lists.mysql.com/commits/74749)
      2377eed3
  3. 02 Nov, 2009 1 commit
    • Vladislav Vaintroub's avatar
      Bug#47571: idle named pipe connection is unkillable · e0800807
      Vladislav Vaintroub authored
      Bug#31621: Windows server hanging during shutdown using named pipes 
                 and idle connection
                  
      Problem: when idle pipe connection is forcefully closed with KILL
      statement or when the server goes down, thread that is closing connection
      would hang infinitely in CloseHandle(). The reason for the hang is that 
      named pipe operations are performed synchronously. In this mode all IOs
      on pipe are serialized, that is CloseHandle() will not abort ReadFile() 
      in another thread, but wait for ReadFile() to complete.
                  
      The fix implements asynchrnous mode for named pipes, where operation of file
      are not synchronized. Read/Write operation would fire an async IO and wait for
      either IO completion or timeout.
                  
      Note, that with this patch timeouts are properly handled for named pipes.
            
      Post-review: Win32 timeout code has been fixed for named pipes and shared
      memory. We do not store pointer to NET in vio structure, only the read and 
      write timeouts.
      
      
      include/violite.h:
        Add pipe_overlapped to Vio structure for async IO for named pipes.
      sql-common/client.c:
        Use asynchronous pipe IO.
      sql/mysqld.cc:
        Use asynchronous pipe IO.
      vio/vio.c:
        -Refactor timeouts for win32 protocols: shared memory and named pipes.
        Store read/write timeout in VIO structure, instead of storing pointer
        to NET. New function vio_win32_timeout called indirectly via 
        vio_timeout changes these values.
      vio/vio_priv.h:
        Remove vio_ignore_timeout.
        Add vio_win32_timeout to be used for named pipes and shared memory.
      vio/viosocket.c:
        Use async IO for named pipes.
        After issuing IO, wait for either IO completion, pipe_close_event
        or timeout.
                
        Refactor timeouts for named pipe and shared memory.
      e0800807
  4. 31 Oct, 2009 1 commit
  5. 30 Oct, 2009 7 commits
  6. 29 Oct, 2009 2 commits
    • Georgi Kodinov's avatar
      Bug #42116 : Mysql crash on specific query · ac373248
      Georgi Kodinov authored
      Queries with nested outer joins may lead to crashes or 
      bad results because an internal data structure is not handled
      correctly.
      The optimizer uses bitmaps of nested JOINs to determine
      if certain table can be placed at a certain place in the
      JOIN order.
      It does maintain a bitmap describing in which JOINs 
      last placed table is nested.
      When it puts a table it makes sure the bit of every JOIN that
      contains the table in question is set (because JOINs can be nested).
      It does that by recursively setting the bit for the next enclosing
      JOIN when this is the first table in the JOIN and recursively 
      resetting the bit if it's the last table in the JOIN.
      When it removes a table from the join order it should do the
      opposite : recursively unset the bit if it's the only remaining 
      table in this join and and recursively set the bit if it's removing
      the last table of a JOIN.
      There was an error in how the bits was set for the upper levels :
      when removing a table it was setting the bit for all the enclosing 
      nested JOINs even if there were more tables left in the current JOIN
      (which practically means that the upper nested JOINs were not affected).
      Fixed by stopping the recursion at the relevant level.
      
      mysql-test/r/join.result:
        Bug #42116: test case
      mysql-test/t/join.test:
        Bug #42116: test case
      sql/sql_select.cc:
        Bug #41116: don't go up and set the bits if more tables in
        at the current JOIN level
      ac373248
    • unknown's avatar
      Bug #46828 rpl_get_master_version_and_clock fails on PB-2 · 09668c01
      unknown authored
      The 'rpl_get_master_version_and_clock' test verifies if the slave I/O 
      thread tries to reconnect to master when it tries to get the values of 
      the UNIX_TIMESTAMP, SERVER_ID from master under network disconnection. 
      So the master server is restarted for making the transient network 
      disconnection. Restarting master server can bring two problems as following:
      
      1. The time out error is encountered sporadically. The slave I/O thread tries 
         to reconnect master ten times, which is set in my.cnf. So in the test 
         framework sporadically the slave I/O thread really stoped when it can't 
         reconnect to master in the ten times successfully before the master starts, 
         then the time out error will be encountered while waiting for the slave to 
         start.
      
      2. These warnings and errors are produced in server log file when 
         the slave I/O thread tries to get the values of the UNIX_TIMESTAMP, 
         SERVER_ID from master under the transient network disconnection.
      
      To fix problem 1, increase the master retry count to sixty times, 
      so that the slave I/O thread has enough time to reconnect master 
      successfully.
      To fix problem 2, suppress these warnings and errors by mtr suppression, 
      because they are expected.
      
      
      mysql-test/suite/rpl/t/rpl_get_master_version_and_clock-slave.opt:
        Added the *.opt file for increasing master retry count to 
        sixty times.
      mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test:
        Added mtr suppression for suppressing warnings and errors 
        in server log file.
      09668c01
  7. 28 Oct, 2009 4 commits
    • Konstantin Osipov's avatar
      A patch and a test case for · f130de4f
      Konstantin Osipov authored
      Bug#46539 Various crashes on INSERT IGNORE SELECT + SELECT FOR UPDATE.
      
      If a transaction was rolled back inside InnoDB due to a deadlock
      or lock wait timeout, and the statement had IGNORE clause,
      the server could crash at the end of the statement or on shutdown.
      
      This was caused by the error handling infrastructure's attempt to 
      ignore a non-ignorable error.
      
      When a transaction rollback request is raised, switch off 
      current_select->no_error flag, so that the following error
      won't be ignored.
      
      Instead, we could add !thd->is_fatal_sub_stmt_error to
      my_message_sql(), but since in write_record() we switch
      off no_error, the same approach is used in 
      thd_mark_transaction_to_rollback().
      
      @todo: call thd_mark_transaction_to_rollback() from 
      handler::print_error(), then we can easily make sure
      that the error reported by print_error is not ignored.
      
      mysql-test/r/innodb_lock_wait_timeout_1.result:
        Update results (Bug#46539).
      mysql-test/t/innodb_lock_wait_timeout_1.test:
        Add a test case for Bug#46539
      sql/sql_class.cc:
        When a transaction rollback request is raised, switch of 
        current_select->no_error flag, so that the following error
        won't be ignored.
      f130de4f
    • Sergey Glukhov's avatar
      5.0-bugteam->5.1-bugteam merge · 97f4ca3a
      Sergey Glukhov authored
      97f4ca3a
    • Sergey Glukhov's avatar
      Bug#41049 does syntax "grant" case insensitive? · 0b10509e
      Sergey Glukhov authored
      test result fix
      
      mysql-test/suite/funcs_1/r/is_columns_mysql.result:
        test result fix
      mysql-test/suite/funcs_1/r/is_statistics.result:
        test result fix
      0b10509e
    • unknown's avatar
      Bug #34777 mysqlbinlog: --help output for --base64-output is hard to understand · 30625323
      unknown authored
      Append the description of the 'decode-rows' value for --base64-output argument.
      30625323
  8. 27 Oct, 2009 15 commits
    • Sergey Vojtovich's avatar
      Merge 5.1-bugteam -> 5.1-bugteam-local. · a5b5db32
      Sergey Vojtovich authored
      a5b5db32
    • Sergey Vojtovich's avatar
      A follow-up to fix for · 57800740
      Sergey Vojtovich authored
      BUG#47073 - valgrind errs, corruption,failed repair of partition,
                  low myisam_sort_buffer_size
      
      Fixed race conditions discovered with the provided test case and
      stabilized test case.
      
      include/myisam.h:
        Serialize submission of messages from multi-threaded REPAIR.
      mysql-test/r/myisam.result:
        REPAIR output highly depend on threads activity. Disabled
        result log to make test case deterministic.
      mysql-test/t/myisam.test:
        REPAIR output highly depend on threads activity. Disabled
        result log to make test case deterministic.
      storage/myisam/ha_myisam.cc:
        Serialize submission of messages from multi-threaded REPAIR.
      storage/myisam/mi_check.c:
        Serialize submission of messages from multi-threaded REPAIR.
      storage/myisam/sort.c:
        Only master thread is allowed to detach write cache from
        the share.
      57800740
    • Tatiana A. Nurnberg's avatar
      auto-merge · 754dee8e
      Tatiana A. Nurnberg authored
      754dee8e
    • Georgi Kodinov's avatar
      merge · b611592b
      Georgi Kodinov authored
      b611592b
    • Tatiana A. Nurnberg's avatar
      Bug#46586: When using the plugin interface the type "set" for options caused a crash. · 0ba101d4
      Tatiana A. Nurnberg authored
      "What do you mean, there's a bug? There isn't even code!"
      
      There was some token code for plug-in variables of the SET type,
      but clearly this never worked, or was subject to massive bit rot
      since. Bug-fixes ... fail-safes ... tests -- fais au mieux, mon chou!
      
      mysys/my_getopt.c:
        SETs set-up should set up a default value, but no min/max bounding.
      mysys/typelib.c:
        fail-safe requested by serg: don't try to skip separator when we're
        already at end of string.
      sql/sql_plugin.cc:
        check_func_set:
        Initialize error_len as find_set() will only update it on error,
        and we're using the value to see whether an error has occurred (!= 0),
        so we'd better not have a random val in there.
        
        value_ptr:
        There's no guarantee we're handed string lengths, so play it safe!
        Use prepared string lengths where possible for minimum speed gain,
        otherwise determine on the fly!
      0ba101d4
    • Georgi Kodinov's avatar
      merge from 4.1 · a7d26e10
      Georgi Kodinov authored
      a7d26e10
    • Sergey Glukhov's avatar
      null merge · 49c7d8f7
      Sergey Glukhov authored
      49c7d8f7
    • Sergey Glukhov's avatar
      automerge · 3823ac32
      Sergey Glukhov authored
      3823ac32
    • Sergey Glukhov's avatar
      automerge · f4d01357
      Sergey Glukhov authored
      f4d01357
    • Sergey Glukhov's avatar
      5.0-bugteam->5.1-bugteam merge · f554a3c0
      Sergey Glukhov authored
      f554a3c0
    • Alexander Nozdrin's avatar
      cd56f6ff
    • Tatiana A. Nurnberg's avatar
      auto-merge · 6ceaf234
      Tatiana A. Nurnberg authored
      6ceaf234
    • Sergey Vojtovich's avatar
      749ffc17
    • Sergey Vojtovich's avatar
      An addition to fix for · eeee9117
      Sergey Vojtovich authored
      BUG#41597 - After rename of user, there are additional grants
                  when grants are reapplied.
      
      Fixed build failure on Windows. Added missing cast.
      
      sql/sql_acl.cc:
        Fixed build failure on Windows. Added missing cast.
      eeee9117
    • Sergey Glukhov's avatar
      Bug#41049 does syntax "grant" case insensitive? · f0a7ff84
      Sergey Glukhov authored
      Problem 1:
      column_priv_hash uses utf8_general_ci collation
      for the key comparison. The key consists of user name,
      db name and table name. Thus user with privileges on table t1
      is able to perform the same operation on T1
      (the similar situation with user name & db name, see acl_cache).
      So collation which is used for column_priv_hash and acl_cache
      should be case sensitive.
      The fix:
      replace system_charset_info with my_charset_utf8_bin for
      column_priv_hash and acl_cache
      Problem 2:
      The same situation with proc_priv_hash, func_priv_hash,
      the only difference is that Routine name is case insensitive.
      So the fix is to use my_charset_utf8_bin for
      proc_priv_hash & func_priv_hash and convert routine name into lower
      case before writing the element into the hash and
      before looking up the key.
      Additional fix: mysql.procs_priv Routine_name field collation
      is changed to utf8_general_ci.
      It's necessary for REVOKE command
      (to find a field by routine hash element values).
      Note: 
      It's safe for lower-case-table-names mode too because
      db name & table name are converted into lower case
      (see GRANT_NAME::GRANT_NAME).
      
      
      mysql-test/include/have_case_insensitive_fs.inc:
        test case
      mysql-test/r/case_insensitive_fs.require:
        test case
      mysql-test/r/grant_lowercase_fs.result:
        test result
      mysql-test/r/lowercase_fs_off.result:
        test result
      mysql-test/r/ps_grant.result:
        test result
      mysql-test/r/system_mysql_db.result:
        changed Routine_name field collation to case insensitive
      mysql-test/t/grant_lowercase_fs.test:
        test case
      mysql-test/t/lowercase_fs_off.test:
        test case
      scripts/mysql_system_tables.sql:
        changed Routine_name field collation to case insensitive
      scripts/mysql_system_tables_fix.sql:
        changed Routine_name field collation to case insensitive
      sql/sql_acl.cc:
        Problem 1:
        column_priv_hash uses utf8_general_ci collation
        for the key comparison. The key consists of user name,
        db name and table name. Thus user with privileges on table t1
        is able to perform the same operation on T1
        (the similar situation with user name & db name, see acl_cache).
        So collation which is used for column_priv_hash and acl_cache
        should be case sensitive.
        The fix:
        replace system_charset_info with my_charset_utf8_bin for
        column_priv_hash and acl_cache
        Problem 2:
        The same situation with proc_priv_hash, func_priv_hash,
        the only difference is that Routine name is case insensitive.
        So the fix is to use my_charset_utf8_bin for
        proc_priv_hash & func_priv_hash and convert routine name into lower
        case before writing the element into the hash and
        before looking up the key.
        Additional fix: mysql.procs_priv Routine_name field collation
        is changed to utf8_general_ci.
        It's necessary for REVOKE command
        (to find a field by routine hash element values).
        Note: 
        It's safe for lower-case-table-names mode too because
        db name & table name are converted into lower case
        (see GRANT_NAME::GRANT_NAME).
      f0a7ff84