1. 01 Nov, 2019 2 commits
    • Marko Mäkelä's avatar
      Refactor recv_sys_t::recs_t into page_recv_t · b7fc2c89
      Marko Mäkelä authored
      page_recv_t: Replaces recv_sys_t::recs_t.
      page_recv_t::state is not private, even though some accessors exist.
      
      page_recv_t::log: A singly-linked list of log_rec_t* with STL decoration
      and the custom operations trim() and append(). The list members are private.
      
      recv_t::data_t: Replaces recv_data_t.
      
      recv_t::data: Remove the pointer indirection for the first log chunk,
      and copy the first chunk directly after the record. Adjust the
      definition of RECV_DATA_BLOCK_SIZE accordingly.
      b7fc2c89
    • Marko Mäkelä's avatar
      MDEV-19586: Rename recv_sys.empty() to recv_sys.clear() · 2aa1f77e
      Marko Mäkelä authored
      In the collections of Standard Template Library,
      empty() is a predicate and clear() empties a collection.
      Let us rename recv_sys.empty() to recv_sys.clear() to avoid confusion.
      2aa1f77e
  2. 31 Oct, 2019 2 commits
  3. 30 Oct, 2019 4 commits
  4. 29 Oct, 2019 5 commits
  5. 28 Oct, 2019 8 commits
  6. 25 Oct, 2019 1 commit
  7. 24 Oct, 2019 2 commits
  8. 23 Oct, 2019 3 commits
    • Marko Mäkelä's avatar
      MDEV-20487 Set innodb_adaptive_hash_index=OFF by default · 88cdfc5c
      Marko Mäkelä authored
      Based on the performance testing that was conducted in MDEV-17492,
      the InnoDB adaptive hash index could only help performance in specific,
      almost-read-only workloads. It could slow down all kinds of workloads
      (especially DROP TABLE, TRUNCATE TABLE, ALTER TABLE, or DROP INDEX
      operations), and it can become corrupted, causing crashes (such as
      MDEV-18815, MDEV-20203) and possibly data corruption. Furthermore,
      the adaptive hash index consumes space from the InnoDB buffer pool,
      which could hurt performance when the working set would almost fit
      in the buffer pool.
      
      Given all this, it is best to disable the adaptive hash index by default.
      88cdfc5c
    • Jan Lindström's avatar
    • Jan Lindström's avatar
      Stabilize tests. · 1036886b
      Jan Lindström authored
      Changes to be committed:
      	modified:   mysql-test/suite/galera_sr/disabled.def
      	modified:   mysql-test/suite/galera_sr/r/GCF-561.result
      	modified:   mysql-test/suite/galera_sr/r/galera_sr_ddl_master.result
      	modified:   mysql-test/suite/galera_sr/r/galera_sr_kill_query.result
      	modified:   mysql-test/suite/galera_sr/r/galera_sr_shutdown_slave.result
      	new file:   mysql-test/suite/galera_sr/suite.pm
      	modified:   mysql-test/suite/galera_sr/t/GCF-561.test
      	modified:   mysql-test/suite/galera_sr/t/galera_sr_ddl_master.test
      	modified:   mysql-test/suite/galera_sr/t/galera_sr_kill_query.test
      	modified:   mysql-test/suite/galera_sr/t/galera_sr_shutdown_slave.test
      1036886b
  9. 20 Oct, 2019 4 commits
  10. 18 Oct, 2019 2 commits
    • Alexander Barkov's avatar
      MDEV-20844 RBR from binary(16) to inet6 fails with error 171: The event was... · ec171a94
      Alexander Barkov authored
      MDEV-20844 RBR from binary(16) to inet6 fails with error 171: The event was corrupt, leading to illegal data being read
      
      This patch changes the way how INET6 is packed to the RBR binary log:
      - from fixed length 16 bytes
      - to BINARY(16) compatible variable length style
        with trailing 0x00 byte compression.
      
      This is to make INET6 fully compatible with BINARY(16) in RBR binary logs,
      so RBR replication works in this scenarios:
      
      - Old master BINARY(16) -> New slave INET6
      - New master INET6      -> Old slave BINARY(16)
      
      A new class StringPack was added to share the code between
      Field_string and Field_inet6.
      ec171a94
    • Alexander Barkov's avatar
      MDEV-20856 Bad values in metadata views for partitions on VARBINARY · 9a833dc6
      Alexander Barkov authored
      The old code to print partition values was too complicated:
      - it created new Items for character set conversion purposes.
      - it mixed string conversion and partition error reporting
        in the same code blocks.
      
      Simplifying the code as follows:
      
      - Adding helper methods String::can_be_safely_convert_to() and
        String::append_introducer_and_hex().
      
      - Adding DBUG_EXECUTE_IF("generate_partition_syntax_for_frm",  push_warning...)
        into generate_partition_syntax_for_frm(), to test the PARTITON
        clause written to FRM. Adding test partition_utf8-debug.test for this.
      
      - Removing functions get_cs_converted_part_value_from_string() and
        get_cs_converted_string_value. Changing get_partition_column_description()
        to use Type_handler::partition_field_append_value() instead.
        This makes SHOW CREATE TABLE and SELECT FROM I_S.PARTITIONS
        use the same code path.
      
      - Changing Type_handler::partition_field_append_value() not to
        call convert_charset_partition_constant(), to avoid creating a new Item
        for string conversion pursposes.
        Rewritting the code to use only String methods.
      
      - Removing error reporting code (ER_PARTITION_FUNCTION_IS_NOT_ALLOWED)
        from Type_handler::partition_field_append_value().
        The error is correctly detected and reported on the caller level.
        So error reporting was redundant here.
      
      Also:
      
      - Moving methods Type_handler::partition_field_*() from sql_partition.cc
        to sql_type.cc. This fixes compilation problem with -DPLUGIN_PARTITION=NO,
        earlier introduced by the patch for MDEV-20831.
      9a833dc6
  11. 17 Oct, 2019 1 commit
  12. 16 Oct, 2019 3 commits
  13. 15 Oct, 2019 1 commit
    • Alexander Barkov's avatar
      MDEV-20831 Table partitioned by LIST/RANGE COLUMNS(inet6) can be created, but not inserted into · 22b645ef
      Alexander Barkov authored
      This clause in CREATE TABLE:
      
        PARTITION BY LIST COLUMNS (inet6column)
          (PARTITION p1 VALUES IN ('::'))
      
      was erroneously written to frm file as:
      
        PARTITION BY LIST COLUMNS(inet6column)
          (PARTITION p1 VALUES IN (_binary 0x3A3A))
      
      I.e. the text value '::' was converted to HEX representation
      and prefixed with _binary.
      
      A simple fix could write `_latin1 0x3A3A` instead of `_binary 0x3A3A`,
      but in case of INET6 we don't need neither character set introducers,
      nor HEX encoding, because text representation of INET6 values consist
      of pure ASCII characters.
      
      So this patch changes the above clause to be printed as:
      
        PARTITION BY LIST COLUMNS(inet6column)
          (PARTITION p1 VALUES IN ('::'))
      
      Details:
      
      The old code in check_part_field() was not friendly to pluggable data types.
      Replacing this function to two new virtual methods in Type_handler:
      
        virtual bool partition_field_check(const LEX_CSTRING &field_name,
                                           Item *item_expr) const;
      
        virtual bool partition_field_append_value(String *str,
                                                  Item *item_expr,
                                                  CHARSET_INFO *field_cs,
                                                  partition_value_print_mode_t mode)
                                                  const;
      
      so data type plugins can decide whether they need to use character set
      introducer and/or hex encoding when printing partition values.
      22b645ef
  14. 14 Oct, 2019 2 commits
    • Alexander Barkov's avatar
      MDEV-20822 INET6 crashes in combination with RBR extended metadata · 8ec97814
      Alexander Barkov authored
      The code erroneously assumed that only Field_str descendants can
      store character set information. After adding Field_inet6, it's
      not true anymore.
      
      Also, after adding Field_inet6, storing field->charset() become not correct either:
      - Field_inet6::charset() return &my_charset_latin1,
        because clients see INET6 as VARCHAR(39).
      - Field_inet6::binlog_type_info().m_cs returns &my_charset_bin
        because storage engines see INET6 as BINARY(16).
      
      We need to store &my_charset_bin to the binlog metadata,
      so the slave sees INET6 as BINARY(16), like storage engines do,
      to make the slave treat the replicated data as binary IPv6 address
      representation (rather than text representation).
      
      The correct character set that needs to be stored to the metadata
      is already populated to binlog_type_info_array[i].m_cs. So the
      fixed code version uses this value rather than field->charset().
      8ec97814
    • Alexander Barkov's avatar
      MDEV-20826 Wrong result of MIN(inet6) with GROUP BY · a11694b8
      Alexander Barkov authored
      Type_handler_inet6::is_val_native_ready() was not overriden and
      returned "false" by default, so Item_sum_min_max::update_field()
      erroneously went through the min_max_update_str_field() rather than
      min_max_update_native_field() execution path. As a result '8888::'
      was compared to 'fff::' in string format (rather than INET6 binary format)
      and gave "less" instead of "greater".
      
      Adding the forgotten overriding method returning "true".
      a11694b8