1. 15 Jan, 2018 17 commits
    • Marko Mäkelä's avatar
      MDEV-14952 Avoid repeated calls to btr_get_search_latch() · 0664d633
      Marko Mäkelä authored
      btr_cur_search_to_nth_level(), btr_search_guess_on_hash(),
      btr_pcur_open_with_no_init_func(), row_sel_open_pcur():
      Replace the parameter has_search_latch with the ahi_latch
      (passed as NULL if the caller does not hold the latch).
      
      btr_search_update_hash_node_on_insert(),
      btr_search_update_hash_on_insert(),
      btr_search_build_page_hash_index(): Add the parameter ahi_latch.
      
      btr_search_x_lock(), btr_search_x_unlock(),
      btr_search_s_lock(), btr_search_s_unlock(): Remove.
      0664d633
    • Marko Mäkelä's avatar
      MDEV-14952 Avoid repeated calls to btr_get_search_latch() · 4beb699a
      Marko Mäkelä authored
      btr_cur_search_to_nth_level(), row_sel(): Do not bother to yield to
      waiting exclusive lock requests on the adaptive hash index latch.
      When the btr_search_latch was split into an array of latches
      in MySQL 5.7.8 as part of the Oracle Bug#20985298 fix, the "caching"
      of the latch across storage engine API calls was removed. Thus,
      X-lock requests should have a good chance of becoming served, and
      starvation should not be possible.
      
      btr_search_guess_on_hash(): Clean up a debug assertion.
      4beb699a
    • Marko Mäkelä's avatar
      btr_search_check_guess(): Remove the parameter 'mode' · 542ad0fa
      Marko Mäkelä authored
      Also, use 32-bit native reads to read the 32-bit aligned
      FIL_PAGE_PREV and FIL_PAGE_NEXT reads, to compare them to the
      byte order agnostic pattern FIL_NULL (0xffffffff).
      542ad0fa
    • Marko Mäkelä's avatar
      MDEV-14441 Deadlock due to InnoDB adaptive hash index · 12f804ac
      Marko Mäkelä authored
      This is mere code clean-up; the reported problem was already fixed
      in commit 3fdd3907.
      
      row_sel(): Remove the variable search_latch_locked.
      
      row_sel_try_search_shortcut(): Remove the parameter
      search_latch_locked, which was always passed as nonzero.
      
      row_sel_try_search_shortcut(), row_sel_try_search_shortcut_for_mysql():
      Do not expect the caller to acquire the AHI latch. Instead,
      acquire and release it inside this function.
      
      row_search_mvcc(): Remove a bogus condition on mysql_n_tables_locked.
      When the btr_search_latch was split into an array of latches
      in MySQL 5.7.8 as part of the Oracle Bug#20985298 fix, the "caching"
      of the latch across storage engine API calls was removed, and
      thus it is unnecessary to avoid adaptive hash index searches
      during INSERT...SELECT.
      12f804ac
    • Marko Mäkelä's avatar
      MDEV-14441 Deadlock due to InnoDB adaptive hash index · 458e33cf
      Marko Mäkelä authored
      This is not fixing the reported problem, but a potential problem that was
      introduced in MDEV-11369.
      
      row_sel_try_search_shortcut(), row_sel_try_search_shortcut_for_mysql():
      When an adaptive hash index search lands on top of rec_is_default_row(),
      we must skip the candidate and perform a normal search. This is because
      the adaptive hash index latch only protects the record from being deleted
      but does not prevent concurrent inserts into the page. Therefore, it is not
      safe to dereference the next-record pointer.
      458e33cf
    • Marko Mäkelä's avatar
      Merge bb-10.2-ext into 10.3 · 4ef25dbf
      Marko Mäkelä authored
      4ef25dbf
    • Marko Mäkelä's avatar
      Merge 10.2 into bb-10.2-ext · e2e74003
      Marko Mäkelä authored
      e2e74003
    • Marko Mäkelä's avatar
      MDEV-14441 InnoDB hangs when setting innodb_adaptive_hash_index=OFF during UPDATE · 3fdd3907
      Marko Mäkelä authored
      This race condition is a regression caused by MDEV-12121.
      
      btr_cur_update_in_place(): Determine block->index!=NULL only once
      in order to determine whether an adaptive hash index bucket needs
      to be exclusively locked and unlocked.
      
      If we evaluated block->index multiple times, and the adaptive hash
      index was disabled before we locked the adaptive hash index, then
      we would never release the adaptive hash index bucket latch, which
      would eventually lead to InnoDB hanging.
      3fdd3907
    • Monty's avatar
      Fixed compiler warnings in guess_malloc_library · abbce9ed
      Monty authored
      abbce9ed
    • Marko Mäkelä's avatar
      Merge 10.2 into bb-10.2-ext · 39f236a2
      Marko Mäkelä authored
      39f236a2
    • Marko Mäkelä's avatar
    • Marko Mäkelä's avatar
      Merge 10.1 into 10.2 · 27b6b262
      Marko Mäkelä authored
      27b6b262
    • Marko Mäkelä's avatar
      4794e5b0
    • Sergei Petrunia's avatar
    • Marko Mäkelä's avatar
      MDEV-13626: Merge InnoDB test cases from MySQL 5.7 (part 6) · 850702da
      Marko Mäkelä authored
      innodb.truncate_inject: Replacement for innodb_zip.wl6501_error_1
      
      Note: unlike MySQL, in some cases TRUNCATE does not return
      an error in MariaDB. This should be fixed in the scope of
      MDEV-13564 or similar.
      850702da
    • Marko Mäkelä's avatar
    • Marko Mäkelä's avatar
      MDEV-14655 Assertion `!fts_index' failed in prepare_inplace_alter_table_dict · 3d798be1
      Marko Mäkelä authored
      MariaDB inherits the MySQL limitation that ALGORITHM=INPLACE cannot
      create more than one FULLTEXT INDEX at a time. As part of the MDEV-11369
      Instant ADD COLUMN refactoring, MariaDB 10.3.2 accidentally stopped
      enforcing the restriction.
      
      Actually, it is a bug in MySQL 5.6 and MariaDB 10.0 that an ALTER TABLE
      statement with multiple ADD FULLTEXT INDEX but without explicit
      ALGORITHM=INPLACE would return in an error message, rather than
      executing the operation with ALGORITHM=COPY.
      
      ha_innobase::check_if_supported_inplace_alter(): Enforce the restriction
      on multiple FULLTEXT INDEX.
      
      prepare_inplace_alter_table_dict(): Replace some code with debug
      assertions. A "goto error_handled" at this point would result in
      another error, because the reference count of ctx->new_table would be 0.
      3d798be1
  2. 14 Jan, 2018 1 commit
    • Eugene Kosov's avatar
      Compilation speed (#546) · 72136ae7
      Eugene Kosov authored
      Speed up compilation
      
      Standard C++ headers contribute a lot to compilation time. Avoid algorithm
      and sstream in frequently used headers.
      72136ae7
  3. 13 Jan, 2018 7 commits
  4. 12 Jan, 2018 8 commits
    • Sergei Petrunia's avatar
      1eea7966
    • Sergei Petrunia's avatar
      4cafd8e6
    • Marko Mäkelä's avatar
      MDEV-14935 Remove bogus conditions related to not redo-logging PAGE_MAX_TRX_ID changes · 3e6fcb6a
      Marko Mäkelä authored
      InnoDB originally skipped the redo logging of PAGE_MAX_TRX_ID changes
      until I enabled it in commit e76b873f
      that was part of MySQL 5.5.5 already.
      
      Later, when a more complete history of the InnoDB Plugin for MySQL 5.1
      (aka branches/zip in the InnoDB subversion repository) and of the
      planned-to-be closed-source branches/innodb+ that became the basis of
      InnoDB in MySQL 5.5 was pushed to the MySQL source repository, the
      change was part of commit 509e761f:
      
       ------------------------------------------------------------------------
       r5038 | marko | 2009-05-19 22:59:07 +0300 (Tue, 19 May 2009) | 30 lines
      
       branches/zip: Write PAGE_MAX_TRX_ID to the redo log. Otherwise,
       transactions that are started before the rollback of incomplete
       transactions has finished may have an inconsistent view of the
       secondary indexes.
      
       dict_index_is_sec_or_ibuf(): Auxiliary function for controlling
       updates and checks of PAGE_MAX_TRX_ID: check whether an index is a
       secondary index or the insert buffer tree.
      
       page_set_max_trx_id(), page_update_max_trx_id(),
       lock_rec_insert_check_and_lock(),
       lock_sec_rec_modify_check_and_lock(), btr_cur_ins_lock_and_undo(),
       btr_cur_upd_lock_and_undo(): Add the parameter mtr.
      
       page_set_max_trx_id(): Allow mtr to be NULL.  When mtr==NULL, do not
       attempt to write to the redo log.  This only occurs when creating a
       page or reorganizing a compressed page.  In these cases, the
       PAGE_MAX_TRX_ID will be set correctly during the application of redo
       log records, even though there is no explicit log record about it.
      
       btr_discard_only_page_on_level(): Preserve PAGE_MAX_TRX_ID.  This
       function should be unreachable, though.
      
       btr_cur_pessimistic_update(): Update PAGE_MAX_TRX_ID.
      
       Add some assertions for checking that PAGE_MAX_TRX_ID is set on all
       secondary index leaf pages.
      
       rb://115 tested by Michael, fixes Issue #211
       ------------------------------------------------------------------------
      
      After this fix, some bogus references to recv_recovery_is_on()
      remained. Also, some references could be replaced with
      references to index->is_dummy to prepare us for MDEV-14481
      (background redo log apply).
      3e6fcb6a
    • Sergei Petrunia's avatar
    • Otto Kekäläinen's avatar
      Minor spelling fixes in code comments, docs and output · c9c28bef
      Otto Kekäläinen authored
      This commit does not touch any variable names or any other actual code,
      and thus should not in any way affect how the code works.
      c9c28bef
    • Varun Gupta's avatar
    • Sergei Petrunia's avatar
      c481fc9c
    • Sergei Petrunia's avatar
      MDEV-14372: Fix and enable rocksdb.information_schema test · d32f5be3
      Sergei Petrunia authored
      - Make Rdb_binlog_manager::unpack_value to not have a stack overrun
        when it is reading invalid data (which it currently does as we in
        MariaDB do not store binlog coordinates under BINLOG_INFO_INDEX_NUMBER,
        see comments in MDEV-14892 for details).
      - We may need to store these coordinates in the future, so instead of
        removing the call of this function, let's make it work properly for
        all possible inputs.
      d32f5be3
  5. 11 Jan, 2018 7 commits
    • Andrei Elkin's avatar
      Added checking that row events ends with a proper end block · 3dc3ab1a
      Andrei Elkin authored
      Problems --------
      
      The slave io thread did not conduct integrity check
      for a group of row-based events. Specifically it tolerates missed
      terminal block event that must be flagged with STMT_END. Failure to
      react on its loss can confuse the applier thread in various ways.
      Another potential issue was that there were no check of impossible
      second in row Gtid-log-event while the slave io thread is receiving
      to be skipped events after reconnect.
      
      Fixes
      -----
      The slave io thread is made by this patch to track the rows event
      STMT_END status.
      Whenever at next event reading the IO thread finds out that a preceding
      Rows event did not actually had the flag, an
      explicit error is issued.
      
      Replication can be resumed after the source of failure is eliminated,
      see a provided test.
      
      Note that currently the row-based group integrity check excludes
      the compressed version 2 Rows events (which are not generated by MariaDB
      master).
      Its uncompressed counterpart is manually tested.
      
      The 2nd issue is covered to produce an error in case the io thread
      receives a successive Gtid_log_event while it is post-reconnect
      skipping.
      3dc3ab1a
    • Monty's avatar
      5fce14da
    • Marko Mäkelä's avatar
      After-merge fix to innodb.log_corruption · 21239bb0
      Marko Mäkelä authored
      21239bb0
    • Marko Mäkelä's avatar
      Merge bb-10.2-ext into 10.3 · 6dd302d1
      Marko Mäkelä authored
      6dd302d1
    • Marko Mäkelä's avatar
      Merge 10.2 into bb-10.2-ext · cca611d1
      Marko Mäkelä authored
      cca611d1
    • Monty's avatar
      Removed duplicated copyright message · bf771911
      Monty authored
      bf771911
    • Marko Mäkelä's avatar
      MDEV-14824 Assertion `!trx_is_started(trx)' failed in innobase_start_trx_and_assign_read_view · 773c3ceb
      Marko Mäkelä authored
      In CREATE SEQUENCE or CREATE TEMPORARY SEQUENCE, we should not start
      an InnoDB transaction for inserting the sequence status record into
      the underlying no-rollback table. Because we did this, a debug assertion
      failure would fail in START TRANSACTION WITH CONSISTENT SNAPSHOT after
      CREATE TEMPORARY SEQUENCE was executed.
      
      row_ins_step(): Do not start the transaction. Let the caller do that.
      
      que_thr_step(): Start the transaction before calling row_ins_step().
      
      row_ins_clust_index_entry(): Skip locking and undo logging for no-rollback
      tables, even for temporary no-rollback tables.
      
      row_ins_index_entry(): Allow trx->id==0 for no-rollback tables.
      
      row_insert_for_mysql(): Do not start a transaction for no-rollback tables.
      773c3ceb