1. 23 Jul, 2020 3 commits
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-23134 SEGV in dict_load_table_one during restart after server crash · b3b1c51e
      Thirunarayanan Balathandayuthapani authored
      Problem:
      ========
      dict_load_table_one() doesn't handle the scenario where clustered
      index page is FIL_NULL when DICT_ERR_IGNORE_INDEX_ROOT mode
      is set.
      
      Fix:
      ====
      InnoDB should set the file_unreadable when it can't find the
      clustered index root page.
      b3b1c51e
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-20638 Remove the deadcode from srv_master_thread() and srv_active_wake_master_thread_low() · fe39d02f
      Thirunarayanan Balathandayuthapani authored
      - Due to commit fe95cb2e (MDEV-16125),
      InnoDB master thread does not need to call srv_resume_thread()
      and therefore there is no need to wake up the thread.
      Due to the above patch, InnoDB should remove the following dead code.
      
      srv_check_activity(): Makes the parameter as in,out and returns the
      recent activity value
      
      innobase_active_small(): Removed
      
      srv_active_wake_master_thread(): Removed
      
      srv_wake_master_thread(): Removed
      
      srv_active_wake_master_thread_low(): Removed
      
      Simplify srv_master_thread() and remove switch cases, added the assert.
      
      Replace srv_wake_master_thread() with srv_inc_activity_count()
      
      INNOBASE_WAKE_INTERVAL: Removed
      fe39d02f
    • Sujatha's avatar
      MDEV-14203: rpl.rpl_extra_col_master_myisam,... · b3dd95e0
      Sujatha authored
      MDEV-14203: rpl.rpl_extra_col_master_myisam, rpl.rpl_slave_load_tmpdir_not_exist failed in buildbot with a warning
      
      Problem:
      =======
      rpl.rpl_slave_load_tmpdir_not_exist 'stmt' w3 [ fail ]  Found warnings/errors
      in server log file!
      
      Test ended at 2017-09-27 20:34:55
      [Warning] Master is configured to log replication events with checksum, but
      will not send such events to slaves that cannot process them
      ^ Found warnings in /mnt/buildbot/build/mariadb-10.2.10/mysql-test/var/3/log/mysqld.1.err
      ok
      Analysis:
      ========
      When slave tries to connect to master 'get_master_version_and_clock' function
      is invoked to perform elaborated slave-master handshake. During this process
      slave server queries master server, to know if it is checksum aware and at the
      same time master is notified about its CRC-awareness. The master's side
      instant value of @@global.binlog_checksum is stored in the dump thread's
      uservar area as well as cached locally to become known in consensus by master
      and slave.
      
      Post hand-shake slave requests master for binlog dump. It sends
      'COM_BINLOG_DUMP'. This command is sent to master by 'cli_advanced_command'
      call. If there is some temporary network failure during this request_dump
      call, 'end_server' is invoked to close the current connection between master
      and slave. Upon connection close the dump thread on the master gets terminated
      and it clears the 'uservar' data it got through master-slave handshake.
      
      The 'COM_BINLOG_DUMP' command is sent once again without master-slave
      handshake. Since the checksum data is not available with new dump thread a
      warning gets reported.
      
      Fix:
      ===
      Upon network write error donot attempt reconnect, proceed to master-slave
      handshake. This ensures that master is aware of slave's capability to use
      checksums.
      b3dd95e0
  2. 22 Jul, 2020 3 commits
  3. 21 Jul, 2020 2 commits
    • Nikita Malyavin's avatar
      fix c++98 build · ebca70ea
      Nikita Malyavin authored
      ebca70ea
    • Nikita Malyavin's avatar
      MDEV-16039 Crash when selecting virtual columns generated using functions with DAYNAME() · 5acd391e
      Nikita Malyavin authored
      * Allocate items on thd->mem_root while refixing vcol exprs
      * Make vcol tree changes register and roll them back after the statement is executed.
      
      Explanation:
      Due to collation implementation specifics an Item tree could change while fixing.
      The tricky thing here is to make it on a proper arena.
      It's usually not a problem when a field is deterministic, however, makes a pain vice-versa, during allocation allocating.
      A non-deterministic field should be refixed on each statement, since it depends on the environment state.
      Changing the tree will be temporary and therefore it should be reverted after the statement execution.
      5acd391e
  4. 20 Jul, 2020 4 commits
    • Marko Mäkelä's avatar
      Merge 10.1 into 10.2 · ca9276e3
      Marko Mäkelä authored
      ca9276e3
    • Marko Mäkelä's avatar
      MDEV-23190 InnoDB data file extension is not crash-safe · 57ec42bc
      Marko Mäkelä authored
      When InnoDB is extending a data file, it is updating the FSP_SIZE
      field in the first page of the data file.
      
      In commit 8451e090 (MDEV-11556)
      we removed a work-around for this bug and made recovery stricter,
      by making it track changes to FSP_SIZE via redo log records, and
      extend the data files before any changes are being applied to them.
      
      It turns out that the function fsp_fill_free_list() is not crash-safe
      with respect to this when it is initializing the change buffer bitmap
      page (page 1, or generally, N*innodb_page_size+1). It uses a separate
      mini-transaction that is committed (and will be written to the redo
      log file) before the mini-transaction that actually extended the data
      file. Hence, recovery can observe a reference to a page that is
      beyond the current end of the data file.
      
      fsp_fill_free_list(): Initialize the change buffer bitmap page in
      the same mini-transaction.
      
      The rest of the changes are fixing a bug that the use of the separate
      mini-transaction was attempting to work around. Namely, we must ensure
      that no other thread will access the change buffer bitmap page before
      our mini-transaction has been committed and all page latches have been
      released.
      
      That is, for read-ahead as well as neighbour flushing, we must avoid
      accessing pages that might not yet be durably part of the tablespace.
      
      fil_space_t::committed_size: The size of the tablespace
      as persisted by mtr_commit().
      
      fil_space_t::max_page_number_for_io(): Limit the highest page
      number for I/O batches to committed_size.
      
      MTR_MEMO_SPACE_X_LOCK: Replaces MTR_MEMO_X_LOCK for fil_space_t::latch.
      
      mtr_x_space_lock(): Replaces mtr_x_lock() for fil_space_t::latch.
      
      mtr_memo_slot_release_func(): When releasing MTR_MEMO_SPACE_X_LOCK,
      copy space->size to space->committed_size. In this way, read-ahead
      or flushing will never be invoked on pages that do not yet exist
      according to FSP_SIZE.
      57ec42bc
    • Marko Mäkelä's avatar
      98e2c17e
    • Marko Mäkelä's avatar
      14543afd
  5. 18 Jul, 2020 1 commit
  6. 16 Jul, 2020 5 commits
    • Julius Goryavsky's avatar
      MDEV-20401: revert unnecessary change · a1e52e7f
      Julius Goryavsky authored
      a1e52e7f
    • Julius Goryavsky's avatar
      MDEV-20401: revert unnecessary change · 1ba8df4c
      Julius Goryavsky authored
      1ba8df4c
    • Julius Goryavsky's avatar
      MDEV-20401: Server incorrectly auto-sets lower_case_file_system value · b3cae9db
      Julius Goryavsky authored
      Server auto-sets lower_case_file_system value based on default
      datadir's behavior instead of instead of using the directory specified
      by the user through the configuration file or command line options.
      
      This patch fixes this problem.
      b3cae9db
    • Julius Goryavsky's avatar
      MDEV-20401: Server incorrectly auto-sets lower_case_file_system value · 4412a461
      Julius Goryavsky authored
      Server auto-sets lower_case_file_system value based on default
      datadir's behavior instead of instead of using the directory specified
      by the user through the configuration file or command line options.
      
      This patch fixes this problem.
      4412a461
    • Marko Mäkelä's avatar
      MDEV-21347 innodb_log_optimize_ddl=OFF is not crash safe · 147d4b1e
      Marko Mäkelä authored
      In commit 0f90728b (MDEV-16809)
      we introduced the configuration option innodb_log_optimize_ddl
      for controlling whether native index creation or table-rebuild
      in InnoDB should avoid writing full redo log.
      
      Fungo Wang reported that this option is causing occasional failures.
      The reason is that pages may be written to data files in an
      inconsistent state. Applying log records to such inconsistent pages
      may fail.
      
      The solution is to always invoke PageBulk::finish() before page latches
      may be released, to ensure that the page contents is in a consistent
      state.
      
      Something similar was implemented in MySQL 8.0.13:
      mysql/mysql-server@d1254b947354e0f5b7223b09c521bd85f22e1e31
      
      buf_block_t::skip_flush_check: Remove. Suppressing consistency checks
      is a bad idea.
      
      PageBulk::needs_finish(): New predicate: Determine whether
      PageBulk::finish() must fix up the page.
      
      PageBulk::init(): Clear PAGE_DIRECTION to ensure that needs_finish()
      will hold. We change the field from PAGE_NO_DIRECTION to 0
      and back without writing redo log. This trick avoids the need
      to introduce any new data member to PageBulk.
      
      PageBulk::insert(): Replace some high-level accessors to bypass
      debug assertions related to PAGE_HEAP_TOP that we will be violating
      until finish() has been executed.
      
      PageBulk::finish(): Tolerate m_rec_no==0. We must invoke this also
      on an empty page, to ensure that PAGE_HEAP_TOP is initialized.
      
      PageBulk::commit(): Always invoke finish().
      
      PageBulk::release(), BtrBulk::pageSplit(), BtrBulk::storeExt(),
      BtrBulk::finish(): Invoke PageBulk::finish().
      147d4b1e
  7. 15 Jul, 2020 5 commits
  8. 14 Jul, 2020 9 commits
  9. 13 Jul, 2020 2 commits
  10. 12 Jul, 2020 1 commit
  11. 10 Jul, 2020 1 commit
    • Rucha Deodhar's avatar
      MDEV-19119: main.ssl_crl fails in buildbot with wrong error code · f81ff932
      Rucha Deodhar authored
      The client can only find out if the server has disconnected when it tries to
      read or send something. If the server gets disconnected before
      send_client_reply_packet(), the client will try sending authentication
      information but it will fail. But, if the client is fast enough to send
      autentication information before disconnecting, it will notice that when
      reading the ok packet. So the client can fail on read or on write.
      It is unpredictable because, the process are unsynchronized and this
      could happen in any order.
      f81ff932
  12. 09 Jul, 2020 2 commits
  13. 07 Jul, 2020 2 commits