1. 22 Dec, 2009 1 commit
    • Luis Soares's avatar
      PB2 was showing some valgrind warnings after WL#5151 was pushed. · 67cc50d2
      Luis Soares authored
      This patch fixes these warnings and some compile time warnings.
      
      On top of that, it also fixes rpl_err_ignoredtable test failure.
      This test was failing because the warning suppression text was not
      matching the latest text. We fix this by making them match.
      
      
      mysql-test/suite/rpl/t/rpl_err_ignoredtable.test:
        Replaced the suppression text.
      sql/rpl_record.cc:
        - Fixed some compile time warnings (replaced %d --> %ld and 
          removed unused mas mask variable.
        - Fixed valgrind warnings when using c_ptr(). Replaced with 
          c_ptr_safe().
      sql/rpl_utility.cc:
        - Fixed valgrind warnings when using c_ptr(). Replaced with 
          c_ptr_safe().
      67cc50d2
  2. 21 Dec, 2009 3 commits
  3. 18 Dec, 2009 5 commits
    • Mats Kindahl's avatar
      Merging with mysql.5.1-rep+2 · 437b5338
      Mats Kindahl authored
      437b5338
    • Mats Kindahl's avatar
      Merging with mysql-5.1-rep+2 · b001aefd
      Mats Kindahl authored
      b001aefd
    • Mats Kindahl's avatar
      WL#5151: Conversion between different types · 242038c6
      Mats Kindahl authored
               when replicating
      
      Post-merge fixes. Updating result files.
      242038c6
    • Mats Kindahl's avatar
      WL#5151: Conversion between different types · e4de9401
      Mats Kindahl authored
               when replicating
      
      The function create_virtual_tmp_table does not
      set db_low_byte_first in the same way as
      create_tmp_table does, causing copying from
      the virtual table to a real table to get strange
      values for SET types on big-endian machines.
      
      
      mysql-test/extra/rpl_tests/type_conversions.test:
        Adding tests for converting between different-sized sets.
      sql/sql_select.cc:
        Settng dh_low_byte_first for tables created
        with create_virtual_tmp_table.
      e4de9401
    • Luis Soares's avatar
      BUG#49259: Slave I/O thread could not register on master · 9db88010
      Luis Soares authored
      The slave thread changed the format of the information it used to
      connect to the master after patch for BUG 13963.  This resulted
      in old master getting confused, thence rejecting the slave
      connection attempt.
      
      In particular, patch for BUG 13963 removed the rpl_recovery_rank
      variable which was, at that time, packed together with the rest
      of the information which the slave would use to register itself
      on the master. Based on this data, the master would then assert
      that the number of bytes received in the connection command was
      consistent to what it was expecting. 
      
      Therefore, given that a slave, patched with the aforementioned
      patch, would not pack the four bytes related to the
      rpl_recovery_rank variable, the old master would reject the
      connection attempt. It would assume that the data was
      inconsistent (fewer bytes than it was expecting) and return 
      an error.
      
      We fix this by faking an rpl_recovery_rank variable when
      registering the slave on the master. In practice this reverts a
      small part of patch for BUG 13963, the one related to the slave
      connecting to the master.
      
      sql/repl_failsafe.cc:
        Added bypassing of removed rpl_recovery_rank variable information in
        packet. This should also make more sense when old servers connect
        to a new master (ie, master with patch for BUG 13963). If this was not
        done, the new master could interpert information an old slave sends as
        master_id, when in fact it could be the rpl_recovery_rank data.
      sql/slave.cc:
        Faking a rpl_recovery_rank so that we can register as a slave in
        an old master.
      9db88010
  4. 17 Dec, 2009 3 commits
  5. 16 Dec, 2009 5 commits
  6. 15 Dec, 2009 4 commits
    • Alfranio Correia's avatar
      9d382997
    • Mats Kindahl's avatar
      WL#5151: Conversion between different types when replicating · f63a9d69
      Mats Kindahl authored
      Fixing error codes that changed after merge.
      f63a9d69
    • Mats Kindahl's avatar
      Merging with mysql-5.1-rep+2 · f9abd142
      Mats Kindahl authored
      f9abd142
    • Mats Kindahl's avatar
      BUG#49618: Field length stored incorrectly in binary log · 9e980bf7
      Mats Kindahl authored
                 for InnoDB
      
      The class Field_bit_as_char stores the metadata for the
      field incorrecly because bytes_in_rec and bit_len are set
      to (field_length + 7 ) / 8 and 0 respectively, while
      Field_bit has the correct values field_length / 8 and
      field_length % 8.
      
      Solved the problem by re-computing the values for the
      metadata based on the field_length instead of using the
      bytes_in_rec and bit_len variables.
      
      To handle compatibility with old server, a table map
      flag was added to indicate that the bit computation is
      exact. If the flag is clear, the slave computes the
      number of bytes required to store the bit field and
      compares that instead, effectively allowing replication
      *without conversion* from any field length that require
      the same number of bytes to store.
      
      mysql-test/suite/rpl/t/rpl_typeconv_innodb.test:
        Adding test to check compatibility for bit field
        replication when using InnoDB.
      sql/field.cc:
        Extending compatible_field_size() with flags from
        table map to allow fields to check master info.
      sql/field.h:
        Extending compatible_field_size() with flags from
        table map to allow fields to check master info.
      sql/log.cc:
        Removing table map flags since they are not used
        outside table map class.
      sql/log_event.cc:
        Removing flags parameter from table map constructor
        since it is not used and does not have to be exposed.
      sql/log_event.h:
        Adding flag to denote that bit length for bit field type
        is exact and not potentially rounded to even bytes.
      sql/rpl_utility.cc:
        Adding fields to table_def to store table map flags.
      sql/rpl_utility.h:
        Removing obsolete comment and adding flags to store
        table map flags from master.
      9e980bf7
  7. 14 Dec, 2009 4 commits
    • Mats Kindahl's avatar
      WL#5151: Conversion between different types when replicating · 870daf5c
      Mats Kindahl authored
      Fixing minor error when printing SQL types from master and cleaning some code.
      
      Updating result files.
      870daf5c
    • Sven Sandberg's avatar
      Post-push fixes after wrong merge from 5.1->rep+2->rep+3. · e83c9f62
      Sven Sandberg authored
      Problem: The test was written before BUG#45827 was fixed.
      The test contained code that assumed the wrong behavior,
      pre-BUG#45827. Then, the fix for BUG#45827 was merged
      from 5.1-rep+2 to 5.1-rep+3. Since the test case assumed
      the wrong behavior, it failed. This should have been fixed
      by making the test assume the correct behavior, but was
      fixed by updating the result file to assert failure.
      Fix 1: fix the test to assume correct behavior
      (post-BUG#45827), update result file.
      Fix 2: make test fail with 'die' instead of 'exit' when
      wrong behavior is detected. Thus, the test cannot be
      silenced with a wrong result file in case the behavior
      will change again.
      
      
      mysql-test/extra/rpl_tests/create_recursive_construct.inc:
        Replaced 'exit' by 'die' to avoid similar
      mysql-test/suite/binlog/r/binlog_unsafe.result:
        Updated result file.
      mysql-test/suite/binlog/t/binlog_unsafe.test:
        Since BUG#45827 is now fixed, we need to update the test case
        in two places where it expects the wrong result because of
        BUG#45827.
      e83c9f62
    • Mats Kindahl's avatar
      WL#5151: Conversion between different types when replicating · 57184380
      Mats Kindahl authored
      Row-based replication requires the types of columns on the
      master and slave to be approximately the same (some safe
      conversions between strings are allowed), but does not
      allow safe conversions between fields of similar types such
      as TINYINT and INT.
      
      This patch implement type conversions between similar fields
      on the master and slave.
      
      The conversions are controlled using a new variable
      SLAVE_TYPE_CONVERSIONS of type SET('ALL_LOSSY','ALL_NON_LOSSY').
      
      Non-lossy conversions are any conversions that do not run the
      risk of losing any information, while lossy conversions can
      potentially truncate the value. The column definitions are
      checked to decide if the conversion is acceptable.
      
      If neither conversion is enabled, it is required that the
      definitions of the columns are identical on master and slave.
      
      Conversion is done by creating an internal conversion table,
      unpacking the master data into it, and then copy the data to
      the real table on the slave.
      
      .bzrignore:
        New files added
      client/Makefile.am:
        New files added
      client/mysqlbinlog.cc:
        Functions in rpl_utility.cc is now needed by mysqlbinlog.cc.
      libmysqld/Makefile.am:
        New files added
      mysql-test/extra/rpl_tests/check_type.inc:
        Test include file to check a single type conversion.
      mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test:
        Switching to use INT instead of TEXT for column that should not have matching types.
      mysql-test/extra/rpl_tests/rpl_row_basic.test:
        Adding code to enable type conversions for BIT tests since InnoDB
        cannot handle them properly due to incorrect information stored as
        metadata.
      mysql-test/extra/rpl_tests/type_conversions.test:
        Test file to check a set of type conversions
        with current settings of slave_type_conversions.
      mysql-test/suite/rpl/t/rpl_typeconv.test:
        Test file to test conversions from master to slave with
        all possible values for slave_type_conversions.
        
        The test also checks that the slave_type_conversions
        variable works as expected.
      sql/field.cc:
        Changing definition of compatible_field_size to both check if 
        two field with identical base types are compatible and give an
        order between them if they are compatible.
        
        This only implement checking on the slave, so it will not affect
        replication from an old master to a new slave.
      sql/field.h:
        Changing prototypes for functions:
        - compatible_field_size()
        - init_for_tmp_table()
        - row_pack_length()
      sql/log_event.cc:
        Changing compability checks to build a conversion table if the fields
        are compatible, but does not have the same base type.
      sql/log_event_old.cc:
        Changing compability checks to build a conversion table if the fields
        are compatible, but does not have the same base type.
      sql/mysql_priv.h:
        Adding global option variable for SLAVE_TYPE_CONVERSIONS
      sql/mysqld.cc:
        Adding SLAVE_TYPE_CONVERSIONS global server variable.
      sql/rpl_record.cc:
        Changing unpack_row to use the conversion table if present.
      sql/rpl_rli.h:
        Removing function get_tabledef and replacing it with get_table_data().
        This function retrieve data for table opened for replication, not just
        table definition.
      sql/rpl_utility.cc:
        Function table_def::compatible_with is changed to compare table on master
        and slave for compatibility and generate a conversions table if they are
        compatible.
        
        Computing real type of fields from metadata for ENUM and SET types.
        Computing pack_length correctly for ENUM, SET, and BLOB types.
        
        Adding optimization to not check compatibility if no
        slave type conversions are enabled.
      sql/rpl_utility.h:
        Changing prototypes since implementation has changed.
        
        Modifying table_def::type() to return real type instead of stored type.
      sql/set_var.cc:
        Adding SLAVE_TYPE_CONVERSIONS variable.
      sql/set_var.h:
        Adding SLAVE_TYPE_CONVERSIONS variable.
      sql/share/errmsg.txt:
        Adding error messages for slave type conversions.
      sql/sql_class.h:
        Adding SLAVE_TYPE_CONVERSIONS variable.
      sql/sql_select.cc:
        Correcting create_virtual_tmp_table() to compute null bit positions
        correctly in the presence of bit fields.
      57184380
    • Alfranio Correia's avatar
      46fe96c1
  8. 08 Dec, 2009 1 commit
  9. 03 Dec, 2009 1 commit
    • unknown's avatar
      WL#5142 FLUSH LOGS should take optional arguments for which log(s) to flush · ac647f5a
      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.
      ac647f5a
  10. 02 Dec, 2009 5 commits
  11. 01 Dec, 2009 8 commits