1. 15 Mar, 2012 5 commits
    • Inaam Rana's avatar
      merge from 5.1 · 2ceb1177
      Inaam Rana authored
      2ceb1177
    • Inaam Rana's avatar
      Bug#13537504 VALGRIND: COND. JUMP/MOVE DEPENDS ON UNINITIALISED VALUES · a8217b7c
      Inaam Rana authored
      IN OS_THREAD_EQ
      
      rb://977
      approved by: Marko Makela
      
      rw_lock::writer_thread field contains the thread id of current x-holder
      or wait-x thread. This field is un-initialized at lock creation and is
      written to for the first time when an attempt is made to x-lock.
      
      Current code considers ::writer_thread as valid memory region only when
      the lock is held in x-mode (or there is an x-waiter). This is an
      overkill and it generates valgrind warnings.
      
      The fix is to consider ::writer_thread as valid memory region once it
      has been written to.
      
      Reasoning:
      ==========
      The ::writer_thread can be safely considered valid because:
      
      * We only ever do comparison with current calling threads id.
      * We only ever do comparison when ::recursive flag is set
      * We always unset ::recursive flag in x-unlock
      * Same thread cannot be unlocking and attempting to lock at the same
      time
      * thread_id recycling is not an issue because before an id is recycled
      the thread must leave innodb meaning it must release all locks meaning
      it must unset ::recursive flag.
      a8217b7c
    • Jon Olav Hauglid's avatar
      Bug#13833438: ERROR CODES MUST HAVE SAME VALUE ACROSS MYSQL VERSIONS · 1f5051d9
      Jon Olav Hauglid authored
      Pre-requisite patch.
      Add end-of-file marker to 5.5 version of errmsg-utf8.txt.
      1f5051d9
    • Dmitry Shulga's avatar
      This patch fixes the bug#13737343 (formerly known as 64374): XA TRANSACTIONS · 2b68b4bc
      Dmitry Shulga authored
      AND SAVEPOINT.
            
      The bug was introduced by the patch for bug#11766752. This patch sets too
      strong condition on XA state for SAVEPOINT statement that disallows its
      execution during XA transaction. But since the statement SAVEPOINT doesn't
      imply implicit commit we can allow its handling during XA transaction.
      
      The patch explicitly check for transaction state against states XA_NOTR
      and XA_ACTIVE for which the handling of statement SAVEPOINT for XA
      transaction is allowed.
      
      mysql-test/t/xa.test:
        Testcase was adjusted for bug#13737343. Now SAVEPOINT is allowed for XA
        transactions in ACTIVE state.
      2b68b4bc
    • unknown's avatar
  2. 14 Mar, 2012 5 commits
    • Mattias Jonsson's avatar
      merge of bug#1364811 into mysql-5.5 · 5584e61f
      Mattias Jonsson authored
      5584e61f
    • Mattias Jonsson's avatar
      bug#13694811 · 58b21478
      Mattias Jonsson authored
      Updated code comments according to reviewers requests.
      58b21478
    • Tor Didriksen's avatar
      Bug#13832772 ASSERTION `THD->IS_ERROR() || KILL_ERRNO' · a930e474
      Tor Didriksen authored
      We are trying to sort a lot of text/blob fields, 
      so the buffer is indeed too small.
      Memory available = thd->variables.sortbuff_size = 262144
      min_sort_memory = param.sort_length*MERGEBUFF2 = 292245
      So the decision to abort the query is correct.
      
      filesort() calls my_error(), the error is reported.
      But, since we have DELETE IGNORE ... the error is converted to a warning by
      THD::raise_condition
      
      filesort currently expects an error to be recorded in the THD diagnostics
      area.
      If we lift this restriction (remove the assert) we end up in the familiar
      void Protocol::end_statement()
        default:
          DBUG_ASSERT(0);
      
      The solution seems to be to call my_error(ME_FATALERROR) in filesort,
      so that the error is propagated as an error rather than a warning.
      
      
      mysql-test/r/filesort_debug.result:
        New test case.
      mysql-test/t/filesort_debug.test:
        New test case.
      a930e474
    • unknown's avatar
      8f9f40aa
    • Chaithra Gopalareddy's avatar
      Bug#12626844 : WE ARE NOT CHECKING VIEW TABLE NAMES · e48afab4
      Chaithra Gopalareddy authored
                     ENOUGH - CONCAT() HACKS. ALSO WRONG
                     ERROR MESSAGE WHILE TRYING TO CREATE
                     A VIEW ON A NON EXISTING DATABASE
      
      PROBLEM:
      The first part of the problem is concluded as not a
      bug, as 'concat' is not a reserved word and it is
      completely valid to create a view with the name
      'concat'.
      
      The second issue is, while trying to create a view on
      a non existing database, we are not giving a proper error
      message.
      
      FIX:
      We have added a check for the database existence while
      trying to create a view. This check would give an error
      as 'unknown database' when the database does not exist.
      
      This patch is a backport of the patch for Bug#13601606
      
      
      mysql-test/r/view.result:
        Added test case result of Bug#12626844
      mysql-test/t/view.test:
        Added test case for Bug#12626844
      sql/sql_view.cc:
        Added a check for database existence in mysql_create_view
      e48afab4
  3. 12 Mar, 2012 10 commits
    • Luis Soares's avatar
      BUG#12400313 · 4977b60e
      Luis Soares authored
      Automerging from mysql-5.1.
      4977b60e
    • Luis Soares's avatar
      BUG#12400313 · 7f84e70b
      Luis Soares authored
      Adding missing sync_slave_with_master to the test case.
      7f84e70b
    • Luis Soares's avatar
      BUG#12400313 · 66a306e6
      Luis Soares authored
      Fixing waiting condition. "enter_cond" text changed in 5.5+ (when the SQL thread
      is waiting for more events).
      66a306e6
    • Luis Soares's avatar
      BUG#12400313 · 97947501
      Luis Soares authored
      Automerge changes to the test case from mysql-5.1.
      97947501
    • Luis Soares's avatar
      Automerge merge with latest mysql-5.1. · a68e3d26
      Luis Soares authored
      a68e3d26
    • Luis Soares's avatar
      BUG#12400313 · 9eedf9b4
      Luis Soares authored
      Hardening the test case:
        - including a diff_tables at the end.
        - increasing the tolerance on the relay limit size.
      9eedf9b4
    • Luis Soares's avatar
      BUG#12400313 · 549a5fa2
      Luis Soares authored
      Manual merge from mysql-5.1 into mysql-5.5.
      
      CONFLICTS
      =========
        Text conflict in sql/log.cc
        Text conflict in sql/slave.cc
      549a5fa2
    • Luis Soares's avatar
      BUG#12400313 · 28e71956
      Luis Soares authored
      Automerge with mysql-5.1.
      28e71956
    • Inaam Rana's avatar
      Bug#13789853 SHOW ENGINE INNODB STATUS HANGS DUE TO EXCESSIVE WORK · e56854d8
      Inaam Rana authored
      IN LOCK_VALIDATE()
      
      rb://917
      approved by: Marko Makela
      
      In lock_validate() the limit is used to release the kernel_mutex during
      the validation, to obey the latching order.
      If we do the limit++ then we are rechecking the same lock most times on
      each iteration because limit is being incremented by one and
      <space, page_no> will nearly always be > limit. If we set the limit
      correctly to (space, page+1) then we are actually making progress
      during the iteration.
      e56854d8
    • Luis Soares's avatar
      BUG#12400313 RELAY_LOG_SPACE_LIMIT IS NOT WORKING IN MANY CASES · 4a6c4d86
      Luis Soares authored
      BUG#64503: mysql frequently ignores --relay-log-space-limit
      
      When the SQL thread goes to sleep, waiting for more events, it sets
      the flag ignore_log_space_limit to true. This gives the IO thread a
      chance to queue some more events and ultimately the SQL thread will be
      able to purge the log once it is rotated. By then the SQL thread
      resets the ignore_log_space_limit to false. However, between the time
      the SQL thread has set the ignore flag and the time it resets it, the
      IO thread will be queuing events in the relay log, possibly going way
      over the limit.
      
      This patch makes the IO and SQL thread to synchronize when they reach
      the space limit and only ask for one event at a time. Thus the SQL
      thread sets ignore_log_space_limit flag and the IO thread resets it to
      false everytime it processes one more event. In addition, everytime
      the SQL thread processes the next event, and the limit has been
      reached, it checks if the IO thread should rotate. If it should, it
      instructs the IO thread to rotate, giving the SQL thread a chance to
      purge the logs (freeing space). Finally, this patch removes the
      resetting of the ignore_log_space_limit flag from purge_first_log,
      because this is now reset by the IO thread every time it processes the
      next event when the limit has been reached.
      
      If the SQL thread is in a transaction, it cannot purge so, there is no
      point in asking the IO thread to rotate. The only thing it can do is
      to ask for more events until the transaction is over (then it can ask
      the IO to rotate and purge the log right away). Otherwise, there would
      be a deadlock (SQL would not be able to purge and IO thread would not
      be able to queue events so that the SQL would finish the transaction).
      4a6c4d86
  4. 09 Mar, 2012 3 commits
  5. 08 Mar, 2012 4 commits
    • Marko Mäkelä's avatar
      Merge mysql-5.1 to mysql-5.5. · 26ab3d12
      Marko Mäkelä authored
      26ab3d12
    • Marko Mäkelä's avatar
    • Marko Mäkelä's avatar
      Merge mysql-5.1 to mysql-5.5. · 9747c33b
      Marko Mäkelä authored
      9747c33b
    • Marko Mäkelä's avatar
      Bug#13807811 BTR_PCUR_RESTORE_POSITION() CAN SKIP A RECORD · c5511bdf
      Marko Mäkelä authored
      This bug has been there at least since MySQL 4.0.9. (Before 4.0.9, the
      code probably was even more severely broken.)
      
      btr_pcur_restore_position(): When cursor restoration fails, before
      invoking btr_pcur_store_position() move to the previous or next record
      unless cursor->rel_pos==BTR_PCUR_ON or the record was not a user
      record.
      
      This bug can cause skipped records when btr_pcur_store_position() is
      called on the last record of a page. A symptom would be record count
      mismatch in CHECK TABLE, or failure to find a record to delete-mark or
      update or purge. The following operations should be affected by the
      bug:
      
      * row_search_for_mysql(): SELECT, UPDATE, REPLACE, CHECK TABLE,
        (almost anything else than INSERT)
      
      * foreign key CASCADE operations
      
      * row_merge_read_clustered_index(): index creation (since MySQL 5.1
        InnoDB Plugin)
      
      * multi-threaded purge (after MySQL 5.5): not sure, but it might fail
        to purge some records
      
      Not all callers of btr_pcur_restore_position() should be affected.
      Anything that asserts or checks that restoration succeeds is
      unaffected. For example, cursor restoration on the change buffer tree
      should always succeed, because access is being protected by additional
      latches. Likewise, rollback, or any code accesses data dictionary
      tables while holding dict_sys->mutex should be safe.
      
      rb:967 approved by Jimmy Yang
      c5511bdf
  6. 06 Mar, 2012 3 commits
  7. 29 Feb, 2012 4 commits
    • Mattias Jonsson's avatar
      merge from mysql-5.1 · 645bddec
      Mattias Jonsson authored
      645bddec
    • Mattias Jonsson's avatar
      merge into mysql-5.1 · 937ee6b7
      Mattias Jonsson authored
      937ee6b7
    • Praveenkumar Hulakund's avatar
      Bug#12601974 - STORED PROCEDURE SQL_MODE=NO_BACKSLASH_ESCAPES IGNORED AND BREAKS REPLICATION · cf2f9780
      Praveenkumar Hulakund authored
      Analysis:
      ========================
      sql_mode "NO_BACKSLASH_ESCAPES": When user want to use backslash as character input,
      instead of escape character in a string literal then sql_mode can be set to 
      "NO_BACKSLASH_ESCAPES". With this mode enabled, backslash becomes an ordinary 
      character like any other. 
      
      SQL_MODE set applies to the current client session. And while creating the stored 
      procedure, MySQL stores the current sql_mode and always executes the stored 
      procedure in sql_mode stored with the Procedure, regardless of the server SQL 
      mode in effect when the routine is invoked.  
      
      In the scenario (for which bug is reported), the routine is created with 
      sql_mode=NO_BACKSLASH_ESCAPES. And routine is executed with the invoker sql_mode
      is "" (NOT SET) by executing statement "call testp('Axel\'s')".
      Since invoker sql_mode is "" (NOT_SET), the '\' in 'Axel\'s'(argument to function)
      is considered as escape character and column "a" (of table "t1") values are 
      updated with "Axel's". The binary log generated for above update operation is as below,
      
        set sql_mode=XXXXXX (for no_backslash_escapes)
        update test.t1 set a= NAME_CONST('var',_latin1'Axel\'s' COLLATE 'latin1_swedish_ci');
      
      While logging stored procedure statements, the local variables (params) used in
      statements are replaced with the NAME_CONST(var_name, var_value) (Internal function) 
      (http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html#function_name-const)
      
      On slave, these logs are applied. NAME_CONST is parsed to get the variable and its
      value. Since, stored procedure is created with sql_mode="NO_BACKSLASH_ESCAPES", the sql_mode
      is also logged in. So that at slave this sql_mode is set before executing the statements
      of routine.  So at slave, sql_mode is set to "NO_BACKSLASH_ESCAPES" and then while
      parsing NAME_CONST of string variable, '\' is considered as NON ESCAPE character
      and parsing reported error for "'" (as we have only one "'" no backslash). 
      
      At slave, parsing was proper with sql_mode "NO_BACKSLASH_ESCAPES".
      But above error reported while writing bin log, "'" (of Axel's) is escaped with
      "\" character. Actually, all special characters (n, r, ', ", \, 0...) are escaped
      while writing NAME_CONST for string variable(param, local variable) in bin log 
      irrespective of "NO_BACKSLASH_ESCAPES" sql_mode. So, basically, the problem is 
      that logging string parameter does not take into account sql_mode value.
      
      Fix:
      ========================
      So when sql_mode is set to "NO_BACKSLASH_ESCAPES", escaping  characters as 
      (n, r, ', ", \, 0...) should be avoided. To do so, added a check to not to
      escape such characters while writing NAME_CONST for string variables in bin 
      log. 
      And when sql_mode is set to NO_BACKSLASH_ESCAPES, quote character "'" is
      represented as ''.
      http://dev.mysql.com/doc/refman/5.6/en/string-literals.html (There are several 
      ways to include quote characters within a string: )
      
      cf2f9780
    • Praveenkumar Hulakund's avatar
      Bug#12601974 - STORED PROCEDURE SQL_MODE=NO_BACKSLASH_ESCAPES IGNORED AND BREAKS REPLICATION · c22c9270
      Praveenkumar Hulakund authored
      Analysis:
      ========================
      sql_mode "NO_BACKSLASH_ESCAPES": When user want to use backslash as character input,
      instead of escape character in a string literal then sql_mode can be set to 
      "NO_BACKSLASH_ESCAPES". With this mode enabled, backslash becomes an ordinary 
      character like any other. 
      
      SQL_MODE set applies to the current client session. And while creating the stored 
      procedure, MySQL stores the current sql_mode and always executes the stored 
      procedure in sql_mode stored with the Procedure, regardless of the server SQL 
      mode in effect when the routine is invoked.  
      
      In the scenario (for which bug is reported), the routine is created with 
      sql_mode=NO_BACKSLASH_ESCAPES. And routine is executed with the invoker sql_mode
      is "" (NOT SET) by executing statement "call testp('Axel\'s')".
      Since invoker sql_mode is "" (NOT_SET), the '\' in 'Axel\'s'(argument to function)
      is considered as escape character and column "a" (of table "t1") values are 
      updated with "Axel's". The binary log generated for above update operation is as below,
      
        set sql_mode=XXXXXX (for no_backslash_escapes)
        update test.t1 set a= NAME_CONST('var',_latin1'Axel\'s' COLLATE 'latin1_swedish_ci');
      
      While logging stored procedure statements, the local variables (params) used in
      statements are replaced with the NAME_CONST(var_name, var_value) (Internal function) 
      (http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html#function_name-const)
      
      On slave, these logs are applied. NAME_CONST is parsed to get the variable and its
      value. Since, stored procedure is created with sql_mode="NO_BACKSLASH_ESCAPES", the sql_mode
      is also logged in. So that at slave this sql_mode is set before executing the statements
      of routine.  So at slave, sql_mode is set to "NO_BACKSLASH_ESCAPES" and then while
      parsing NAME_CONST of string variable, '\' is considered as NON ESCAPE character
      and parsing reported error for "'" (as we have only one "'" no backslash). 
      
      At slave, parsing was proper with sql_mode "NO_BACKSLASH_ESCAPES".
      But above error reported while writing bin log, "'" (of Axel's) is escaped with
      "\" character. Actually, all special characters (n, r, ', ", \, 0...) are escaped
      while writing NAME_CONST for string variable(param, local variable) in bin log 
      Airrespective of "NO_BACKSLASH_ESCAPES" sql_mode. So, basically, the problem is 
      that logging string parameter does not take into account sql_mode value.
      
      Fix:
      ========================
      So when sql_mode is set to "NO_BACKSLASH_ESCAPES", escaping  characters as 
      (n, r, ', ", \, 0...) should be avoided. To do so, added a check to not to
      escape such characters while writing NAME_CONST for string variables in bin 
      log. 
      And when sql_mode is set to NO_BACKSLASH_ESCAPES, quote character "'" is
      represented as ''.
      http://dev.mysql.com/doc/refman/5.6/en/string-literals.html (There are several 
      ways to include quote characters within a string: )
      
      
      
      mysql-test/r/sql_mode.result:
        Added test case for Bug#12601974.
      mysql-test/suite/binlog/r/binlog_sql_mode.result:
        Appended result of test cases added for Bug#12601974.
      mysql-test/suite/binlog/t/binlog_sql_mode.test:
        Added test case for Bug#12601974.
      mysql-test/t/sql_mode.test:
        Appended result of test cases added for Bug#12601974.
      c22c9270
  8. 28 Feb, 2012 4 commits
  9. 29 Feb, 2012 1 commit
  10. 28 Feb, 2012 1 commit
    • Manish Kumar's avatar
      BUG#13333431 - INCORRECT DEFAULT PORT IN 'SHOW SLAVE HOSTS' OUTPUT · 9e048a6b
      Manish Kumar authored
      Problem - The default port number shown in SHOW SLAVE HOSTS is always 3306 
                though the slave is actually listening on a different port number.
                This is a problem as the user can not be sure whether this port 
                value can be trusted and so client trying to read replication 
                topology can get confused.
      
      Fix - 3306 ceases to be the default value of report-port. Moreover report-port
            does not have a static default any longer.
            Instead we initialize report-port to 0 as the new default value and change
            it based on two checks :
      
            1) If report_port is not set, the slave reports the port number its listening 
               on. (i.e. if report-port is not set we get the actual value of the slave's 
               port number).
      
            2) If report-port is set, we show the value report-port is set to, as the slave's
               port number.
      
      mysql-test/include/show_slave_hosts.inc:
        A .inc file is added to use show slave hosts in the new test added.
      mysql-test/r/mysqld--help-notwin.result:
        Updated the result file to show the default value passed for report-port.
      mysql-test/suite/rpl/r/rpl_report_port.result:
        The result file for the new test that is added.
      mysql-test/suite/rpl/r/rpl_show_slave_hosts.result:
        Updated the result file to show the default value passed for report-port.
      mysql-test/suite/rpl/t/rpl_report_port-slave.opt:
        Option file for the new test added.
      mysql-test/suite/rpl/t/rpl_report_port.test:
        Added a test to check the correct functionality of report-port. 
        We check this by running the replication twice. 
                
        In the first run we do not set the value of report-port through the opt file 
        and get the actual port number of the slave's port.
                
        We then restart the server with report-port set to some value (in this case 9000)
        and check the value reported for the slave's port number.
      mysql-test/suite/sys_vars/t/report_port_basic.test:
        Update the test file to show the value for report-port. It is replaced with
        SLAVE_PORT as the actual value of the report-port will change with each run.
      sql/mysqld.cc:
        Changed the value reported by report port :
                
        1. If the value for report-port is not set we assign report-port to be the 
           actual port number of the slave (mysqld_port).
        
        2. If report-port is set we get the value set for the report-port.
      sql/sys_vars.cc:
        Passed 0 as the default value of the report-port.
      9e048a6b