1. 17 Jan, 2017 12 commits
    • Sergei Golubchik's avatar
      Merge branch '10.0' into 10.1 · f7d03048
      Sergei Golubchik authored
      f7d03048
    • Sergei Golubchik's avatar
      MDEV-11601 Out-of-bounds string access in create_schema_table() · f797ea71
      Sergei Golubchik authored
      in Item_partition_func_safe_string(THD *thd, const char *name_arg,
      uint length, CHARSET_INFO *cs= NULL), the 'name_arg' is the value
      of the string constant and 'length' is the length of this constant,
      so length == strlen(name_arg).
      f797ea71
    • Sergei Golubchik's avatar
      MDEV-11698 Old Bug possibly not fixed; BEFORE INSERT Trigger on NOT NULL · ef8003eb
      Sergei Golubchik authored
      check_that_all_fields_are_given_values() relied on write_set,
      but was run too early, before triggers updated write_set.
      
      also, when triggers are present, fields might get values conditionally,
      so we need to check that all fields are given values for every row.
      ef8003eb
    • Sergei Golubchik's avatar
      selinux fixes for 10.0->10.1 merge · e79e8406
      Sergei Golubchik authored
      1. don't put generated files into ${CMAKE_CURRENT_SOURCE_DIR}
      2. policy file name must match the module name (Fedora 24 requirement)
      e79e8406
    • Kristian Nielsen's avatar
      mysql_install_db enhancements to facilitate Debian bug#848616 fix · 736afe86
      Kristian Nielsen authored
      In Debian, the default install is made more secure by omitting the anonymous
      user and by making the root account authenticate by unix socket
      authentication instead of the default password-less root. However, Debian
      hard-codes this change in mysql_install_db, which breaks that program for
      other users.
      
      This commit instead implements new general options for mysql_install_db that
      can be used by anyone to similarly perform a more secure install:
      
        --skip-auth-anonymous-user: omits the anonymous user.
      
        --auth-root-authentication-method=normal: Keeps the existing behaviour
          with a password-less root account. Currently on by default.
      
        --auth-root-socket-user=USER
        --auth-root-authentication-method=socket: creates the MariaDB root user
          with the name USER (defaults to 'root') and using unix socket
          authentication. This way, only that user has MariaDB root access
          after install.
      
      The idea with --auth-root-authentication-method=normal is that
      applications that need this behaviour can give that option explicitly.
      Then eventually we could make --auth-root-authentication-method=socket
      the default, giving a more secure default installation.
      
      Note that it is perfectly possible to do a secure install with
      --auth-root-authentication-method=normal. For example, installing a
      private server just for local access by a single OS-level user, by
      using --skip-networking and putting the connection socket in a
      location without public access. So it is important to preserve this
      API for backwards compatibility.
      736afe86
    • Kristian Nielsen's avatar
      Merge branch '10.0' into 10.1 · 719e8113
      Kristian Nielsen authored
      719e8113
    • Sergei Golubchik's avatar
      Merge branch '5.5' into 10.0 · 6728aae3
      Sergei Golubchik authored
      6728aae3
    • Sergei Golubchik's avatar
      e4e801d4
    • Alexey Botchkov's avatar
      MDEV-10956 Strict Password Validation Breaks Replication. · 30a9ac42
      Alexey Botchkov authored
              strict_password_validation variable now has
              no effect in the slave thread.
      30a9ac42
    • Kristian Nielsen's avatar
      MDEV-11811: dual master with parallel replication memory leak in write master · 3e589d4b
      Kristian Nielsen authored
      Gtid_list_log_event::do_apply_event() did not free_root(thd->mem_root).
      It can allocate on this in record_gtid(), and in some scenarios there is
      nothing else that does free_root(), leading to temporary memory leak until
      stop of SQL thread. One scenario is in circular replication with only one
      master active. The active master receives only its own events on the slave,
      all of which are ignored. But whenever the SQL thread catches up with the IO
      thread, a Gtid_list_log_event is applied, leading to the leak.
      3e589d4b
    • Vicențiu Ciorbaru's avatar
    • Vicențiu Ciorbaru's avatar
      Post merge review fixes · 1e192e90
      Vicențiu Ciorbaru authored
      * Remove duplicate lines from tests
      * Use thd instead of current_thd
      * Remove extra wsrep_binlog_format_names
      * Correctly merge union patch from 5.5 wrt duplicate rows.
      * Correctly merge SELinux changes into 10.1
      1e192e90
  2. 16 Jan, 2017 9 commits
  3. 15 Jan, 2017 8 commits
    • Elena Stepanova's avatar
      34c89d01
    • Marko Mäkelä's avatar
      MDEV-11623 MariaDB 10.1 fails to start datadir created with · ab1e6fef
      Marko Mäkelä authored
      MariaDB 10.0/MySQL 5.6 using innodb-page-size!=16K
      
      The storage format of FSP_SPACE_FLAGS was accidentally broken
      already in MariaDB 10.1.0. This fix is bringing the format in
      line with other MySQL and MariaDB release series.
      
      Please refer to the comments that were added to fsp0fsp.h
      for details.
      
      This is an INCOMPATIBLE CHANGE that affects users of
      page_compression and non-default innodb_page_size. Upgrading
      to this release will correct the flags in the data files.
      If you want to downgrade to earlier MariaDB 10.1.x, please refer
      to the test innodb.101_compatibility how to reset the
      FSP_SPACE_FLAGS in the files.
      
      NOTE: MariaDB 10.1.0 to 10.1.20 can misinterpret
      uncompressed data files with innodb_page_size=4k or 64k as
      compressed innodb_page_size=16k files, and then probably fail
      when trying to access the pages. See the comments in the
      function fsp_flags_convert_from_101() for detailed analysis.
      
      Move PAGE_COMPRESSION to FSP_SPACE_FLAGS bit position 16.
      In this way, compressed innodb_page_size=16k tablespaces will not
      be mistaken for uncompressed ones by MariaDB 10.1.0 to 10.1.20.
      
      Derive PAGE_COMPRESSION_LEVEL, ATOMIC_WRITES and DATA_DIR from the
      dict_table_t::flags when the table is available, in
      fil_space_for_table_exists_in_mem() or fil_open_single_table_tablespace().
      During crash recovery, fil_load_single_table_tablespace() will use
      innodb_compression_level for the PAGE_COMPRESSION_LEVEL.
      
      FSP_FLAGS_MEM_MASK: A bitmap of the memory-only fil_space_t::flags
      that are not to be written to FSP_SPACE_FLAGS. Currently, these will
      include PAGE_COMPRESSION_LEVEL, ATOMIC_WRITES and DATA_DIR.
      
      Introduce the macro FSP_FLAGS_PAGE_SSIZE(). We only support
      one innodb_page_size for the whole instance.
      
      When creating a dummy tablespace for the redo log, use
      fil_space_t::flags=0. The flags are never written to the redo log files.
      
      Remove many FSP_FLAGS_SET_ macros.
      
      dict_tf_verify_flags(): Remove. This is basically only duplicating
      the logic of dict_tf_to_fsp_flags(), used in a debug assertion.
      
      fil_space_t::mark: Remove. This flag was not used for anything.
      
      fil_space_for_table_exists_in_mem(): Remove the unnecessary parameter
      mark_space, and add a parameter for table flags. Check that
      fil_space_t::flags match the table flags, and adjust the (memory-only)
      flags based on the table flags.
      
      fil_node_open_file(): Remove some redundant or unreachable conditions,
      do not use stderr for output, and avoid unnecessary server aborts.
      
      fil_user_tablespace_restore_page(): Convert the flags, so that the
      correct page_size will be used when restoring a page from the
      doublewrite buffer.
      
      fil_space_get_page_compressed(), fsp_flags_is_page_compressed(): Remove.
      It suffices to have fil_space_is_page_compressed().
      
      FSP_FLAGS_WIDTH_DATA_DIR, FSP_FLAGS_WIDTH_PAGE_COMPRESSION_LEVEL,
      FSP_FLAGS_WIDTH_ATOMIC_WRITES: Remove, because these flags do not
      exist in the FSP_SPACE_FLAGS but only in memory.
      
      fsp_flags_try_adjust(): New function, to adjust the FSP_SPACE_FLAGS
      in page 0. Called by fil_open_single_table_tablespace(),
      fil_space_for_table_exists_in_mem(), innobase_start_or_create_for_mysql()
      except if --innodb-read-only is active.
      
      fsp_flags_is_valid(ulint): Reimplement from the scratch, with
      accurate comments. Do not display any details of detected
      inconsistencies, because the output could be confusing when
      dealing with MariaDB 10.1.x data files.
      
      fsp_flags_convert_from_101(ulint): Convert flags from buggy
      MariaDB 10.1.x format, or return ULINT_UNDEFINED if the flags
      cannot be in MariaDB 10.1.x format.
      
      fsp_flags_match(): Check the flags when probing files.
      Implemented based on fsp_flags_is_valid()
      and fsp_flags_convert_from_101().
      
      dict_check_tablespaces_and_store_max_id(): Do not access the
      page after committing the mini-transaction.
      
      IMPORT TABLESPACE fixes:
      
      AbstractCallback::init(): Convert the flags.
      
      FetchIndexRootPages::operator(): Check that the tablespace flags match the
      table flags. Do not attempt to convert tablespace flags to table flags,
      because the conversion would necessarily be lossy.
      
      PageConverter::update_header(): Write back the correct flags.
      This takes care of the flags in IMPORT TABLESPACE.
      ab1e6fef
    • Marko Mäkelä's avatar
      MDEV-11799 InnoDB can abort if the doublewrite buffer · a9d00db1
      Marko Mäkelä authored
      contains a bad and a good copy
      
      Clean up the InnoDB doublewrite buffer code.
      
      buf_dblwr_init_or_load_pages(): Do not add empty pages to the buffer.
      
      buf_dblwr_process(): Do consider changes to pages that are all zero.
      Do not abort when finding a corrupted copy of a page in the doublewrite
      buffer, because there could be multiple copies in the doublewrite buffer,
      and only one of them needs to be good.
      a9d00db1
    • Marko Mäkelä's avatar
    • Sergei Golubchik's avatar
      MDEV-11551 Server crashes in Field::is_real_null · 5dfab33c
      Sergei Golubchik authored
      sometimes table->s->stored_fields is less than table->s->null_fields
      5dfab33c
    • Sergei Golubchik's avatar
      max_session_mem_used server variable · 7e2f9d09
      Sergei Golubchik authored
      7e2f9d09
    • Sergei Golubchik's avatar
      bugfix: mutex order violation in embedded · ab3388c3
      Sergei Golubchik authored
      safe_mutex: Found wrong usage of mutex 'LOCK_thread_count' and 'LOCK_status'
      Mutex currently locked (in reverse order):
      LOCK_status        sql/sql_class.h  line 3873
      LOCK_thread_count  libmysqld/lib_sql.cc  line 432
      ab3388c3
    • Sergei Golubchik's avatar
      1282eb69
  4. 14 Jan, 2017 4 commits
    • Sergei Golubchik's avatar
      bugfix: Item_func_min_max stored thd internally · b948b5f7
      Sergei Golubchik authored
      It was used for get_datetime_value() and for thd->is_error().
      
      But in fact, get_datetime_value() never used thd argument, because the
      cache ptr argument was NULL. And thd->is_error() check was not needed
      at that place at all.
      b948b5f7
    • Sergei Golubchik's avatar
      bugfix: cmp_item_row::alloc_comparators() allocated on the wrong arena · 798fcb54
      Sergei Golubchik authored
      it used current_thd->alloc() and allocated on the thd's execution arena,
      not on table->expr_arena.
      
      Remove THD::arena_for_cached_items that is temporarily set in
      update_virtual_fields(), and replaces THD arena in get_datetime_value().
      Instead set THD arena to table->expr_arena for the whole  duration
      of update_virtual_fields()
      798fcb54
    • Sergei Golubchik's avatar
      MDEV-9690 concurrent queries with virtual columns crash in temporal code · 67e20281
      Sergei Golubchik authored
      Item_func_le included Arg_comparator. Arg_comparator remembered
      the current_thd during fix_fields and used that value during
      execution to allocate Item_cache in get_datetime_value().
      But for vcols fix_fields and val_int can happen in different threads.
      
      Same bug for Item_func_in using in_datetime or cmp_item_datetime,
      both also remembered current_thd at fix_fields() to use it later
      for get_datetime_value().
      
      As a fix, these objects no longer remember the current_thd,
      and get_datetime_value() uses current_thd at run time. This
      should not increase the number of current_thd calls much, as
      Item_cache is created only once anyway.
      67e20281
    • Vicențiu Ciorbaru's avatar
      Merge branch '5.5' into 10.0 · 66744f45
      Vicențiu Ciorbaru authored
      66744f45
  5. 13 Jan, 2017 3 commits
  6. 12 Jan, 2017 4 commits
    • Sergei Golubchik's avatar
      MDEV-11527 Virtual columns do not get along well with NO_ZERO_DATE · 20ca1bcf
      Sergei Golubchik authored
      don't check defaults for vcols
      20ca1bcf
    • Alexander Barkov's avatar
      MDEV-11030 Assertion `precision > 0' failed in decimal_bin_size · ebb8c9fb
      Alexander Barkov authored
      Fixing Item::decimal_precision() to return at least one digit.
      This fixes the problem reported in MDEV.
      
      Also, fixing Item_func_signed::fix_length_and_dec() to reserve
      space for at least one digit (plus one character for an optional sign).
      This is needed to have CONVERT(expr,SIGNED) and CONVERT(expr,UNSIGNED)
      create correct string fields when they appear in string context, e.g.:
        CREATE TABLE t1 AS SELECT CONCAT(CONVERT('',SIGNED));
      ebb8c9fb
    • Marko Mäkelä's avatar
      Improve an MDEV-9011 test of innodb_encrypt_log. · 2dc5d8bb
      Marko Mäkelä authored
      Test crash recovery from an encrypted redo log with innodb_encrypt_log=0.
      Previously, we did a clean shutdown, so only the log checkpoint
      information would have been read from the redo log. With this change,
      we will be reading and applying encrypted redo log records.
      
      include/start_mysqld.inc: Observe $restart_parameters.
      
      encryption.innodb-log-encrypt: Remove some unnecessary statements,
      and instead of restarting the server and concurrently accessing
      the files while the server is running, kill the server, check the
      files, and finally start up the server.
      
      innodb.log_data_file_size: Use start_mysqld.inc with $restart_parameters.
      2dc5d8bb
    • Vicențiu Ciorbaru's avatar
      Merge branch 'bb-10.0-vicentiu' into 10.0 · 4f533846
      Vicențiu Ciorbaru authored
      Extra merge commit due to intermediate commits pushed to 10.0 while
      merge was done.
      4f533846