1. 19 Jan, 2021 3 commits
  2. 18 Jan, 2021 4 commits
    • Thirunarayanan Balathandayuthapani's avatar
      5d684cd2
    • Marko Mäkelä's avatar
      Update the copyright year · 1eca4535
      Marko Mäkelä authored
      1eca4535
    • Marko Mäkelä's avatar
      Some cleanup · bfb21b37
      Marko Mäkelä authored
      FIXME: We must check index->table->bulk_trx_id in or after
      btr_pcur_open_at_index_side() and btr_cur_search_to_nth_level(),
      while holding a latch on a leaf page.
      bfb21b37
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-515 InnoDB bulk insert · 9c4c6819
      Thirunarayanan Balathandayuthapani authored
      dict_table_t::bulk_trx_id: Stores the bulk insert
      transaction id. Protected by exclusive lock of the table.
      It can be used by other connection read operation to
      identify whether to read the table
      
      ins_node_t::bulk_insert: Flag to indicate the bulk
      insert of the table.
      
      trx_mod_table_time_t::bulk_insert_undo: Enable undo logging
      for the consecutive insert during bulk insert operation.
      
      Introduced new undo log record "TRX_UNDO_EMPTY".
      It should be first undo log during bulk insert operation.
      While rollback, if innodb encounters the undo record
      then it should empty the table
      
      dict_table_t::empty_table(): Basically it empties all the
      indexes associated with table . This is undo operation
      of bulk insert operation. Metadata record should be retained
      during this rollback operation
      
      dict_table_t::remove_bulk_trx(): Resets the bulk_trx_id
      
      row_log_table_empty(): If the table is being created during
      empty_table() then log the EMPTY operation in the online log
      
      row_log_online_op(): If the secondary index is being created
      during empty_table() then log ROW_OP_EMPTY operation
      in online log
      
      row_log_table_apply_empty(): Applies the ROW_T_EMPTY to the
      table that was being rebuild. It does call empty_table() to
      empty the table.
      
      btr_root_page_init(): Initialize the root page of the b-tree.
      It is used during dict_index_t::empty() and btr_create().
      
      btr_cur_ins_lock_and_undo(): During first insert of bulk
      insert operation, write UNDO_EMPTY undo log of it and
      reset DB_TRX_ID and DB_ROLL_PTR.
      
      trx_mark_sql_stat_end(): Set the bulk_insert_undo for
      bulk operation of the table. So that consecutive insert
      does allow undo operation.
      
      row_search_mvcc(): check whether the current transaction
      can view the table records based on bulk_trx_id.
      
      row_merge_read_clustered_index(): Avoid the table read if the
      bulk transaction id of the table is not visible within
      current transaction read view.
      
      - HA_EXTRA_IGNORE_INSERT flag in ha_innobase::extra() is to
      indicate insert/load/alter ignore statement. So that bulk
      transaction can write the undo log for the consecutive insert
      operation within the transaction.
      
      row_ins_step(): Removed the transaction id written for the data
      tuple to be inserted. This is moved to btr_cur_ins_lock_and_undo()
      and it is written after writing undo log for the insert operation.
      
      - Add new insert in many test case to avoid the hang. Because
      MDEV-515 takes X-lock of the table for first insert. So
      concurrent insert will wait for X-lock to be released.
      9c4c6819
  3. 15 Jan, 2021 1 commit
  4. 14 Jan, 2021 4 commits
    • Marko Mäkelä's avatar
      Fixup 92abdcca · 0dfabf6e
      Marko Mäkelä authored
      Revert an accidental update of ColumnStore.
      A different submodule is being used between MariaDB 10.5 and 10.6.
      The submodule was accidentally updated to the 10.5 version in the merge.
      0dfabf6e
    • Marko Mäkelä's avatar
      MDEV-24569: Merge 10.5 into 10.6 · 394fc71f
      Marko Mäkelä authored
      fseg_page_is_free(): Because MDEV-24167 changed fil_space_t::latch
      to a simple non-recursive rw-lock, we must avoid acquiring a shared
      latch if the current thread already holds an exclusive latch.
      This affects the test innodb.innodb_bug59733, which is exercising
      the change buffer.
      
      fil_space_t::is_owner(): Make available in non-debug builds.
      394fc71f
    • Marko Mäkelä's avatar
      Merge 10.5 into 10.6 · 6d05a95c
      Marko Mäkelä authored
      6d05a95c
    • Marko Mäkelä's avatar
      MDEV-24569: Change buffer merge modifies freed page · deadec4e
      Marko Mäkelä authored
      Starting with MDEV-15528, we will avoid writing freed pages back
      to data files. During stress testing, the assertion
      mach_read_from_4(frame + 4U) == block.page.id().page_no()
      failed in log_phys_t::apply(), because before the server was
      killed and restarted, change buffer merge was executed on a
      previously freed page.
      
      During recovery, the assertion would fail when InnoDB would apply
      a FREE_PAGE and a WRITE record to the page.
      
      ibuf_merge_or_delete_for_page(): Before applying any changes, check whether
      the secondary index leaf page has already been freed according to
      the allocation bitmap page. If it is freed, then we must reset the bits
      in change buffer bitmap page.
      
      ibuf_reset_bitmap(): Auxiliary function for repeated code.
      
      mtr_t::sx_lock_space(): Replaces mtr_t::x_lock_space(). Due to the
      lazy approach of the change buffer, The function
      ibuf_merge_or_delete_for_page() may be executed in buf_page_create()
      while the tablespace is already X-latched. An S-latch must not be
      acquired while the thread already holds an X-latch, but a redundant
      SX-latch is fine.
      
      The fix was developed by Thirunarayanan Balathandayuthapani.
      deadec4e
  5. 13 Jan, 2021 1 commit
    • Marko Mäkelä's avatar
      MDEV-24536 innodb_idle_flush_pct has no effect · e4205fba
      Marko Mäkelä authored
      The parameter innodb_idle_flush_pct that was introduced in
      MariaDB Server 10.1.2 by MDEV-6932 has no effect ever since
      the InnoDB changes from MySQL 5.7.9 were applied in
      commit 2e814d47.
      
      Let us declare the parameter as MARIADB_REMOVED_OPTION.
      For earlier versions, commit ea9cd97f
      declared the parameter deprecated.
      e4205fba
  6. 12 Jan, 2021 7 commits
  7. 11 Jan, 2021 4 commits
  8. 10 Jan, 2021 1 commit
  9. 09 Jan, 2021 3 commits
  10. 08 Jan, 2021 6 commits
    • Jan Lindström's avatar
      MDEV-23536 : Race condition between KILL and transaction commit · 775fccea
      Jan Lindström authored
      A race condition may occur between the execution of transaction commit,
      and an execution of a KILL statement that would attempt to abort that
      transaction.
      
      MDEV-17092 worked around this race condition by modifying InnoDB code.
      After that issue was closed, Sergey Vojtovich pointed out that this
      race condition would better be fixed above the storage engine layer:
      
      If you look carefully into the above, you can conclude that
      thd->free_connection() can be called concurrently with
      KILL/thd->awake(). Which is the bug. And it is partially fixed in
      THD::~THD(), that is destructor waits for KILL completion:
      
      Fix: Add necessary mutex operations to THD::free_connection()
      and move WSREP specific code also there. This ensures that no
      one is using THD while we do free_connection(). These mutexes
      will also ensures that there can't be concurrent KILL/THD::awake().
      
      innobase_kill_query
        We can now remove usage of trx_sys_mutex introduced on MDEV-17092.
      
      trx_t::free()
        Poison trx->state and trx->mysql_thd
      
      This patch is validated with an RQG run similar to the one that
      reproduced MDEV-17092.
      775fccea
    • Marko Mäkelä's avatar
      18254c18
    • Nikita Malyavin's avatar
      fixup MDEV-17556: fix mroonga · 61a362c9
      Nikita Malyavin authored
      61a362c9
    • Jan Lindström's avatar
      Update wsrep-lib · 26d913a7
      Jan Lindström authored
      26d913a7
    • Marko Mäkelä's avatar
      cd1e5d65
    • Nikita Malyavin's avatar
      MDEV-17556 Assertion `bitmap_is_set_all(&table->s->all_set)' failed · e25623e7
      Nikita Malyavin authored
      The assertion failed in handler::ha_reset upon SELECT under
      READ UNCOMMITTED from table with index on virtual column.
      
      This was the debug-only failure, though the problem is mush wider:
      * MY_BITMAP is a structure containing my_bitmap_map, the latter is a raw
       bitmap.
      * read_set, write_set and vcol_set of TABLE are the pointers to MY_BITMAP
      * The rest of MY_BITMAPs are stored in TABLE and TABLE_SHARE
      * The pointers to the stored MY_BITMAPs, like orig_read_set etc, and
       sometimes all_set and tmp_set, are assigned to the pointers.
      * Sometimes tmp_use_all_columns is used to substitute the raw bitmap
       directly with all_set.bitmap
      * Sometimes even bitmaps are directly modified, like in
      TABLE::update_virtual_field(): bitmap_clear_all(&tmp_set) is called.
      
      The last three bullets in the list, when used together (which is mostly
      always) make the program flow cumbersome and impossible to follow,
      notwithstanding the errors they cause, like this MDEV-17556, where tmp_set
      pointer was assigned to read_set, write_set and vcol_set, then its bitmap
      was substituted with all_set.bitmap by dbug_tmp_use_all_columns() call,
      and then bitmap_clear_all(&tmp_set) was applied to all this.
      
      To untangle this knot, the rule should be applied:
      * Never substitute bitmaps! This patch is about this.
       orig_*, all_set bitmaps are never substituted already.
      
      This patch changes the following function prototypes:
      * tmp_use_all_columns, dbug_tmp_use_all_columns
       to accept MY_BITMAP** and to return MY_BITMAP * instead of my_bitmap_map*
      * tmp_restore_column_map, dbug_tmp_restore_column_maps to accept
       MY_BITMAP* instead of my_bitmap_map*
      
      These functions now will substitute read_set/write_set/vcol_set directly,
      and won't touch underlying bitmaps.
      e25623e7
  11. 07 Jan, 2021 6 commits