1. 31 Mar, 2010 6 commits
    • Alfranio Correia's avatar
    • Alfranio Correia's avatar
    • Alfranio Correia's avatar
      BUG#51291 Unfortunate effect around variable binlog_direct_non_transactional_updates · bc349674
      Alfranio Correia authored
      Added test cases to check the case where the option 
      binlog_direct_non_transactional_updates is OFF.
      bc349674
    • Alfranio Correia's avatar
    • Alfranio Correia's avatar
      BUG#51291 Unfortunate effect around variable binlog_direct_non_transactional_updates · 41c642e6
      Alfranio Correia authored
      BUG#46364 introduced the flag binlog_direct_non_transactional_updates which
      would make N-changes to be written to the binary log upon committing the
      statement when "ON". On the other hand, when "OFF" the option was supposed
      to mimic the behavior in 5.1. However, the implementation was not mimicking
      the behavior correctly and the following bugs popped up:
      
        Case #1: N-changes executed within a transaction would go into
                 the S-cache. When later in the same transaction a
                 T-change occurs, N-changes following it were written
                 to the T-cache instead of the S-cache. In some cases,
                 this raises problems. For example, a
                 Table_map_log_event being written initially into the
                 S-cache, together with the initial N-changes, would be
                 absent from the T-cache. This would log N-changes
                 orphaned from a Table_map_log_event (thence discarded
                 at the slave). (MIXED and ROW)
      
         Case #2: When rolling back a transaction, the N-changes that
                  might be in the T-cache were disregarded and
                  truncated along with the T-changes. (MIXED and ROW)
      
         Case #3: When a MIXED statement (TN) is ahead of any other
                  T-changes in the transaction and it fails, it is kept
                  in the T-cache until the transaction ends. This is
                  not the case in 5.1 or Betony (5.5.2). In these, the
                  failed TN statement would be written to the binlog at
                  the same instant it had failed and not deferred until
                  transaction end. (SBR)
      
      To fix these problems, we have decided to do what follows:
      
         For Case #1 and #2, we circumvent them:
      
            1. by not letting binlog_direct_non_transactional_updates
               affect MIXED and RBR. These modes will keep the behavior
               provided by WL#2687. Although this will make Celosia to
               behave differently from 5.1, an execution will be always
               safe under such modes in the sense that slaves will never
               go out sync. In 5.1, using either MIXED or ROW while
               mixing N-statements and T-statements was not safe.
      
         For Case #3, we don't actually fix it. We:
      
            1. keep it and make all MIXED statements whether they end
               up failing or not or whether they are up front in the
               transaction or after some transactional change to always
               be stored in the T-cache. This means that it is written
               to the binary log on transaction commit/rollback only.
      
            2. We make the warning message even more specific about the
               MIXED statement and SBR.
      
      mysql-test/extra/rpl_tests/rpl_mixing_engines.test:
        Updated the test case to avoid checking inconsistencies between the master and slave
        when session.binlog_direct_non_transactional_updates is ON and the format is statement.
        
        In this scenario, they will diverge because a counter (within a triger) is incremented
        and associated to the issued statement. However, an n-statement is logged ahead of
        the transaction and thus is not executed by the same order in the slave and thus gets
        a different value from the counter.
      mysql-test/suite/binlog/r/binlog_multi_engine.result:
        Updated the test case with the new error ER_BINLOG_UNSAFE_MIXED_STATEMENT.
      mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result:
        Updated the test case with the new error ER_BINLOG_UNSAFE_MIXED_STATEMENT.
      mysql-test/suite/ndb/r/ndb_binlog_format.result:
        Updated the test case with the new error ER_BINLOG_UNSAFE_MIXED_STATEMENT.
      mysql-test/suite/rpl/r/rpl_concurrency_error.result:
        Updated the test case with the new error ER_BINLOG_UNSAFE_MIXED_STATEMENT.
      mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result:
        Updated the test case with the new error ER_BINLOG_UNSAFE_MIXED_STATEMENT.
      mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result:
        Updated the test case with the new error ER_BINLOG_UNSAFE_MIXED_STATEMENT.
      mysql-test/suite/rpl/r/rpl_stm_stop_middle_group.result:
        Updated the test case with the new error ER_BINLOG_UNSAFE_MIXED_STATEMENT.
      sql/log.cc:
        Checked if either a trx-cache or a non-trx-cache should be used. 
        
        If bin_log_direct_non_trans_update is active or the format is either
        MIXED or ROW, the cache to be used depends on the flag is_transactional.
        
        When the format is STMT, the non-trx-cache should be used if the statement
        is non-transactional and the trx-cache is empty, i.e. if any transactional
        statement has not committed yet. Otherwise, the trx-cache should be used.
      sql/share/errmsg-utf8.txt:
        Added the new unsafe error ER_BINLOG_UNSAFE_MIXED_STATEMENT.
      sql/sql_class.cc:
        Started printing ER_BINLOG_UNSAFE_MIXED_STATEMENT, when there
        is a mixed-statement.
        
        Organized the names of the variables and added comments.
      sql/sql_lex.cc:
        Added the new unsafe error ER_BINLOG_UNSAFE_MIXED_STATEMENT.
      sql/sql_lex.h:
        Added the new unsafe error ER_BINLOG_UNSAFE_MIXED_STATEMENT.
      41c642e6
    • Alfranio Correia's avatar
  2. 24 Mar, 2010 2 commits
  3. 22 Mar, 2010 1 commit
  4. 21 Mar, 2010 2 commits
  5. 20 Mar, 2010 2 commits
  6. 19 Mar, 2010 2 commits
    • Vladislav Vaintroub's avatar
      Fix errors when building release · b1073a22
      Vladislav Vaintroub authored
      - package some more perl scripts on Windows (mysqlhotcopy and mysqldumpslow)
      - do not try to pack .map files (no more produced)
      - (CMake-unrelated) fix debug build on FreeBSD, trying to use uninitialized attribute
      MY_MUTEX_INIT_FAST
      b1073a22
    • Alexey Kopytov's avatar
      Manual merge. · 72afe82a
      Alexey Kopytov authored
      72afe82a
  7. 18 Mar, 2010 1 commit
    • Alexey Kopytov's avatar
      Bug #8433: Overflow must be an error · 2acfdc50
      Alexey Kopytov authored
       
      All numeric operators and functions on integer, floating point 
      and DECIMAL values now throw an 'out of range' error rather 
      than returning an incorrect value or NULL,  when the result is 
      out of supported range for the corresponding data type. 
       
      Some test cases in the test suite had to be updated 
      accordingly either because the test case itself relied on a 
      value returned in case of a numeric overflow, or because a 
      numeric overflow was the root cause of the corresponding bugs. 
      The latter tests are no longer relevant, since the expressions 
      used to trigger the corresponding bugs are not valid anymore. 
      However, such test cases have been adjusted and kept "for the 
      record". 
      
      mysql-test/r/func_math.result:
        Added test cases for bug #8433. 
        Updated results of the test case for bug #31236.
      mysql-test/r/func_misc.result:
        Streamlined test cases.
      mysql-test/r/func_test.result:
        Streamlined test cases.
      mysql-test/r/select.result:
        Streamlined test cases.
      mysql-test/r/sp.result:
        Streamlined test cases.
      mysql-test/r/strict.result:
        Streamlined test cases.
      mysql-test/r/type_newdecimal.result:
        Streamlined test cases.
      mysql-test/suite/sys_vars/r/sql_slave_skip_counter_basic.result:
        Streamlined test cases.
      mysql-test/suite/sys_vars/t/sql_slave_skip_counter_basic.test:
        Streamlined test cases.
      mysql-test/t/func_math.test:
        Added test cases for bug #8433. 
        Updated results of the test case for bug #31236.
      mysql-test/t/func_misc.test:
        Streamlined test cases.
      mysql-test/t/func_test.test:
        Streamlined test cases.
      mysql-test/t/select.test:
        Streamlined test cases.
      mysql-test/t/sp.test:
        Streamlined test cases.
      mysql-test/t/strict.test:
        Streamlined test cases.
      mysql-test/t/type_newdecimal.test:
        Streamlined test cases.
      sql/item_create.cc:
        Changed Item_func_cot() to be defined as a standalone Item
        rather than a combination of "1 / TAN(x)".
      sql/item_func.cc:
        Throw an 'out of range' error rather than returning an  
        incorrect value or NULL,  when the result of a numeric 
        operator or a function is out of supported range for  
        the corresponding data type.
      sql/item_func.h:
        Added validation helpers as inline methods of Item_func.
      sql/share/errmsg-utf8.txt:
        New ER_DATA_OUT_OF_RANGE error.
      2acfdc50
  8. 17 Mar, 2010 4 commits
    • Vladislav Vaintroub's avatar
      Bug #52149 - packaging differences in CMake build · c8e32a83
      Vladislav Vaintroub authored
      Corrected some packaging bugs:
      - install mysqlservices library
      - install libmysqlclient_r.so.{16,16.0.0} as links
        to libmysqlclient.so
      - install libmysqld-debug.a
      - install my_safe_process, my_safe_kill and
        symlinks to mysql-test-run.pl (mtr, mysql-test-run)
        into correct place ${INSTALL_MYSQLTESTDIR}
      
      
      cmake/install_layout.cmake:
        Fix typo
      cmake/install_macros.cmake:
        Refactor INSTALL_SYMLINK to allow arbitrary symlink paths.
        Old version of this macro would make link extension the same 
        as in target. This was not sufficient in some scenarios 
        (would not allow for example libmysqlclient_r.so.16=>./libmysqlclient.so 
        link)
      libmysql/CMakeLists.txt:
        Install extra symlinks to libmysqlclient.so
        (libmysqlclient_r.so.16 and libmysqlclient_r.so.16.0.0)
        for backward compatiblity.
      libmysqld/CMakeLists.txt:
        install libmysqld-debug.a
      libservices/CMakeLists.txt:
        install mysqlservices library
      mysql-test/lib/My/SafeProcess/CMakeLists.txt:
        install my_safe_process, my_safe_kill into  correct place
      c8e32a83
    • Luis Soares's avatar
      Merged bundle from bug report. · 9c1918a7
      Luis Soares authored
      9c1918a7
    • Luis Soares's avatar
      Merge bundle from bug report. · a9c295e5
      Luis Soares authored
      a9c295e5
    • Luis Soares's avatar
      BUG#51426: overflow for auto_increment column causes slave to stop · 92b5e586
      Luis Soares authored
      In BUG#49562 we fixed the case where numeric user var events
      would not serialize the flag stating whether the value was signed
      or unsigned (unsigned_flag). This fixed the case that the slave
      would get an overflow while treating the unsigned values as
      signed.
            
      In this bug, we find that the unsigned_flag can sometimes change
      between the moment that the user value is recorded for binlogging
      purposes and the actual binlogging time. Since we take the
      unsigned_flag from the runtime variable data, at binlogging time,
      and the variable value is comes from the copy taken earlier in
      the execution, there may be inconsistency in the
      User_var_log_event between the variable value and its
      unsigned_flag.
            
      We fix this by also copying the unsigned_flag of the
      user_var_entry when its value is copied, for binlogging
      purposes. Later, at binlogging time, we use the copied
      unsigned_flag and not the one in the runtime user_var_entry
      instance.
      92b5e586
  9. 16 Mar, 2010 3 commits
    • Andrei Elkin's avatar
      Bug #51398 Test "rpl_heartbeat_basic" fails "while waiting for slave_received_heartbeats" · bd83b0cc
      Andrei Elkin authored
      Non-determinism of the test was caused by lack of setting a proper value to hb period,
      actually fixed by BUG@50767.
      
      These fixes aim at possible non-determinism in comparison of received
      hb events by master and slave in the circular part of the test.
      Even though the HB periods ratio was choosen to be as high as 10, it's still incorrect 
      to compare number of hb-events basing only a relation between their periods.
      
      Yet another issue is relatively short 60 secs timeout of wait_for_status_var.inc
      makes valgrind runs to fail. 
      Fixed with deploying wait_for_slave_io_to_start afront of calling wait_for_status_var.
      
      The test is made runnable only with MIXED binlog-format as it has close to 1 min
      total exec time and there is nothing format specific in it.
      
      
      mysql-test/suite/rpl/r/rpl_heartbeat_basic.result:
        results are changed.
      mysql-test/suite/rpl/t/rpl_heartbeat_basic.test:
        Reducing the test env to run in only with MIXED mode;
        Simplifying logics of the circular setup to verify only
        that HB flows both directions.
      bd83b0cc
    • Mattias Jonsson's avatar
      merge · 5937da69
      Mattias Jonsson authored
      5937da69
    • Alexander Nozdrin's avatar
      Skip perfschema.misc if "var" is a symlink (due to Bug 51447). · 8347e1ea
      Alexander Nozdrin authored
      mysql-test/include/not_var_link.inc:
        Committed on behalf of Bjorn.
      8347e1ea
  10. 15 Mar, 2010 11 commits
    • Mats Kindahl's avatar
      Merging with mysql-trunk-bugfixing · 03768a2f
      Mats Kindahl authored
      03768a2f
    • Mats Kindahl's avatar
      Merging with mysql-trunk-bugfixing · c4276d3f
      Mats Kindahl authored
      c4276d3f
    • Konstantin Osipov's avatar
      A post-review fix for type-aware metadata locks. · 09b7a0d1
      Konstantin Osipov authored
      DDL no longer aborts mysql_lock_tables(), and hence
      we no longer need to support need_reopen flag of this
      call. 
      Remove the flag, and all the code in the server
      that was responsible for handling the case when
      it was set. This allowed to simplify: 
      open_and_lock_tables_derived(), the delayed thread,
      multi-update.
      
      Rename MYSQL_LOCK_IGNORE_FLUSH to MYSQL_OPEN_IGNORE_FLUSH,
      since we now only support this flag in open_table().
      
      Rename MYSQL_LOCK_PERF_SCHEMA to MYSQL_LOCK_LOG_TABLE,
      to avoid confusion.
      
      Move the wait for the global read lock for cases
      when we do updates in SELECT f1() or DO (UPDATE) to 
      open_table() from mysql_lock_tables(). When waiting
      for the read lock, we could raise need_reopen flag,
      which is no longer present in mysql_lock_tables().
      Since the block responsible for waiting for GRL
      was moved, MYSQL_LOCK_IGNORE_GLOBAL_READ_LOCK
      was renamed to MYSQL_OPEN_IGNORE_GLOBAL_READ_LOCK.
      
      
      mysql-test/r/mdl_sync.result:
        Update test results (see comments for mdl_sync.test).
      mysql-test/t/mdl_sync.test:
        Update tests: an abort mysql_lock_tables() called for an
        INSERT no longer auto-closes SQL HANDLERS, since it
        no longer leads to back-off and retry.
      sql/ha_ndbcluster_binlog.cc:
        Remove unused variables.
      sql/lock.cc:
        Remove support for need_reopen parameter of mysql_lock_tables().
        Update comments.
      sql/log_event_old.cc:
        Remove the loop responsible for handling need_reopen
        out parameter of mysql_lock_tables().
      sql/mysql_priv.h:
        Update open and lock tables flag names.
      sql/share/errmsg-utf8.txt:
        Add a new error message to report when
        thr_multi_lock() is aborted.
      sql/sql_base.cc:
        Update comments. Rename MYSQL_LOCK_IGNORE_FLUSH
        to MYSQL_OPEN_IGNORE_FLUSH.
      sql/sql_class.h:
        Remove unused code.
      sql/sql_db.cc:
        Remove an unused bit of code.
      sql/sql_handler.cc:
        For backward compatibility, we still want to back off and
        retry when a call to mysql_lock_tables() is aborted
        from within an SQL HANDLER. Write an internal error
        handler to support the case.
      sql/sql_insert.cc:
        Call mysql_lock_tables() no longer has need_reopen
        out parameter. Simplify the code by removing 
        the crud that took care of it.
        MYSQL_LOCK_IGNORE_FLUSH is now only supported by
        open_tables().
      sql/sql_show.cc:
        Rename MYSQL_LOCK_IGNORE_FLUSH to MYSQL_OPEN_IGNORE_FLUSH
      sql/sql_table.cc:
        Remove an unused parameter.
      sql/sql_update.cc:
        Remove the need_reopen loop from multi-update.
        We no also longer need to cleanup the parse tree in case
        when mysql_lock_tables() is aborted and thus an infinite
        source of multi-update bugs is gone.
      sql/tztime.cc:
        Rename MYSQL_LOCK_IGNORE_FLUSH to MYSQL_OPEN_IGNORE_FLUSH,
        since from now on this flag is only supported by open_table().
      09b7a0d1
    • Vladislav Vaintroub's avatar
      merge · a45162d4
      Vladislav Vaintroub authored
      a45162d4
    • Alexander Nozdrin's avatar
      Auto-merge from mysql-trunk. · 8825ea3f
      Alexander Nozdrin authored
      8825ea3f
    • Alexander Nozdrin's avatar
      A patch for Bug#52071 (rpl_ndb.rpl_ndb_ctype_ucs2_def fails). · c161a487
      Alexander Nozdrin authored
      Use new command line options instead of deprecated and removed ones.
      c161a487
    • Alexander Nozdrin's avatar
      6be830e1
    • Magnus Blåudd's avatar
      Merge · cdb480d6
      Magnus Blåudd authored
      cdb480d6
    • Magnus Blåudd's avatar
      Merge in fix for bug#42589 · df1ed40b
      Magnus Blåudd authored
      df1ed40b
    • Jon Olav Hauglid's avatar
      Bug #51160 Deadlock around SET GLOBAL EVENT_SCHEDULER = ON|OFF · c7c1f219
      Jon Olav Hauglid authored
      This deadlock could occour betweeen one connection executing
      SET GLOBAL EVENT_SCHEDULER= ON and another executing SET GLOBAL
      EVENT_SCHEDULER= OFF. The bug was introduced by WL#4738.
      
      The first connection would hold LOCK_event_metadata (protecting
      the global variable) while trying to lock LOCK_global_system_variables
      starting the event scheduler thread (in THD:init()).
      
      The second connection would hold LOCK_global_system_variables
      while trying to get LOCK_event_scheduler after stopping the event
      scheduler inside event_scheduler_update().
      
      This patch fixes the problem by not using LOCK_event_metadata to
      protect the event_scheduler variable. It is still protected using
      LOCK_global_system_variables. This fixes the deadlock as it removes 
      one of the two mutexes used to produce it.
      
      However, this patch opens up the possibility that the event_scheduler
      variable and the real event_scheduler state can become out of sync
      (e.g. variable = OFF, but scheduler running). But this can only
      happen under very unlikely conditions - two concurrent SET GLOBAL
      statments, with one thread interrupted at the exact wrong moment.
      This is preferable to having the possibility of a deadlock.
      
      This patch also fixes a bug where it was possible to exit create_event()
      without releasing LOCK_event_metadata if running out of memory during
      its exection.
      
      No test case added since a repeatable test case would have required
      excessive use of new sync points. Instead we rely on the fact that
      this bug was easily reproduceable using RGQ tests.
      c7c1f219
    • Alexander Nozdrin's avatar
      Auto-merge from mysql-trunk. · f007796b
      Alexander Nozdrin authored
      f007796b
  11. 14 Mar, 2010 1 commit
    • Mats Kindahl's avatar
      Bug #51938 plugin_dir gets bad default value · cba4c8d1
      Mats Kindahl authored
      When building the script directory using a CMake-based build, both the
      variables in config.h.cmake (including PLUGINDIR) and the variables in
      CMakeList.txt (which includes pkgplugindir).
      
      However, for autotools-based builds, only pkgplugindir is substituted,
      which means that the plugin-path is not substituted.
      
      This patch solves the problem by using pkgplugindir, which works on both
      CMake-based and autotools-based builds, instead of PLUGINDIR.
      cba4c8d1
  12. 13 Mar, 2010 1 commit
  13. 12 Mar, 2010 4 commits