1. 30 Jun, 2010 1 commit
    • Alfranio Correia's avatar
      BUG#53259 Unsafe statement binlogged in statement format w/MyIsam temp tables · 846870d8
      Alfranio Correia authored
      BUG#54872 MBR: replication failure caused by using tmp table inside transaction 
            
      Changed criteria to classify a statement as unsafe in order to reduce the
      number of spurious warnings. So a statement is classified as unsafe when
      there is on-going transaction at any point of the execution if:
      
      1. The mixed statement is about to update a transactional table and
      a non-transactional table.
      
      2. The mixed statement is about to update a temporary transactional
      table and a non-transactional table.
            
      3. The mixed statement is about to update a transactional table and
      read from a non-transactional table.
      
      4. The mixed statement is about to update a temporary transactional
      table and read from a non-transactional table.
      
      5. The mixed statement is about to update a non-transactional table
      and read from a transactional table when the isolation level is
      lower than repeatable read.
      
      After updating a transactional table if:
      
      6. The mixed statement is about to update a non-transactional table
      and read from a temporary transactional table.
       
      7. The mixed statement is about to update a non-transactional table
       and read from a temporary transactional table.
      
      8. The mixed statement is about to update a non-transactionala table
         and read from a temporary non-transactional table.
           
      9. The mixed statement is about to update a temporary non-transactional
      table and update a non-transactional table.
           
      10. The mixed statement is about to update a temporary non-transactional
      table and read from a non-transactional table.
           
      11. A statement is about to update a non-transactional table and the
      option variables.binlog_direct_non_trans_update is OFF.
      
      The reason for this is that locks acquired may not protected a concurrent
      transaction of interfering in the current execution and by consequence in
      the result. So the patch reduced the number of spurious unsafe warnings.
      
      Besides we fixed a regression caused by BUG#51894, which makes temporary
      tables to go into the trx-cache if there is an on-going transaction. In
      MIXED mode, the patch for BUG#51894 ignores that the trx-cache may have
      updates to temporary non-transactional tables that must be written to the
      binary log while rolling back the transaction.
            
      So we fix this problem by writing the content of the trx-cache to the
      binary log while rolling back a transaction if a non-transactional
      temporary table was updated and the binary logging format is MIXED.
      846870d8
  2. 27 May, 2010 1 commit
  3. 08 May, 2010 1 commit
    • He Zhenxing's avatar
      Bug#53189 Table map version unused and can be removed · 014367e0
      He Zhenxing authored
      MYSQL_BIN_LOG m_table_map_version member and it's associated 
      functions were not used in the logic of binlogging and replication,
      this patch removed all related code.
      
      sql/log.cc:
        removed unused m_table_map_version variable and functions
      sql/log.h:
        removed unused m_table_map_version variable and functions
      sql/log_event.h:
        Removed unused LOG_EVENT_UPDATE_TABLE_MAP_VERSION_F flag
      sql/sql_class.cc:
        Removed unused LOG_EVENT_UPDATE_TABLE_MAP_VERSION_F flag
      sql/sql_load.cc:
        Removed unused LOG_EVENT_UPDATE_TABLE_MAP_VERSION_F flag
      sql/table.cc:
        removed unused table_map_version variable
      sql/table.h:
        removed unused table_map_version variable
      014367e0
  4. 20 Apr, 2010 1 commit
    • Alfranio Correia's avatar
      BUG#51894 Replication failure with SBR on DROP TEMPORARY TABLE inside a · 4bf7d53b
      Alfranio Correia authored
                transaction
      BUG#52616 Temp table prevents switch binlog format from STATEMENT to ROW
      
      Before the WL#2687 and BUG#46364, every non-transactional change that happened
      after a transactional change was written to trx-cache and flushed upon
      committing the transaction. WL#2687 and BUG#46364 changed this behavior and
      non-transactional changes are now written to the binary log upon committing
      the statement.
      
      A binary log event is identified as transactional or non-transactional through
      a flag in the Log_event which is set taking into account the underlie storage
      engine on what it is stems from. In the current bug, this flag was not being
      set properly when the DROP TEMPORARY TABLE was executed.
      
      However, while fixing this bug we figured out that changes to temporary tables
      should be always written to the trx-cache if there is an on-going transaction.
      Otherwise, binlog events in the reversed order would be produced.
      
      Regarding concurrency, keeping changes to temporary tables in the trx-cache is
      also safe as temporary tables are only visible to the owner connection.
      
      In this patch, we classify the following statements as unsafe:
         1 - INSERT INTO t_myisam SELECT * FROM t_myisam_temp
      
         2 - INSERT INTO t_myisam_temp SELECT * FROM t_myisam
      
         3 - CREATE TEMPORARY TABLE t_myisam_temp SELECT * FROM t_myisam
      
      On the other hand, the following statements are classified as safe:
      
         1 - INSERT INTO t_innodb SELECT * FROM t_myisam_temp
      
         2 - INSERT INTO t_myisam_temp SELECT * FROM t_innodb
      
      The patch also guarantees that transactions that have a DROP TEMPORARY are
      always written to the binary log regardless of the mode and the outcome:
      commit or rollback. In particular, the DROP TEMPORARY is extended with the
      IF EXISTS clause when the current statement logging format is set to row.
      
      Finally, the patch allows to switch from STATEMENT to MIXED/ROW when there
      are temporary tables but the contrary is not possible.
      
      mysql-test/extra/rpl_tests/rpl_binlog_max_cache_size.test:
        Updated the test case because 
           CREATE TEMPORARY TABLE t_innodb_temp SELECT * FROM t_myisam is not unsafe.
      mysql-test/extra/rpl_tests/rpl_implicit_commit_binlog.test:
        Updated the test case due to the new rules: changes to
        temporary tables are written to the binary log in the
        boundaries of a transaction if there is any.
      mysql-test/extra/rpl_tests/rpl_innodb.test:
        Removed comments from the test case that became false after the patch.
      mysql-test/extra/rpl_tests/rpl_loaddata.test:
        Suppressed warning messages due to the following cases:
        
           1 - INSERT INTO t_myisam SELECT * FROM t_myisam_temp
        
           2 - INSERT INTO t_myisam_temp SELECT * FROM t_myisam
      mysql-test/include/ctype_utf8_table.inc:
        Suppressed warning messages due to the following cases:
        
           1 - INSERT INTO t_myisam SELECT * FROM t_myisam_temp
        
           2 - INSERT INTO t_myisam_temp SELECT * FROM t_myisam
      mysql-test/r/ctype_cp932_binlog_stm.result:
        Updated the test case due to the new rules: changes to
        temporary tables are written to the binary log in the
        boundaries of a transaction if there is any.
      mysql-test/suite/binlog/r/binlog_database.result:
        Updated the test case due to the new rules: changes to
        temporary tables are written to the binary log in the
        boundaries of a transaction if there is any.
      mysql-test/suite/binlog/r/binlog_innodb_row.result:
        Updated the result file.
      mysql-test/suite/binlog/r/binlog_multi_engine.result:
        Updated the unsafe message.
      mysql-test/suite/binlog/r/binlog_row_binlog.result:
        Updated the test case due to the new rules: changes to
        temporary tables are written to the binary log in the
        boundaries of a transaction if there is any.
      mysql-test/suite/binlog/r/binlog_row_drop_tmp_tbl.result:
        Updated the test case due to the new rules: changes to
        temporary tables are written to the binary log in the
        boundaries of a transaction if there is any.
      mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result:
        Updated the test case due to the new rules: changes to
        temporary tables are written to the binary log in the
        boundaries of a transaction if there is any.
      mysql-test/suite/binlog/r/binlog_stm_binlog.result:
        Updated the result file.
      mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result:
        Updated the test case due to the new rules: changes to
        temporary tables are written to the binary log in the
        boundaries of a transaction if there is any.
      mysql-test/suite/binlog/t/binlog_tmp_table.test:
        Suppressed warning messages due to the following cases:
        
           1 - INSERT INTO t_myisam SELECT * FROM t_myisam_temp
        
           2 - INSERT INTO t_myisam_temp SELECT * FROM t_myisam
      mysql-test/suite/ndb/r/ndb_binlog_format.result:
        Updated the unsafe message.
      mysql-test/suite/rpl/r/rpl_concurrency_error.result:
        Updated the unsafe message.
      mysql-test/suite/rpl/r/rpl_mixed_binlog_max_cache_size.result:
        Updated the result file because 
           CREATE TEMPORARY TABLE t_innodb_temp SELECT * FROM t_myisam is not unsafe.
      mysql-test/suite/rpl/r/rpl_mixed_implicit_commit_binlog.result:
        Updated the test case due to the new rules: changes to
        temporary tables are written to the binary log in the
        boundaries of a transaction if there is any.
      mysql-test/suite/rpl/r/rpl_mixed_mixing_engines.result:
        Updated the test case due to the new rules: changes to
        temporary tables are written to the binary log in the
        boundaries of a transaction if there is any.
      mysql-test/suite/rpl/r/rpl_mixed_row_innodb.result:
        Added some comments to ease the understanding of the result file.
      mysql-test/suite/rpl/r/rpl_non_direct_mixed_mixing_engines.result:
        Updated the test case due to the new rules: changes to
        temporary tables are written to the binary log in the
        boundaries of a transaction if there is any.
      mysql-test/suite/rpl/r/rpl_non_direct_row_mixing_engines.result:
        Updated the test case due to the new rules: changes to
        temporary tables are written to the binary log in the
        boundaries of a transaction if there is any.
      mysql-test/suite/rpl/r/rpl_non_direct_stm_mixing_engines.result:
        Updated the test case due to the new rules: changes to
        temporary tables are written to the binary log in the
        boundaries of a transaction if there is any.
      mysql-test/suite/rpl/r/rpl_row_drop.result:
        Updated the test case due to the new rules: changes to
        temporary tables are written to the binary log in the
        boundaries of a transaction if there is any.
      mysql-test/suite/rpl/r/rpl_row_implicit_commit_binlog.result:
        Updated the test case due to the new rules: changes to
        temporary tables are written to the binary log in the
        boundaries of a transaction if there is any.
      mysql-test/suite/rpl/r/rpl_row_mixing_engines.result:
        Updated the test case due to the new rules: changes to
        temporary tables are written to the binary log in the
        boundaries of a transaction if there is any.
      mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result:
        Updated the result file because 
           CREATE TEMPORARY TABLE t_innodb_temp SELECT * FROM t_myisam is not unsafe.
      mysql-test/suite/rpl/r/rpl_stm_implicit_commit_binlog.result:
        Updated the test case due to the new rules: changes to
        temporary tables are written to the binary log in the
        boundaries of a transaction if there is any.
      mysql-test/suite/rpl/r/rpl_stm_innodb.result:
        Added some comments to ease the understanding of the result file.
      mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result:
        Updated the test case due to the new rules: changes to
        temporary tables are written to the binary log in the
        boundaries of a transaction if there is any.
      mysql-test/suite/rpl/r/rpl_stm_stop_middle_group.result:
        Updated the unsafe message.
      mysql-test/suite/rpl/r/rpl_temp_temporary.result:
        Added a test case.
      mysql-test/suite/rpl/t/rpl000013.test:
        Suppressed warning messages due to the following cases:
        
           1 - INSERT INTO t_myisam SELECT * FROM t_myisam_temp
        
           2 - INSERT INTO t_myisam_temp SELECT * FROM t_myisam
        
           3 - CREATE TEMPORARY TABLE t_myisam_temp SELECT * FROM t_myisam
      mysql-test/suite/rpl/t/rpl_misc_functions.test:
        Suppressed warning messages.
      mysql-test/suite/rpl/t/rpl_temp_table.test:
        Suppressed warning messages due to the following cases:
        
           1 - INSERT INTO t_myisam SELECT * FROM t_myisam_temp
        
           2 - INSERT INTO t_myisam_temp SELECT * FROM t_myisam
        
           3 - CREATE TEMPORARY TABLE t_myisam_temp SELECT * FROM t_myisam
      mysql-test/suite/rpl/t/rpl_temp_temporary.test:
        Added a test case.
      mysql-test/suite/rpl/t/rpl_temporary.test:
        Suppressed warning messages due to the following cases:
        
           1 - INSERT INTO t_myisam SELECT * FROM t_myisam_temp
        
           2 - INSERT INTO t_myisam_temp SELECT * FROM t_myisam
        
           3 - CREATE TEMPORARY TABLE t_myisam_temp SELECT * FROM t_myisam
      mysql-test/suite/rpl_ndb/r/rpl_ndb_row_implicit_commit_binlog.result:
        Updated the test case due to the new rules: changes to
        temporary tables are written to the binary log in the
        boundaries of a transaction if there is any.
      mysql-test/suite/rpl_ndb/r/rpl_truncate_7ndb.result:
        Updated the test case to remove references to positions
        in the binary log.
      mysql-test/suite/rpl_ndb/t/rpl_truncate_7ndb.test:
        Updated the test case to remove references to positions
        in the binary log.
      mysql-test/t/create_select_tmp.test:
        Suppressed warning messages due to the following cases:
        
           1 - INSERT INTO t_myisam SELECT * FROM t_myisam_temp
        
           2 - INSERT INTO t_myisam_temp SELECT * FROM t_myisam
        
           3 - CREATE TEMPORARY TABLE t_myisam_temp SELECT * FROM t_myisam
      mysql-test/t/ctype_cp932_binlog_stm.test:
        Suppressed warning messages due to the following cases:
        
           1 - INSERT INTO t_myisam SELECT * FROM t_myisam_temp
        
           2 - INSERT INTO t_myisam_temp SELECT * FROM t_myisam
        
           3 - CREATE TEMPORARY TABLE t_myisam_temp SELECT * FROM t_myisam
      mysql-test/t/mysqlbinlog.test:
        Suppressed warning messages due to the following cases:
        
           1 - INSERT INTO t_myisam SELECT * FROM t_myisam_temp
        
           2 - INSERT INTO t_myisam_temp SELECT * FROM t_myisam
        
           3 - CREATE TEMPORARY TABLE t_myisam_temp SELECT * FROM t_myisam
      sql/log.cc:
        Improved the code by creating several functions to hide decision
        on type of engine changed, commit/abort, etc:  
        
        . stmt_has_updated_non_trans_table
        
        . trans_has_updated_non_trans_table
        
        . ending_trans
        
        Updated the binlog_rollback function and the use of the 
        OPTION_KEEP_LOG which indincates when a temporary table was
        either created or dropped and as such the command must be 
        logged if not in MIXED mode and even while rolling back the
        transaction.
      sql/log.h:
        Improved the code by creating several functions to hide decision
        on type of engine changed, commit/abort, etc.
      sql/log_event.cc:
        Removed the setting of the OPTION_KEEP_LOG as it is related to CREATE
        TEMPORARY and DROP TEMPORARY and not to the type of engine (i.e.
        transactional or non-transactional).
      sql/log_event_old.cc:
        Removed the setting of the OPTION_KEEP_LOG as it is related to CREATE
        TEMPORARY and DROP TEMPORARY and not to the type of engine (i.e.
        transactional or non-transactional).
      sql/share/errmsg-utf8.txt:
        Updated the unsafe message.
      sql/sql_class.cc:
        Classifies the following statements as unsafe:
           1 - INSERT INTO t_myisam SELECT * FROM t_myisam_temp
        
           2 - INSERT INTO t_myisam_temp SELECT * FROM t_myisam
        
        On the other hand, the following statements are classified as safe:
        
           1 - INSERT INTO t_innodb SELECT * FROM t_myisam_temp
        
           2 - INSERT INTO t_myisam_temp SELECT * FROM t_innodb
      sql/sql_class.h:
        It allows to switch from STATEMENT to MIXED/ROW when there are temporary
        tables but the contrary is not possible.
      sql/sql_table.cc:
        Fixed the case that a DROP/DROP TEMPORARY that affects a temporary table in MIXED
        mode is written as a DROP TEMPORARY TABLE IF EXISTS because the table may not exist in the slave and due to the IF EXISTS token an error will never happen
        while processing the statement in the slave.
        
        Removed a function that was not being used.
      4bf7d53b
  5. 31 Mar, 2010 1 commit
    • Mats Kindahl's avatar
      WL#5030: Split and remove mysql_priv.h · 3538238a
      Mats Kindahl authored
      This patch:
      
      - Moves all definitions from the mysql_priv.h file into
        header files for the component where the variable is
        defined
      - Creates header files if the component lacks one
      - Eliminates all include directives from mysql_priv.h
      - Eliminates all circular include cycles
      - Rename time.cc to sql_time.cc
      - Rename mysql_priv.h to sql_priv.h
      3538238a
  6. 02 Feb, 2010 1 commit
    • Alexander Nozdrin's avatar
      Manual merge of patch for Bug#46364 from mysql-next-mr-bugfixing. · ba9b5a38
      Alexander Nozdrin authored
      Conflicts:
        - mysql-test/r/mysqld--help-win.result
        - sql/sys_vars.cc
      
      Original revsion (in next-mr-bugfixing):
      ------------------------------------------------------------
      revno: 2971 [merge]
      revision-id: alfranio.correia@sun.com-20100121210527-rbuheu5rnsmcakh1
      committer: Alfranio Correia <alfranio.correia@sun.com>
      branch nick: mysql-next-mr-bugfixing
      timestamp: Thu 2010-01-21 21:05:27 +0000
      message:
        BUG#46364 MyISAM transbuffer problems (NTM problem)
              
        It is well-known that due to concurrency issues, a slave can become
        inconsistent when a transaction contains updates to both transaction and
        non-transactional tables.
                            
        In a nutshell, the current code-base tries to preserve causality among the
        statements by writing non-transactional statements to the txn-cache which
        is flushed upon commit. However, modifications done to non-transactional
        tables on behalf of a transaction become immediately visible to other
        connections but may not immediately get into the binary log and therefore
        consistency may be broken.
                    
        In general, it is impossible to automatically detect causality/dependency
        among statements by just analyzing the statements sent to the server. This
        happen because dependency may be hidden in the application code and it is
        necessary to know a priori all the statements processed in the context of
        a transaction such as in a procedure. Moreover, even for the few cases that
        we could automatically address in the server, the computation effort
        required could make the approach infeasible.
                    
        So, in this patch we introduce the option
              - "--binlog-direct-non-transactional-updates" that can be used to bypass
              the current behavior in order to write directly to binary log statements
              that change non-transactional tables.
        
        Besides, it is used to enable the WL#2687 which is disabled by default.
          ------------------------------------------------------------
          revno: 2970.1.1
          revision-id: alfranio.correia@sun.com-20100121131034-183r4qdyld7an5a0
          parent: alik@sun.com-20100121083914-r9rz2myto3tkdya0
          committer: Alfranio Correia <alfranio.correia@sun.com>
          branch nick: mysql-next-mr-bugfixing
          timestamp: Thu 2010-01-21 13:10:34 +0000
          message:
            BUG#46364 MyISAM transbuffer problems (NTM problem)
                  
            It is well-known that due to concurrency issues, a slave can become
            inconsistent when a transaction contains updates to both transaction and
            non-transactional tables.
                                
            In a nutshell, the current code-base tries to preserve causality among the
            statements by writing non-transactional statements to the txn-cache which
            is flushed upon commit. However, modifications done to non-transactional
            tables on behalf of a transaction become immediately visible to other
            connections but may not immediately get into the binary log and therefore
            consistency may be broken.
                        
            In general, it is impossible to automatically detect causality/dependency
            among statements by just analyzing the statements sent to the server. This
            happen because dependency may be hidden in the application code and it is
            necessary to know a priori all the statements processed in the context of
            a transaction such as in a procedure. Moreover, even for the few cases that
            we could automatically address in the server, the computation effort
            required could make the approach infeasible.
                        
            So, in this patch we introduce the option
                  - "--binlog-direct-non-transactional-updates" that can be used to bypass
                  the current behavior in order to write directly to binary log statements
                  that change non-transactional tables.
            
            Besides, it is used to enable the WL#2687 which is disabled by default.
      ba9b5a38
  7. 21 Jan, 2010 1 commit
    • Alfranio Correia's avatar
      BUG#46364 MyISAM transbuffer problems (NTM problem) · b146191e
      Alfranio Correia authored
            
      It is well-known that due to concurrency issues, a slave can become
      inconsistent when a transaction contains updates to both transaction and
      non-transactional tables.
                          
      In a nutshell, the current code-base tries to preserve causality among the
      statements by writing non-transactional statements to the txn-cache which
      is flushed upon commit. However, modifications done to non-transactional
      tables on behalf of a transaction become immediately visible to other
      connections but may not immediately get into the binary log and therefore
      consistency may be broken.
                  
      In general, it is impossible to automatically detect causality/dependency
      among statements by just analyzing the statements sent to the server. This
      happen because dependency may be hidden in the application code and it is
      necessary to know a priori all the statements processed in the context of
      a transaction such as in a procedure. Moreover, even for the few cases that
      we could automatically address in the server, the computation effort
      required could make the approach infeasible.
                  
      So, in this patch we introduce the option
            - "--binlog-direct-non-transactional-updates" that can be used to bypass
            the current behavior in order to write directly to binary log statements
            that change non-transactional tables.
      
      Besides, it is used to enable the WL#2687 which is disabled by default.
      
      mysql-test/extra/rpl_tests/rpl_binlog_max_cache_size.test:
        Changes the result set as the STMT mode behaves as both the ROW and MIXED modes and as such uses the non-trx-cache and takes longer to fill the trx-cache up and trigger an error.
      mysql-test/extra/rpl_tests/rpl_implicit_commit_binlog.test:
        Changes the result set as the STMT mode behaves as both the ROW and MIXED modes and as such uses the non-trx-cache. It also fixes comments.
      mysql-test/extra/rpl_tests/rpl_mixing_engines.test:
        The STMT mode is unsafe when mixed-statements are executed thus making slaves to go out of sync. For that reason, it checks consistency if not in STMT mode.
      mysql-test/include/default_mysqld.cnf:
        Makes binlog-direct-non-transactional-updates "TRUE" by default in the test
        cases.
      mysql-test/r/mysqld--help-notwin.result:
        Updates the result file with the new option.
      mysql-test/r/mysqld--help-win.result:
        Updates the result file with the new option.
      mysql-test/suite/binlog/r/binlog_multi_engine.result:
        Updates the result file because non-trx-changes are written ahead of the
        transaction.
      mysql-test/suite/binlog/r/binlog_switch_inside_trans.result:
        Verifies if the user cannot change the opion binlog_direct_non_transactional_updates
        within a transaction or a procedure/function/trigger.
      mysql-test/suite/binlog/t/binlog_stm_mix_innodb_myisam-master.opt:
        Sets binlog_direct_non_transactional_updates to FALSE in order to avoid changing
        the test case and its result file.
      mysql-test/suite/binlog/t/binlog_switch_inside_trans.test:
        Verifies if the user cannot change the opion binlog_direct_non_transactional_updates
        within a transaction or a procedure/function/trigger.
      mysql-test/suite/ndb/r/ndb_binlog_format.result:
        Updates the result file because non-trx-changes are written ahead of the
        transaction.
      mysql-test/suite/rpl/r/rpl_begin_commit_rollback.result:
        Sets binlog_direct_non_transactional_updates to FALSE in order to avoid changing the test case and its result file.
      mysql-test/suite/rpl/r/rpl_concurrency_error.result:
        Updates the result file because non-trx-changes are written ahead of the
        transaction
      mysql-test/suite/rpl/r/rpl_mixed_implicit_commit_binlog.result:
        Updates the result file because non-trx-changes are written ahead of the
        transaction.
      mysql-test/suite/rpl/r/rpl_mixed_mixing_engines.result:
        Updates the result file because non-trx-changes are written ahead of the
        transaction.
      mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result:
        Changes the result set as the STMT mode behaves as both the ROW and MIXED modes and as such uses the non-trx-cache and takes longer to fill the trx-cache up and trigger an error.
      mysql-test/suite/rpl/r/rpl_stm_implicit_commit_binlog.result:
        Updates the result file because non-trx-changes are written ahead of the
        transaction.
      mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result:
        Updates the result file because non-trx-changes are written ahead of the
        transaction.
      mysql-test/suite/rpl/r/rpl_stm_start_stop_slave.result:
        Sets binlog_direct_non_transactional_updates to FALSE in order to avoid changing the test case and its result file.
      mysql-test/suite/rpl/r/rpl_stm_stop_middle_group.result:
        Sets binlog_direct_non_transactional_updates to FALSE in order to avoid changing the test case and its result file.
      mysql-test/suite/rpl/t/rpl_begin_commit_rollback.test:
        Sets binlog_direct_non_transactional_updates to FALSE in order to avoid changing the test case and its result file.
      mysql-test/suite/rpl/t/rpl_stm_start_stop_slave.test:
        Sets binlog_direct_non_transactional_updates to FALSE in order to avoid changing the test case and its result file.
      mysql-test/suite/rpl/t/rpl_stm_stop_middle_group.test:
        Sets binlog_direct_non_transactional_updates to FALSE in order to avoid changing the test case and its result file.
      sql/log.cc:
        Verifies if changes should be written to either the trx-cache or non-trx-cache through the use of the function use_trans_cache(). It also organizes the code.
      sql/log.h:
        Changes the signature of some functions by adding the modifier "const" to the thd parameter. Specifically, the following functions are changed: 
                bool trans_has_updated_trans_table(const THD* thd);
                bool stmt_has_updated_trans_table(const THD *thd);
                bool use_trans_cache(const THD*, bool is_transactional);
      sql/share/errmsg-utf8.txt:
        Creates error messages to report when an user tries to change the new option
        binlog_direct_non_transactional_updates within a transaction or a procedure/
        function/trigger.
      sql/share/errmsg.txt:
        Creates error messages to report when an user tries to change the new option
        binlog_direct_non_transactional_updates within a transaction or a procedure/
        function/trigger.
      sql/sql_class.h:
        Adds the new option binlog_direct_non_transactional_updates.
      sql/sys_vars.cc:
        Adds the new option binlog_direct_non_transactional_updates.
      support-files/my-small.cnf.sh:
        Adds binlog-direct-non-transactional-updates to the example file. By default
        the option is disabled.
      b146191e
  8. 07 Jan, 2010 1 commit
  9. 22 Dec, 2009 1 commit
    • Sergei Golubchik's avatar
      WL#4738 streamline/simplify @@variable creation process · 6f262201
      Sergei Golubchik authored
      Bug#16565 mysqld --help --verbose does not order variablesBug#20413 sql_slave_skip_counter is not shown in show variables
      Bug#20415 Output of mysqld --help --verbose is incomplete
      Bug#25430 variable not found in SELECT @@global.ft_max_word_len;
      Bug#32902 plugin variables don't know their names
      Bug#34599 MySQLD Option and Variable Reference need to be consistent in formatting!
      Bug#34829 No default value for variable and setting default does not raise error
      Bug#34834 ? Is accepted as a valid sql mode
      Bug#34878 Few variables have default value according to documentation but error occurs  
      Bug#34883 ft_boolean_syntax cant be assigned from user variable to global var.
      Bug#37187 `INFORMATION_SCHEMA`.`GLOBAL_VARIABLES`: inconsistent status
      Bug#40988 log_output_basic.test succeeded though syntactically false.
      Bug#41010 enum-style command-line options are not honoured (maria.maria-recover fails)
      Bug#42103 Setting key_buffer_size to a negative value may lead t...
      6f262201
  10. 04 Dec, 2009 1 commit
    • Alfranio Correia's avatar
      BUG#45292 orphan binary log created when starting server twice · 0fafee45
      Alfranio Correia authored
      This patch fixes three bugs as follows. First, aborting the server while purging
      binary logs might generate orphan files due to how the purge operation was
      implemented:
      
                (purge routine - sql/log.cc - MYSQL_BIN_LOG::purge_logs)
      
            1 - register the files to be removed in a temporary buffer.
            2 - update the log-bin.index.
            3 - flush the log-bin.index.
            4 - erase the files whose names where register in the temporary buffer
            in step 1.
      
      Thus a failure while  executing step 4 would generate an orphan file. Second,
      a similar issue might happen while creating a new binary as follows:
      
                (create routine - sql/log.cc - MYSQL_BIN_LOG::open)
      
            1 - open the new log-bin.
            2 - update the log-bin.index.
      
      Thus a failure while executing step 1 would generate an orphan file.
      
      To fix these issues, we record the files to be purged or created before really
      removing or adding them. So if a failure happens such records can be used to
      automatically remove dangling files. The new steps might be outlined as follows:
      
                (purge routine - sql/log.cc - MYSQL_BIN_LOG::purge_logs)
      
            1 - register the files to be removed in the log-bin.~rec~ placed in
            the data directory.
            2 - update the log-bin.index.
            3 - flush the log-bin.index.
            4 - delete the log-bin.~rec~.
      
                (create routine - sql/log.cc - MYSQL_BIN_LOG::open)
      
            1 - register the file to be created in the log-bin.~rec~
            placed in the data directory.
            2 - open the new log-bin.
            3 - update the log-bin.index.
            4 - delete the log-bin.~rec~.
      
                (recovery routine - sql/log.cc - MYSQL_BIN_LOG::open_index_file)
      
            1 - open the log-bin.index.
            2 - open the log-bin.~rec~.
            3 - for each file in log-bin.~rec~.
              3.1 Check if the file is in the log-bin.index and if so ignore it.
              3.2 Otherwise, delete it.
      
      The third issue can be described as follows. The purge operation was allowing
      to remove a file in use thus leading to the loss of data and possible
      inconsistencies between the master and slave. Roughly, the routine was only
      taking into account the dump threads and so if a slave was not connect the
      file might be delete even though it was in use.
      0fafee45
  11. 03 Dec, 2009 1 commit
    • unknown's avatar
      WL#5142 FLUSH LOGS should take optional arguments for which log(s) to flush · 40d7826e
      unknown authored
      Support for flushing individual logs, so that the user can
      selectively flush a subset of the server logs.
      
      Flush of individual logs is done according to the 
      following syntax:
      
        FLUSH <log_category> LOGS;
      
      The syntax is extended so that the user is able to flush a
      subset of logs:
      
        FLUSH [log_category LOGS,];
      
      where log_category is one of:
        SLOW
        ERROR
        BINARY
        ENGINE
        GENERAL
        RELAY.
      
      
      mysql-test/suite/rpl/r/rpl_flush_logs.result:
        Test result for WL#5142.
      mysql-test/suite/rpl/t/rpl_flush_logs.test:
        Added the test file to verify if the 'flush individual log' 
        statement works fine.
      sql/log.cc:
        Added the two functions to flush slow and general log.
      sql/sql_parse.cc:
        Added code to flush specified logs against the option.
      sql/sql_yacc.yy:
        Added code to parse the 'flush * log' statement syntax and 
        set its option to Lex->type.
      40d7826e
  12. 22 Nov, 2009 1 commit
    • Luis Soares's avatar
      BUG#40611: MySQL cannot make a binary log after sequential number · cdb648b4
      Luis Soares authored
      beyond unsigned long.
      BUG#44779: binlog.binlog_max_extension may be causing failure on 
      next test in PB
                  
      NOTE1: this is the backport to next-mr.
      NOTE2: already includes patch for BUG#44779.
                  
      Binlog file extensions would turn into negative numbers once the
      variable used to hold the value reached maximum for signed
      long. Consequently, incrementing value to the next (negative) number
      would lead to .000000 extension, causing the server to fail.
                              
      This patch addresses this issue by not allowing negative extensions
      and by returning an error on find_uniq_filename, when the limit is
      reached. Additionally, warnings are printed to the error log when the
      limit is approaching. FLUSH LOGS will also report warnings to the
      user, if the extension number has reached the limit. The limit has been
      set to 0x7FFFFFFF as the maximum.
      
      mysql-test/suite/binlog/t/binlog_max_extension.test:
        Test case added that checks the maximum available number for
        binlog extensions.
      sql/log.cc:
        Changes to find_uniq_filename and test_if_number.
      sql/log.h:
        Added macros with values for MAX_LOG_UNIQUE_FN_EXT and
        LOG_WARN_UNIQUE_FN_EXT_LEFT, as suggested in review.
      cdb648b4
  13. 20 Nov, 2009 1 commit
    • Andrei Elkin's avatar
      Bug #48463 backporting from 6.0-rpl to celosia a set of bugs · 4b2663ea
      Andrei Elkin authored
      The mentioned on the bug report set of bugs fixes have not be pushed to the main trees.
      
      Fixed with extracting commits done to 6.0-rpl tree and applying them to the main 5.1.
      Notes.
      1. part of changes - the mtr's specific - were packported to the main 5.0 tree for mtr v1
         as http://lists.mysql.com/commits/46562
         However, there is no that fix anymore in the mtr v2. (This fact was mailed to mtr maintaining
         people).
      
      2. Bug@36929  crash in kill_zombie_dump_threads-> THD::awake() with replication tests
         is not backported because the base code of the patch is libevent and that was removed
         from the main trees due to its instability.
      
      client/mysqlbinlog.cc:
        fixes for BUG#35546
      mysql-test/suite/rpl/r/rpl_bug41902.result:
        the new tests result file is added.
      mysql-test/suite/rpl/t/rpl_bug41902-slave.opt:
        conf file for bug41902 testing is added.
      mysql-test/suite/rpl/t/rpl_bug41902.test:
        regression tests for Bug #41902 is added.
      sql/log.cc:
        collection of changes due to Bug #48463.
      sql/log.h:
        collection of changes due to Bug #48463.
      sql/rpl_rli.h:
        collection of changes due to Bug #48463.
      sql/slave.cc:
        collection of changes due to Bug #48463.
      sql/sql_repl.cc:
        collection of changes due to Bug #48463.
      4b2663ea
  14. 03 Nov, 2009 1 commit
    • Alfranio Correia's avatar
      WL#2687 WL#5072 BUG#40278 BUG#47175 · cbdaeb46
      Alfranio Correia authored
      Non-transactional updates that take place inside a transaction present problems
      for logging because they are visible to other clients before the transaction
      is committed, and they are not rolled back even if the transaction is rolled
      back. It is not always possible to log correctly in statement format when both
      transactional and non-transactional tables are used in the same transaction.
      
      In the current patch, we ensure that such scenario is completely safe under the
      ROW and MIXED modes.
      cbdaeb46
  15. 07 Oct, 2009 1 commit
  16. 29 Sep, 2009 3 commits
    • Alfranio Correia's avatar
      BUG#35542 Add option to sync master and relay log to disk after every event · f758e38b
      Alfranio Correia authored
      BUG#31665 sync_binlog should cause relay logs to be synchronized
      
      NOTE: Backporting the patch to next-mr.
            
      Add sync_relay_log option to server, this option works for relay log 
      the same as option sync_binlog for binlog. This option also synchronize
      master info to disk when set to non-zero value.
                  
      Original patches from Sinisa and Mark, with some modifications
      f758e38b
    • Luis Soares's avatar
      BUG#40611: MySQL cannot make a binary log after sequential number · 276c0557
      Luis Soares authored
      beyond unsigned long.
      BUG#44779: binlog.binlog_max_extension may be causing failure on 
      next test in PB
            
      NOTE1: this is the backport to next-mr.
      NOTE2: already includes patch for BUG#44779.
            
      Binlog file extensions would turn into negative numbers once the
      variable used to hold the value reached maximum for signed
      long. Consequently, incrementing value to the next (negative) number
      would lead to .000000 extension, causing the server to fail.
                        
      This patch addresses this issue by not allowing negative extensions
      and by returning an error on find_uniq_filename, when the limit is
      reached. Additionally, warnings are printed to the error log when the
      limit is approaching. FLUSH LOGS will also report warnings to the
      user, if the extension number has reached the limit. The limit has been
      set to 0x7FFFFFFF as the maximum.
      
      mysql-test/suite/binlog/t/binlog_max_extension.test:
        Test case added that checks the maximum available number for
        binlog extensions.
      sql/log.cc:
        Changes to find_uniq_filename and test_if_number.
      sql/log.h:
        Added macros with values for MAX_LOG_UNIQUE_FN_EXT and
        LOG_WARN_UNIQUE_FN_EXT_LEFT, as suggested in review.
      276c0557
    • Andrei Elkin's avatar
      WL#342 heartbeat · ab7931fc
      Andrei Elkin authored
      backporting from 6.0 code base to 5.1.
      ab7931fc
  17. 26 Sep, 2009 1 commit
  18. 18 Jun, 2009 1 commit
    • Alfranio Correia's avatar
      BUG#43929 binlog corruption when max_binlog_cache_size is exceeded · eb708edc
      Alfranio Correia authored
      Large transactions and statements may corrupt the binary log if the size of the
      cache, which is set by the max_binlog_cache_size, is not enough to store the
      the changes.
      
      In a nutshell, to fix the bug, we save the position of the next character in the
      cache before starting processing a statement. If there is a problem, we simply
      restore the position thus removing any effect of the statement from the cache.
      Unfortunately, to avoid corrupting the binary log, we may end up loosing changes
      on non-transactional tables if they do not fit in the cache. In such cases, we
      store an Incident_log_event in order to stop the slave and alert users that some
      changes were not logged.
      
      Precisely, for every non-transactional changes that do not fit into the cache,
      we do the following:
        a) the statement is *not* logged
        b) an incident event is logged after committing/rolling back the transaction,
        if any. Note that if a failure happens before writing the incident event to
        the binary log, the slave will not stop and the master will not have reported
        any error.
        c) its respective statement gives an error
      
      For transactional changes that do not fit into the cache, we do the following:
        a) the statement is *not* logged
        b) its respective statement gives an error
      
      To work properly, this patch requires two additional things. Firstly, callers to
      MYSQL_BIN_LOG::write and THD::binlog_query must handle any error returned and
      take the appropriate actions such as undoing the effects of a statement. We
      already changed some calls in the sql_insert.cc, sql_update.cc and sql_insert.cc
      modules but the remaining calls spread all over the code should be handled in
      BUG#37148. Secondly, statements must be either classified as DDL or DML because
      DDLs that do not get into the cache must generate an incident event since they
      cannot be rolled back.
      eb708edc
  19. 30 May, 2009 1 commit
    • He Zhenxing's avatar
      BUG#41948 Query_log_event constructor needlessly contorted · 38e27260
      He Zhenxing authored
      Make the caller of Query_log_event, Execute_load_log_event
      constructors and THD::binlog_query to provide the error code
      instead of having the constructors to figure out the error code.
      
      sql/log_event.cc:
        Changed constructors of Query_log_event and Execute_load_log_event to accept the error code argument instead of figuring it out by itself
      sql/log_event.h:
        Changed constructors of Query_log_event and Execute_load_log_event to accept the error code argument
      38e27260
  20. 28 Sep, 2008 1 commit
    • He Zhenxing's avatar
      BUG#38734 rpl_server_id2 sync_with_master failed · a4cd8862
      He Zhenxing authored
      Rotate event is automatically generated and written when rotating binary
      log or relay log. Rotate events for relay logs are usually ignored by slave
      SQL thread becuase they have the same server id as that of the slave.
      However, if --replicate-same-server-id is enabled, rotate event
      for relay log would be treated as if it's a rotate event from master, and
      would be executed by slave to update the rli->group_master_log_name and
      rli->group_master_log_pos to a wrong value and cause the MASTER_POS_WAIT
      function to fail and return NULL.
      
      This patch fixed this problem by setting a flag bit (LOG_EVENT_RELAY_LOG_F)
      in the event to tell the SQL thread to ignore these Rotate events generated
      for relay logs.
      
      This patch also added another binlog event flag bit (LOG_EVENT_ARTIFICIAL_F)
      to distinquish faked events, the method used before this was by checking if
      log_pos was zero.
      
      
      sql/log.h:
        Add a member to MYSQL_BIN_LOG to distinguish binary log from relay log.
      sql/log_event.cc:
        Change artificial_event member to LOG_EVENT_ARTIFICIAL_F flag
        
        If LOG_EVENT_RELAY_LOG_F is set in the event flags for a rotate event, ignore it when updating position
        
        Refactored the code in Rotate_log_event::do_update_pos
      sql/log_event.h:
        Add LOG_EVENT_RELAY_LOG_F flag to Log_event flags
        Add RELAY_LOG flag to Rotate_log_event flags
      sql/sql_repl.cc:
        Set LOG_EVENT_ARTIFICIAL_F for fake rotate events
      a4cd8862
  21. 03 Sep, 2008 1 commit
    • Mats Kindahl's avatar
      Bug #32709: Assertion failed: trx_data->empty(), file log.cc · 874c3a25
      Mats Kindahl authored
      The assertion indicates that some data was left in the transaction
      cache when the server was shut down, which means that a previous
      statement did not commit or rollback correctly.
      
      What happened was that a bug in the rollback of a transactional
      table caused the transaction cache to be emptied, but not reset.
      The error can be triggered by having a failing UPDATE or INSERT,
      on a transactional table, causing an implicit rollback.
      
      Fixed by always flushing the pending event to reset the state
      properly.
      
      
      mysql-test/extra/rpl_tests/rpl_row_basic.test:
        Testing that a failed update (that writes some rows to the
        transaction cache) does not cause the transaction cache to
        hold on to the data or forget to reset the transaction cache.
      sql/log.cc:
        Added call to remove pending event when the transaction cache
        is emptied instead of written to binary log. The call will also
        clear the outstanding table map count so that the cache is not
        left it in a state of "empty but not reset".
        
        Added function MYSQL_BIN_LOG::remove_pending_rows_event().
      sql/log.h:
        Added function MYSQL_BIN_LOG::remove_pending_rows_event().
      sql/sql_class.cc:
        Adding function THD::binlog_remove_pending_rows_event().
      sql/sql_class.h:
        Adding function THD::binlog_remove_pending_rows_event().
      874c3a25
  22. 18 Oct, 2007 1 commit
    • unknown's avatar
      Bug#21557 entries in the general query log truncated at 1000 characters. · e56bf76c
      unknown authored
      The general log write function (general_log_print) uses printf style
      arguments which need to be pre-processed, meaning that the all arguments
      are copied to a single buffer and the problem is that the buffer size is
      constant (1022 characters) but queries can be much larger then this.
      
      The solution is to introduce a new log write function that accepts a
      buffer and it's length as arguments. The function is to be used when
      a formatted output is not required, which is the case for almost all
      query write-to-log calls.
      
      This is a incompatible change with respect to the log format of prepared
      statements.
      
      
      mysql-test/r/log_tables.result:
        Add test case result for Bug#21557
      mysql-test/t/log_tables.test:
        Add test case for Bug#21557
      sql/log.cc:
        Introduce the logger function general_log_write which is similar to
        general_log_print but accepts a single buffer and the buffer length.
        The function doesn't perform any formatting and sends the buffer
        directly to the underlying log handlers.
      sql/log.h:
        Introduce the logger function general_log_write.
      sql/log_event.cc:
        Pass the query buffer directly to the logger function, formatting
        is not required on this case.
      sql/mysql_priv.h:
        Prototype for the logger function general_log_write.
      sql/sp_head.cc:
        Pass the query buffer directly to the logger function, formatting
        is not required on this case.
      sql/sql_parse.cc:
        Pass the buffer directly to the logger function when formatting
        is not required.
      sql/sql_prepare.cc:
        Don't log the statement id, it avoids making a extra copy of the query
        and the query is not truncated anymore if it exceeds the limit.
      e56bf76c
  23. 04 Oct, 2007 1 commit
    • unknown's avatar
      manual merge · c176eaf9
      unknown authored
      sql/log.h:
        manual merge: moving 5.0 hunk into the correct file.
      c176eaf9
  24. 16 Aug, 2007 1 commit
    • unknown's avatar
      Renaming RELAY_LOG_INFO and st_relay_log_info to follow coding standards · 8dace2bf
      unknown authored
      (and be more friendly to Doxygen by removing unnecessary typedefs).
      
      
      sql/log.cc:
        Renaming struct st_relay_log_info to class Relay_log_info.
      sql/log.h:
        Renaming struct st_relay_log_info to class Relay_log_info.
      sql/log_event.cc:
        Renaming RELAY_LOG_INFO to Relay_log_info.
      sql/log_event.h:
        Renaming struct st_relay_log_info to class Relay_log_info.
        Renaming RELAY_LOG_INFO to Relay_log_info.
        Removing typedef RELAY_LOG_INFO.
      sql/log_event_old.cc:
        Renaming RELAY_LOG_INFO to Relay_log_info.
      sql/log_event_old.h:
        Renaming RELAY_LOG_INFO to Relay_log_info.
      sql/rpl_mi.h:
        Renaming RELAY_LOG_INFO to Relay_log_info.
      sql/rpl_record.cc:
        Renaming RELAY_LOG_INFO to Relay_log_info.
      sql/rpl_record.h:
        Renaming RELAY_LOG_INFO to Relay_log_info.
      sql/rpl_record_old.cc:
        Renaming RELAY_LOG_INFO to Relay_log_info.
      sql/rpl_record_old.h:
        Renaming RELAY_LOG_INFO to Relay_log_info.
      sql/rpl_rli.cc:
        Renaming struct st_relay_log_info to class Relay_log_info.
        Renaming RELAY_LOG_INFO to Relay_log_info.
      sql/rpl_rli.h:
        Renaming struct st_relay_log_info to class Relay_log_info.
        Renaming RELAY_LOG_INFO to Relay_log_info.
        Removing typedef RELAY_LOG_INFO.
      sql/rpl_utility.cc:
        Renaming RELAY_LOG_INFO to Relay_log_info.
      sql/rpl_utility.h:
        Renaming struct st_relay_log_info to class Relay_log_info.
        Renaming RELAY_LOG_INFO to Relay_log_info.
        Removing typedef RELAY_LOG_INFO.
      sql/slave.cc:
        Renaming RELAY_LOG_INFO to Relay_log_info.
      sql/slave.h:
        Renaming struct st_relay_log_info to class Relay_log_info.
        Renaming RELAY_LOG_INFO to Relay_log_info.
        Removing typedef RELAY_LOG_INFO.
      sql/sql_binlog.cc:
        Renaming RELAY_LOG_INFO to Relay_log_info.
      sql/sql_class.h:
        Renaming struct st_relay_log_info to class Relay_log_info.
        Renaming RELAY_LOG_INFO to Relay_log_info.
        Removing typedef RELAY_LOG_INFO.
      sql/sql_repl.cc:
        Renaming RELAY_LOG_INFO to Relay_log_info.
      8dace2bf
  25. 30 Jul, 2007 1 commit
    • unknown's avatar
      Slow query log to file now displays queries with microsecond precission · 21e25f8b
      unknown authored
      --long-query-time is now given in seconds with microseconds as decimals
      --min_examined_row_limit added for slow query log
      long_query_time user variable is now double with 6 decimals
      Added functions to get time in microseconds
      Added faster time() functions for system that has gethrtime()  (Solaris)
      We now do less time() calls.
      Added field->in_read_set() and field->in_write_set() for easier field manipulation by handlers
      set_var.cc and my_getopt() can now handle DOUBLE variables.
      All time() calls changed to my_time()
      my_time() now does retry's if time() call fails.
      Added debug function for stopping in mysql_admin_table() when tables are locked
      Some trivial function and struct variable renames to avoid merge errors.
      Fixed compiler warnings
      Initialization of some time variables on windows moved to my_init() 
      
      
      include/my_getopt.h:
        Added support for double arguments
      include/my_sys.h:
        Fixed wrong type to packfrm()
        Added new my_time fun...
      21e25f8b
  26. 27 Jul, 2007 2 commits
    • unknown's avatar
      Code review changes · 94620433
      unknown authored
      94620433
    • unknown's avatar
      WL#3984 (Revise locking of mysql.general_log and mysql.slow_log) · be041091
      unknown authored
      Bug#25422 (Hang with log tables)
      Bug 17876 (Truncating mysql.slow_log in a SP after using cursor locks the
                thread)
      Bug 23044 (Warnings on flush of a log table)
      Bug 29129 (Resetting general_log while the GLOBAL READ LOCK is set causes
                 a deadlock)
      
      Prior to this fix, the server would hang when performing concurrent
      ALTER TABLE or TRUNCATE TABLE statements against the LOG TABLES,
      which are mysql.general_log and mysql.slow_log.
      
      The root cause traces to the following code:
      in sql_base.cc, open_table()
        if (table->in_use != thd)
        {
          /* wait_for_condition will unlock LOCK_open for us */
          wait_for_condition(thd, &LOCK_open, &COND_refresh);
        }
      The problem with this code is that the current implementation of the
      LOGGER creates 'fake' THD objects, like
      - Log_to_csv_event_handler::general_log_thd
      - Log_to_csv_event_handler::slow_log_thd
      which are not associated to a real thread running in the server,
      so that waiting for these non-existing threads to release table locks
      cause the dead lock.
      
      In general, the design of Log_to_csv_event_handler does not fit into the
      general architecture of the server, so that the concept of general_log_thd
      and slow_log_thd has to be abandoned:
      - this implementation does not work with table locking
      - it will not work with commands like SHOW PROCESSLIST
      - having the log tables always opened does not integrate well with DDL
      operations / FLUSH TABLES / SET GLOBAL READ_ONLY
      
      With this patch, the fundamental design of the LOGGER has been changed to:
      - always open and close a log table when writing a log
      - remove totally the usage of fake THD objects
      - clarify how locking of log tables is implemented in general.
      
      See WL#3984 for details related to the new locking design.
      
      Additional changes (misc bugs exposed and fixed):
      
      1)
      
      mysqldump which would ignore some tables in dump_all_tables_in_db(),
       but forget to ignore the same in dump_all_views_in_db().
      
      2)
      
      mysqldump would also issue an empty "LOCK TABLE" command when all the tables
      to lock are to be ignored (numrows == 0), instead of not issuing the query.
      
      3)
      
      Internal errors handlers could intercept errors but not warnings
      (see sql_error.cc).
      
      4)
      
      Implementing a nested call to open tables, for the performance schema tables,
      exposed an existing bug in remove_table_from_cache(), which would perform:
        in_use->some_tables_deleted=1;
      against another thread, without any consideration about thread locking.
      This call inside remove_table_from_cache() was not required anyway,
      since calling mysql_lock_abort() takes care of aborting -- cleanly -- threads
      that might hold a lock on a table.
      This line (in_use->some_tables_deleted=1) has been removed.
      
      
      sql/handler.cc:
        Moved logic for system / log tables in the SQL layer.
      sql/handler.h:
        Moved logic for system / log tables in the SQL layer.
      sql/lock.cc:
        Revised locking of log tables
      sql/log.cc:
        Major cleanup: changed how log tables are locked / written to.
      sql/log.h:
        Major cleanup: changed how log tables are locked / written to.
      sql/mysql_priv.h:
        performance schema helpers
      sql/slave.cc:
        open_ltable() lock flags
      sql/sp.cc:
        open_ltable() lock flags
      sql/sql_acl.cc:
        open_ltable() lock flags
      sql/sql_class.h:
        performance schema helpers
      sql/sql_delete.cc:
        log tables cleanup in TRUNCATE
      sql/sql_error.cc:
        Internal handlers can also intercept warnings
      sql/sql_insert.cc:
        open_ltable() lock flags
      sql/sql_parse.cc:
        performance schema helpers
      sql/sql_plugin.cc:
        open_ltable() lock flags
      sql/sql_rename.cc:
        log tables cleanup in RENAME
      sql/sql_servers.cc:
        open_ltable() lock flags
      sql/sql_show.cc:
        Move INFORMATION_SCHEMA_NAME to table.cc
      sql/sql_table.cc:
        log tables cleanup (admin operations, ALTER TABLE)
      sql/sql_udf.cc:
        open_ltable() lock flags
      sql/table.cc:
        Implemented TABLE_CATEGORY.
      sql/share/errmsg.txt:
        Changed the wording and name of ER_CANT_READ_LOCK_LOG_TABLE
      sql/table.h:
        Implemented TABLE_CATEGORY.
      storage/csv/ha_tina.cc:
        Moved logic for system / log tables in the SQL layer.
      storage/csv/ha_tina.h:
        Moved logic for system / log tables in the SQL layer.
      storage/myisam/ha_myisam.cc:
        Moved logic for system / log tables in the SQL layer.
      storage/myisam/ha_myisam.h:
        Moved logic for system / log tables in the SQL layer.
      client/mysqldump.c:
        Don't lock tables in the ignore list.
        Don't issue empty LOCK TABLES queries.
      sql/sql_base.cc:
        log tables cleanup
        performance schema helpers
      mysql-test/r/ps.result:
        Adjust test results
      mysql-test/r/show_check.result:
        Adjust test results
      mysql-test/r/status.result:
        Adjust test results
      mysql-test/t/log_state.test:
        Added tests for Bug#29129
      mysql-test/t/ps.test:
        Make the test output deterministic
      mysql-test/t/show_check.test:
        Make the test output deterministic
      mysql-test/r/log_state.result:
        Changed the default location of the log output to LOG_FILE,
        for backward compatibility with MySQL 5.0
        ---
        Adjust test results
      mysql-test/r/log_tables.result:
        cleanup for -ps-protocol
      mysql-test/t/log_tables.test:
        cleanup for -ps-protocol
      sql/set_var.cc:
        Changed the default location of the log output to LOG_FILE,
        for backward compatibility with MySQL 5.0
        ---
        log tables cleanup
      be041091
  27. 17 Jun, 2007 1 commit
    • unknown's avatar
      Fix for bug #26380: LOCK TABLES + FLUSH LOGS causes deadlock · 548416b3
      unknown authored
      The log tables are by nature PERFORMANCE_SCHEMA tables,
      which should not be affected by SET GLOBAL READ_ONLY or FLUSH TABLES
      WITH READ LOCK.
      
      The implementation of FLUSH TABLES WITH READ LOCK already ignored log tables.
      Now with this patch, the implementation of LOCK TABLE also ignore a
      global read lock for log tables, which was the missing symmetry.
      
      
      mysql-test/r/flush.result:
        Fix for bug #26380: LOCK TABLES + FLUSH LOGS causes deadlock
          - test result.
      mysql-test/t/flush.test:
        Fix for bug #26380: LOCK TABLES + FLUSH LOGS causes deadlock
          - test case.
      sql/lock.cc:
        Fix for bug #26380: LOCK TABLES + FLUSH LOGS causes deadlock
          - logger.is_privileged_thread() used.
      sql/log.h:
        Fix for bug #26380: LOCK TABLES + FLUSH LOGS causes deadlock
          - LOGGER::is_privileged_thread() introduced that returns TRUE if a given thread 
            is either a general_log or a slow_log or a privileged thread.
      sql/sql_base.cc:
        Fix for bug #26380: LOCK TABLES + FLUSH LOGS causes deadlock
          - pass MYSQL_LOCK_IGNORE_GLOBAL_READ_LOCK to the mysql_lock_tables() in case of 
            call from a logger in order not to honor the GLOBAL READ LOCK 
            and to avoid possible deadlocks.
      548416b3
  28. 27 Apr, 2007 1 commit
    • unknown's avatar
      mysql-test/mysql-test-run.pl · 016a7652
      unknown authored
          provide the writable datadir for mysqld --help (for lower_case test)
      sql/log.h, sql/mysqld.cc
          make default binlog_format value to be 0 (for a hack of using
          GET_STR for enum to continue to work)
      
      
      mysql-test/mysql-test-run.pl:
        provide the writable datadir for mysqld --help (for lower_case test)
      sql/log.h:
        make default binlog_format value to be 0 (for a hack of using
        GET_STR for enum to continue to work)
      sql/mysqld.cc:
        make default binlog_format value to be 0 (for a hack of using
        GET_STR for enum to continue to work)
      016a7652
  29. 20 Mar, 2007 1 commit
    • unknown's avatar
      Bug #26079 max_binlog_size + innodb = not make new binlog and hang server · baaaaae2
      unknown authored
      There was hanging at binlog_commit by a thread executing autocommit query.
      
      The hang appeared to be due to an overly condtion for early return 
      from binlog_commit introduced by bug#20265 fix.
      
      Fixed with reverting the logic back to 5.0 version.
      
      
      mysql-test/extra/binlog_tests/binlog.test:
        added a regression test
      mysql-test/r/binlog_row_binlog.result:
        results changed
      mysql-test/r/binlog_stm_binlog.result:
        results changed
      sql/log.cc:
        Removing `all' conjuction arg from early return condition.
        There is nothing to execute by transaction if trx_data is empty.
        
        The work for rotate_and_purge is delayed till TC_LOG::unlog 
        (same as in 5.0 code)
      sql/log.h:
        singed because there are assert on positiveness
      baaaaae2
  30. 26 Feb, 2007 1 commit
    • unknown's avatar
      BUG#20141 "User-defined variables are not replicated properly for · 4b848119
      unknown authored
                SF/Triggers in SBR mode."
      BUG#14914 "SP: Uses of session variables in routines are not always replicated"
      BUG#25167 "Dupl. usage of user-variables in trigger/function is not replicated
                correctly"
      
      User-defined variables used inside of stored functions/triggers in
      statements which did not update tables directly were not replicated.
      We also had problems with replication of user-defined variables which
      were used in triggers (or stored functions called from table-updating
      statements) more than once.
      
      This patch addresses the first issue by enabling logging of all
      references to user-defined variables in triggers/stored functions
      and not only references from table-updating statements.
      
      The second issue stemmed from the fact that for user-defined
      variables used from triggers or stored functions called from
      table-updating statements we were writing binlog events for each
      reference instead of only one event for the first reference.
      This problem is already solved for stored functions called from
      non-updating statements with help of "event unioning" mechanism.
      So the patch simply extends this mechanism to the case affected.
      It also fixes small problem in this mechanism which caused wrong
      logging of references to user-variables in cases when non-updating
      statement called several stored functions which used the same
      variable and some of these function calls were omitted from binlog
      as they were not updating any tables.
      
      
      
      mysql-test/r/rpl_user_variables.result:
        BUG#20141 - User-defined variables are not replicated properly for 
                    SF/Triggers in SBR mode.
        This patch adds the correct results for execution of the added test 
        procedures to the rpl_user_variables test.
      mysql-test/t/rpl_user_variables.test:
        BUG#20141 - User-defined variables are not replicated properly for 
                    SF/Triggers in SBR mode.
        This patch adds additional tests to the rpl_user_variables test that test 
        many of the different ways user-defined variables can be required to be 
        replicated.
      sql/item_func.cc:
        BUG#20141 - User-defined variables are not replicated properly for SF/Triggers
                    in SBR mode.
        To properly log accesses to user-defined variables from stored 
        functions/triggers, the get_var_with_binlog() method needs to log references 
        to such variables even from non-table-updating statements within them.
      sql/log.cc:
        BUG#20141 - User-defined variables are not replicated properly for SF/Triggers 
                    in SBR mode.
        This patch modifies the start_union_events method to accept the query id from 
        a parameter. This allows callers to set the query_id to the id of the sub 
        statement such as a trigger or stored function. Which permits the code to 
        identify when a user defined variable has been used by the statement and this 
        already present in THD::user_var_event.
        
        Note:
        The changes to sql_class.cc, sp_head.cc, and log.cc are designed to allow the 
        proper replication of access to user-defined variables under a special test 
        case (the last case shown in rpl_user_variables.test).
      sql/log.h:
        BUG#20141 - User-defined variables are not replicated properly for 
                    SF/Triggers in SBR mode.
        This patch adds the query_id parameter to the calls to 
        mysql_bin_log.start_union_events().
      sql/sp_head.cc:
        BUG#20141 - User-defined variables are not replicated properly for 
                    SF/Triggers in SBR mode.
        This patch modifies the code to allow for cases where events for function calls
        have a separate union for each event and thus cannot use the query_id of the 
        caller as the start of the union. Thus, we use an artifically created query_id
        to set the start of the events.
        
        Note:
        The changes to sql_class.cc, sp_head.cc, and log.cc are designed to allow the 
        proper replication of access to user-defined variables under a special test 
        case (the last case shown in rpl_user_variables.test).
      sql/sql_class.cc:
        BUG#20141 - User-defined variables are not replicated properly for 
                    SF/Triggers in SBR mode.
        This patch adds the query_id parameter to the calls to 
        mysql_bin_log.start_union_events().
        
        Note:
        The changes to sql_class.cc, sp_head.cc, and log.cc are designed to allow 
        the proper replication of access to user-defined variables under a special 
        test case (the last case shown in rpl_user_variables.test).
      4b848119
  31. 28 Jan, 2007 1 commit
    • unknown's avatar
      After merge fixes · 4bef3e0a
      unknown authored
      Removed a lot of compiler warnings
      Removed not used variables, functions and labels
      Initialize some variables that could be used unitialized (fatal bugs)
      %ll -> %l
      
      
      BitKeeper/etc/ignore:
        added storage/archive/archive_reader
      BUILD/SETUP.sh:
        ccache now works again
      BUILD/compile-pentium-gcov:
        Added marker that we are using gcov and need special version of ccache
      client/mysql_upgrade.c:
        after merge fixes
      client/mysqlbinlog.cc:
        after merge fixes
      client/mysqldump.c:
        Removed compiler warnings
      client/mysqlimport.c:
        Removed compiler warnings
      client/mysqltest.c:
        Removed compiler warnings
      mysql-test/t/mysqlcheck.test:
        After merge fixes
      mysys/my_bitmap.c:
        After merge fix
      sql/event_data_objects.cc:
        Removed not used variable
      sql/event_db_repository.cc:
        Removed not used variable
      sql/event_queue.cc:
        Removed not used variable
      sql/field.cc:
        After merge fixes
      sql/filesort.cc:
        Added missing initialization (could cause core dump on EOM)
      sql/ha_ndbcluster.cc:
        After merge fixes
      ...
      4bef3e0a
  32. 27 Dec, 2006 1 commit
    • unknown's avatar
      Many files: · 68d41d6e
      unknown authored
        Changed header to GPL version 2 only
      
      
      client/mysqlslap.c:
        Changed header to GPL version 2 only
      include/atomic/nolock.h:
        Changed header to GPL version 2 only
      include/atomic/rwlock.h:
        Changed header to GPL version 2 only
      include/atomic/x86-gcc.h:
        Changed header to GPL version 2 only
      include/atomic/x86-msvc.h:
        Changed header to GPL version 2 only
      include/my_atomic.h:
        Changed header to GPL version 2 only
      include/my_trie.h:
        Changed header to GPL version 2 only
      include/my_vle.h:
        Changed header to GPL version 2 only
      include/mysql/plugin.h:
        Changed header to GPL version 2 only
      mysys/my_atomic.c:
        Changed header to GPL version 2 only
      mysys/my_getncpus.c:
        Changed header to GPL version 2 only
      mysys/my_memmem.c:
        Changed header to GPL version 2 only
      mysys/my_vle.c:
        Changed header to GPL version 2 only
      mysys/trie.c:
        Changed header to GPL version 2 only
      plugin/Makefile.am:
        Changed header to GPL version 2 only
      server-tools/instance-manager/IMService.h:
        Changed header to GPL version 2 only
      server-tools/instance-manager/WindowsService.h:
        Changed header to GPL version 2 only
      server-tools/instance-manager/exit_codes.h:
        Changed header to GPL version 2 only
      server-tools/instance-manager/user_management_commands.h:
        Changed header to GPL version 2 only
      sql/authors.h:
        Changed header to GPL version 2 only
      sql/contributors.h:
        Changed header to GPL version 2 only
      sql/event_data_objects.cc:
        Changed header to GPL version 2 only
      sql/event_data_objects.h:
        Changed header to GPL version 2 only
      sql/event_db_repository.cc:
        Changed header to GPL version 2 only
      sql/event_db_repository.h:
        Changed header to GPL version 2 only
      sql/event_queue.cc:
        Changed header to GPL version 2 only
      sql/event_queue.h:
        Changed header to GPL version 2 only
      sql/event_scheduler.cc:
        Changed header to GPL version 2 only
      sql/event_scheduler.h:
        Changed header to GPL version 2 only
      sql/events.cc:
        Changed header to GPL version 2 only
      sql/events.h:
        Changed header to GPL version 2 only
      sql/ha_ndbcluster_binlog.cc:
        Changed header to GPL version 2 only
      sql/ha_ndbcluster_binlog.h:
        Changed header to GPL version 2 only
      sql/ha_ndbcluster_tables.h:
        Changed header to GPL version 2 only
      sql/ha_partition.cc:
        Changed header to GPL version 2 only
      sql/ha_partition.h:
        Changed header to GPL version 2 only
      sql/item_xmlfunc.cc:
        Changed header to GPL version 2 only
      sql/item_xmlfunc.h:
        Changed header to GPL version 2 only
      sql/log.h:
        Changed header to GPL version 2 only
      sql/partition_element.h:
        Changed header to GPL version 2 only
      sql/partition_info.cc:
        Changed header to GPL version 2 only
      sql/partition_info.h:
        Changed header to GPL version 2 only
      sql/rpl_filter.cc:
        Changed header to GPL version 2 only
      sql/rpl_filter.h:
        Changed header to GPL version 2 only
      sql/rpl_injector.cc:
        Changed header to GPL version 2 only
      sql/rpl_injector.h:
        Changed header to GPL version 2 only
      sql/rpl_mi.cc:
        Changed header to GPL version 2 only
      sql/rpl_mi.h:
        Changed header to GPL version 2 only
      sql/rpl_rli.cc:
        Changed header to GPL version 2 only
      sql/rpl_rli.h:
        Changed header to GPL version 2 only
      sql/rpl_tblmap.cc:
        Changed header to GPL version 2 only
      sql/rpl_tblmap.h:
        Changed header to GPL version 2 only
      sql/rpl_utility.cc:
        Changed header to GPL version 2 only
      sql/rpl_utility.h:
        Changed header to GPL version 2 only
      sql/sql_binlog.cc:
        Changed header to GPL version 2 only
      sql/sql_partition.cc:
        Changed header to GPL version 2 only
      sql/sql_partition.h:
        Changed header to GPL version 2 only
      sql/sql_plugin.cc:
        Changed header to GPL version 2 only
      sql/sql_plugin.h:
        Changed header to GPL version 2 only
      sql/sql_servers.cc:
        Changed header to GPL version 2 only
      sql/sql_servers.h:
        Changed header to GPL version 2 only
      sql/sql_tablespace.cc:
        Changed header to GPL version 2 only
      sql/sql_yacc.yy.bak:
        Changed header to GPL version 2 only
      storage/Makefile.am:
        Changed header to GPL version 2 only
      storage/archive/Makefile.am:
        Changed header to GPL version 2 only
      storage/blackhole/Makefile.am:
        Changed header to GPL version 2 only
      storage/csv/Makefile.am:
        Changed header to GPL version 2 only
      storage/example/Makefile.am:
        Changed header to GPL version 2 only
      storage/federated/Makefile.am:
        Changed header to GPL version 2 only
      storage/innobase/handler/Makefile.am:
        Changed header to GPL version 2 only
      storage/ndb/include/kernel/signaldata/AllocNodeId.hpp:
        Changed header to GPL version 2 only
      storage/ndb/include/kernel/signaldata/CreateFilegroup.hpp:
        Changed header to GPL version 2 only
      storage/ndb/include/kernel/signaldata/CreateFilegroupImpl.hpp:
        Changed header to GPL version 2 only
      storage/ndb/include/kernel/signaldata/CreateObj.hpp:
        Changed header to GPL version 2 only
      storage/ndb/include/kernel/signaldata/DictObjOp.hpp:
        Changed header to GPL version 2 only
      storage/ndb/include/kernel/signaldata/DihFragCount.hpp:
        Changed header to GPL version 2 only
      storage/ndb/include/kernel/signaldata/DropFilegroup.hpp:
        Changed header to GPL version 2 only
      storage/ndb/include/kernel/signaldata/DropFilegroupImpl.hpp:
        Changed header to GPL version 2 only
      storage/ndb/include/kernel/signaldata/DropObj.hpp:
        Changed header to GPL version 2 only
      storage/ndb/include/kernel/signaldata/Extent.hpp:
        Changed header to GPL version 2 only
      storage/ndb/include/kernel/signaldata/LgmanContinueB.hpp:
        Changed header to GPL version 2 only
      storage/ndb/include/kernel/signaldata/PgmanContinueB.hpp:
        Changed header to GPL version 2 only
      storage/ndb/include/kernel/signaldata/RestoreContinueB.hpp:
        Changed header to GPL version 2 only
      storage/ndb/include/kernel/signaldata/RestoreImpl.hpp:
        Changed header to GPL version 2 only
      storage/ndb/include/kernel/signaldata/RouteOrd.hpp:
        Changed header to GPL version 2 only
      storage/ndb/include/kernel/signaldata/TsmanContinueB.hpp:
        Changed header to GPL version 2 only
      storage/ndb/include/ndbapi/NdbIndexStat.hpp:
        Changed header to GPL version 2 only
      storage/ndb/ndbapi-examples/mgmapi_logevent/mgmapi_logevent.cpp:
        Changed header to GPL version 2 only
      storage/ndb/ndbapi-examples/mgmapi_logevent_dual/mgmapi_logevent_dual.cpp:
        Changed header to GPL version 2 only
      storage/ndb/ndbapi-examples/ndbapi_async/ndbapi_async.cpp:
        Changed header to GPL version 2 only
      storage/ndb/ndbapi-examples/ndbapi_async1/ndbapi_async1.cpp:
        Changed header to GPL version 2 only
      storage/ndb/ndbapi-examples/ndbapi_event/ndbapi_event.cpp:
        Changed header to GPL version 2 only
      storage/ndb/ndbapi-examples/ndbapi_retries/ndbapi_retries.cpp:
        Changed header to GPL version 2 only
      storage/ndb/ndbapi-examples/ndbapi_scan/ndbapi_scan.cpp:
        Changed header to GPL version 2 only
      storage/ndb/ndbapi-examples/ndbapi_simple/ndbapi_simple.cpp:
        Changed header to GPL version 2 only
      storage/ndb/ndbapi-examples/ndbapi_simple_dual/ndbapi_simple_dual.cpp:
        Changed header to GPL version 2 only
      storage/ndb/ndbapi-examples/ndbapi_simple_index/ndbapi_simple_index.cpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/blocks/dbdih/printSysfile.cpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/blocks/dbtup/DbtupVarAlloc.cpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/blocks/dbtup/Undo_buffer.cpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/blocks/dbtup/Undo_buffer.hpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/blocks/dbtup/tuppage.cpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/blocks/dbtup/tuppage.hpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/blocks/dbtux/DbtuxStat.cpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/blocks/diskpage.hpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/blocks/lgman.cpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/blocks/lgman.hpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/blocks/pgman.cpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/blocks/pgman.hpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/blocks/print_file.cpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/blocks/record_types.hpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/blocks/restore.cpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/blocks/restore.hpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/blocks/tsman.cpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/blocks/tsman.hpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/vm/DLCFifoList.hpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/vm/DLCHashTable.hpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/vm/DynArr256.cpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/vm/DynArr256.hpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/vm/KeyTable2Ref.hpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/vm/LinearPool.hpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/vm/NdbdSuperPool.cpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/vm/NdbdSuperPool.hpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/vm/Pool.cpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/vm/Pool.hpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/vm/RWPool.cpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/vm/RWPool.hpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/vm/Rope.hpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/vm/SLFifoList.hpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/vm/WOPool.cpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/vm/WOPool.hpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/vm/bench_pool.cpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/vm/ndbd_malloc_impl.cpp:
        Changed header to GPL version 2 only
      storage/ndb/src/kernel/vm/ndbd_malloc_impl.hpp:
        Changed header to GPL version 2 only
      storage/ndb/src/mgmsrv/ParamInfo.cpp:
        Changed header to GPL version 2 only
      storage/ndb/src/ndbapi/NdbIndexStat.cpp:
        Changed header to GPL version 2 only
      storage/ndb/test/ndbapi/testIndexStat.cpp:
        Changed header to GPL version 2 only
      storage/ndb/test/tools/listen.cpp:
        Changed header to GPL version 2 only
      storage/ndb/tools/restore/ndb_nodegroup_map.h:
        Changed header to GPL version 2 only
      strings/my_strchr.c:
        Changed header to GPL version 2 only
      unittest/mysys/base64-t.c:
        Changed header to GPL version 2 only
      unittest/mysys/bitmap-t.c:
        Changed header to GPL version 2 only
      unittest/mysys/my_atomic-t.c:
        Changed header to GPL version 2 only
      unittest/mytap/tap.c:
        Changed header to GPL version 2 only
      unittest/mytap/tap.h:
        Changed header to GPL version 2 only
      win/Makefile.am:
        Changed header to GPL version 2 only
      68d41d6e
  33. 21 Dec, 2006 1 commit
    • unknown's avatar
      BUG#22864 (Rollback following CREATE... SELECT discards 'CREATE TABLE' · 588fcc72
      unknown authored
      from log):
      When row-based logging is used, the CREATE-SELECT is written as two
      parts: as a CREATE TABLE statement and as the rows for the table. For
      both transactional and non-transactional tables, the CREATE TABLE
      statement was written to the transaction cache, as were the rows, and
      on statement end, the entire transaction cache was written to the binary
      log if the table was non-transactional. For transactional tables, the
      events were kept in the transaction cache until end of transaction (or
      statement that were not part of a transaction).
      
      For the case when AUTOCOMMIT=0 and we are creating a transactional table
      using a create select, we would then keep the CREATE TABLE statement and
      the rows for the CREATE-SELECT, while executing the following statements.
      On a rollback, the transaction cache would then be cleared, which would
      also remove the CREATE TABLE statement. Hence no table would be created
      on the slave, while there is an empty table on the master.
      
      This relates to BUG#22865 where the table being created exists on the
      master, but not on the slave during insertion of rows into the newly
      created table. This occurs since the CREATE TABLE statement were still
      in the transaction cache until the statement finished executing, and
      possibly longer if the table was transactional.
      
      This patch changes the behaviour of the CREATE-SELECT statement by
      adding an implicit commit at the end of the statement when creating
      non-temporary tables. Hence, non-temporary tables will be written to the
      binary log on completion, and in the even of AUTOCOMMIT=0, a new
      transaction will be started. Temporary tables do not commit an ongoing
      transaction: neither as a pre- not a post-commit.
      
      The events for both transactional and non-transactional tables are
      saved in the transaction cache, and written to the binary log at end
      of the statement.
      
      
      mysql-test/r/rpl_row_create_table.result:
        Result change
      mysql-test/t/rpl_row_create_table.test:
        Requring InnoDB for slave as well.
        Adding test CREATE-SELECT that is rolled back explicitly.
        Changing binlog positions.
      sql/log.cc:
        Adding helper class to handle lock/unlock of mutexes using RAII.
        Factoring out code into write_cache() function to transaction cache
          to binary log.
        Adding function THD::binlog_flush_transaction_cache() to flush the
          transaction cache to the binary log file.
        Factoring out code into binlog_set_stmt_begin() to set the beginning
          of statement savepoint.
        Clearing before statement point when transaction cache is truncated
         so that these points are out of range.
      sql/log.h:
        Adding method MYSQL_BIN_LOG::write_cache()
      sql/log_event.h:
        Replicating OPTION_NOT_AUTOCOMMIT flag (see changeset comment)
      sql/mysql_priv.h:
        Although left-shifting signed integer values is well-defined,
        it has potential for strange errors. Using unsigned long long
        instead of signed long long since this is the type of the options
        flags.
      sql/slave.cc:
        Adding printout of transaction-critical thread flags.
      sql/sql_class.h:
        Adding function THD::binlog_flush_transaction_cache()
        Adding function THD::binlog_set_stmt_begin()
      sql/sql_insert.cc:
        Adding code to cache events for a CREATE-SELECT statement.
        Disabling binlog for SBR (but not RBR) when sending error for select part
        of CREATE-SELECT statement.
        Adding implicit commit at end of statement for non-temporary tables.
      mysql-test/t/rpl_row_create_table-slave.opt:
        New BitKeeper file ``mysql-test/t/rpl_row_create_table-slave.opt''
      588fcc72
  34. 07 Dec, 2006 1 commit
    • unknown's avatar
      WL#3618 - Remove HAVE_ROW_BASED_REPLICATION from source code. · d71fb7b7
      unknown authored
      Please see worklog for details on files changed.
      
      
      BitKeeper/deleted/.del-have_row_based.require:
        Delete: mysql-test/r/have_row_based.require
      BitKeeper/deleted/.del-not_row_based.require:
        Delete: mysql-test/r/not_row_based.require
      BitKeeper/deleted/.del-have_row_based.inc:
        Delete: mysql-test/include/have_row_based.inc
      BitKeeper/deleted/.del-not_row_based.inc:
        Delete: mysql-test/include/not_row_based.inc
      BitKeeper/deleted/.del-replication.m4:
        Delete: config/ac-macros/replication.m4
      d71fb7b7
  35. 13 Oct, 2006 2 commits
    • unknown's avatar
      Fix for Bug #17544 "Cannot do atomic log rotate", · 577dedb0
      unknown authored
      Bug #21785 "Server crashes after rename of the log table" and
      Bug #21966 "Strange warnings on create like/repair of the log
                  tables"
      
      According to the patch, from now on, one should use RENAME to
      perform a log table rotation (this should also be reflected in
      the manual).
      
      Here is a sample:
      
      use mysql;
      CREATE TABLE IF NOT EXISTS general_log2 LIKE general_log;
      RENAME TABLE general_log TO general_log_backup, general_log2 TO general_log;
      
      The rules for Rename of the log tables are following:
            IF   1. Log tables are enabled
            AND  2. Rename operates on the log table and nothing is being
                    renamed to the log table.
            DO   3. Throw an error message.
            ELSE 4. Perform rename.
       
      The very RENAME query will go the the old (backup) table. This is
      consistent with the behavoiur we have with binlog ROTATE LOGS
      statement.
      
      Other problems, which are solved by the patch are:
      
      1) Now REPAIR of the log table is exclusive operation (as it should be), this
         also eliminates lock-related warnings. and
      2) CREATE LIKE TABLE now usese usual read lock on the source table rather
         then name lock, which is too restrictive. This way we get rid of another
         log table-related warning, which occured because of the above fact
         (as a side-effect, name lock resulted in a warning).
      
      
      mysql-test/r/log_tables.result:
        update result file
      mysql-test/t/log_tables.test:
        Add tests for the bugs
      sql/handler.cc:
        update comment
      sql/handler.h:
        update function to reflect changes in log tables
        locking logic.
      sql/lock.cc:
        Now we allow locking of the log tables for "privileged" threads
        Privileged thread must explicitly close and lock log tables. This
        is required for admin operations such as REPAIR.
      sql/log.cc:
        Changes to the file:
        1) Add checks for table schema. It's more important now,
           as we allow rename of the log tables. Since we should
           check for schema when writing to a log table.
           E.g. if one created a table with one-only comlumn and
           renamed it to general_log, the server should cope with
           it.
        2) refactor LOGGER::flush(), so that we can now use the same
           machinery as we use in FLUSH LOGS in other statements:
           whenever we have to perform  a serious operation on the log
           tables, we have to
           (a) lock logger, which blocks other concurrent statements (such 
           as selects) (b) close logs. Then perform an
           exclusive operation, c) reenable logs and d) unlock logger.
        3) Add a function to check if a given table is a log table.
        4) Add support for "privileged" thread
        5) merge is_[general/slow]_log_table_enabled() into one function.
        6) Add new function: reopen _log_tables, which reopens the tables,
           which were enabled (after temporary close, required for admin
           operation)
      sql/log.h:
        1) add a new call close_n_lock_tables(). Now we use it instead of
           LOGGER::flush() in FLUSH LOGS implementation.
        2) add a prototype for the function to check if a given
           table is a log table;
        3) add privileged table flag to table logger
        4) merge is_[general/slow]_log_table_enabled()
           into one function.
      sql/mysql_priv.h:
        move log table defines to log.h
      sql/sql_delete.cc:
        use new function check_if_log_table() instead of direct strcmp
      sql/sql_rename.cc:
        Traverse the list of tables in mysql_rename_tables
        to make sure that log tables are processed correctly
        (that is, according to the rules specified in the
        main CS comment)
      sql/sql_table.cc:
        1) mysql_admin_table() should disable logs if it performs
           exclusive admin operation on a log table. This way we
           also eliminate warning on REPAIR of the log table.
        2) mysql_create_like_table should read-lock the source table
           instead getting name lock on it. Name lock is too restrictive
           in this case.
      sql/share/errmsg.txt:
        Add a new error message for rename of the log tables
      sql/table.cc:
        use new function instead of direct strcmp.
        change my_strcasecmp() -> strcmp(), when
        comparing system db and table names
      storage/csv/ha_tina.cc:
        update function to reflect changes in log tables
        locking logic.
      storage/myisam/ha_myisam.cc:
        update function to reflect changes in log tables
        locking logic.
      577dedb0
    • unknown's avatar
      ndb - fixed for BUG#15021, binlog_index table become inconsistent if errors... · 36a923f7
      unknown authored
      ndb - fixed for BUG#15021, binlog_index table become inconsistent if errors during purge of binlogs.
      if EMFILE error occured while purging binary logs, stop purging logs and report error message to user.
      
      
      mysys/my_open.c:
        report EMFILE error when opening file failed.
      sql/log.cc:
        report EMFILE error when purging logs, and stop purging logs when EMFILE error occured.
      sql/log.h:
        added LOG_INFO_EMFILE error number.
      sql/share/errmsg.txt:
        added EMFILE error message for purging binary logs.
      sql/sql_repl.cc:
        added EMFILE error message.
      sql/table.cc:
        report EMFILE error.
      36a923f7
  36. 28 Sep, 2006 1 commit