1. 17 Feb, 2022 3 commits
  2. 15 Feb, 2022 4 commits
    • Marko Mäkelä's avatar
      MDEV-27848 fixup: Use os_file_close_func() · 8251a9fb
      Marko Mäkelä authored
      To close a non-instrumented file, os_file_close_func() should be used
      instead of os_file_close().
      8251a9fb
    • Marko Mäkelä's avatar
      MDEV-27848: Remove unused wait/io/file/innodb/innodb_log_file · f1beeb58
      Marko Mäkelä authored
      The performance_schema counter wait/io/file/innodb/innodb_log_file
      is always reported as 0.
      
      The way how redo log writes are being waited for was refactored in
      commit 30ea63b7 by the introduction
      of flush_lock and write_lock. Even before that change, all the
      wait/io/file/innodb/ counters were always 0 in my tests.
      
      Moreover, if the PMEM interface that was introduced in
      commit 3daef523
      is being used, writes to the InnoDB log file will completely avoid
      any system calls and performance_schema instrumentation.
      In commit 685d958e also the reads
      of the redo log (during recovery) would bypass any system calls.
      f1beeb58
    • Vlad Lesin's avatar
      Merge 10.5 into 10.6 · 497809d2
      Vlad Lesin authored
      497809d2
    • Vlad Lesin's avatar
      MDEV-20605 Awaken transaction can miss inserted by other transaction records... · 5948d760
      Vlad Lesin authored
      MDEV-20605 Awaken transaction can miss inserted by other transaction records due to wrong persistent cursor restoration
      
      Post-push fix: remove unstable test.
      
      The test was developed to find the reason of duplicated rows caused by
      MDEV-20605 fix. The test is not necessary as the reason was found and
      the bug was fixed.
      5948d760
  3. 14 Feb, 2022 21 commits
    • Marko Mäkelä's avatar
      Clean up log resizing · 3b06415c
      Marko Mäkelä authored
      log_t::rename_resized(): Replaces create_log_file_rename()
      
      delete_log_files(): Moved to a separate function. Also invoked
      on a normal startup when the log is not being resized, to
      remove any garbage log files.
      
      create_log_file(): Remove the std::string& parameter.
      
      os_file_delete_if_exists_func() [_WIN32]: Do not retry DeleteFile()
      on ERROR_ACCESS_DENIED.
      3b06415c
    • Marko Mäkelä's avatar
      73605d18
    • Vlad Lesin's avatar
      Merge 10.5 into 10.6 · f2f22c38
      Vlad Lesin authored
      f2f22c38
    • Vladislav Vaintroub's avatar
      fixup 63b9d6e7 , log_sys.write_buf can't run in a loop · 972b4564
      Vladislav Vaintroub authored
      The write_lock is released after the first time already.
      
      This leaves the hole in the log_write_and_flush logic, some
      flush_lock/write_lock waiters could be hanging, until the
      background redo log flush comes.
      
      The possibility of that is relatively tiny though.
      972b4564
    • Vladislav Vaintroub's avatar
    • Vlad Lesin's avatar
      MDEV-20605 Awaken transaction can miss inserted by other transaction records... · 20e9e804
      Vlad Lesin authored
      MDEV-20605 Awaken transaction can miss inserted by other transaction records due to wrong persistent cursor restoration
      
      sel_restore_position_for_mysql() moves forward persistent cursor
      position after btr_pcur_restore_position() call if cursor relative position
      is BTR_PCUR_ON and the cursor points to the record with NOT the same field
      values as in a stored record(and some other not important for this case
      conditions).
      
      It was done because btr_pcur_restore_position() sets
      page_cur_mode_t mode  to PAGE_CUR_LE for cursor->rel_pos ==  BTR_PCUR_ON
      before opening cursor. So we are searching for the record less or equal
      to stored one. And if the found record is not equal to stored one, then
      it is less and we need to move cursor forward.
      
      But there can be a situation when the stored record was purged, but the
      new one with the same key but different value was inserted while
      row_search_mvcc() was suspended. In this case, when the thread is
      awaken, it will invoke sel_restore_position_for_mysql(), which, in turns,
      invoke btr_pcur_restore_position(), which will return false because found
      record don't match stored record, and
      sel_restore_position_for_mysql() will move forward cursor position.
      
      The above can lead to the case when awaken row_search_mvcc() do not see
      records inserted by other transactions while it slept. The mtr test case
      shows the example how it can be.
      
      The fix is to return special value from persistent cursor restoring
      function which would notify its caller that uniq fields of restored
      record and stored record are the same, and in this case
      sel_restore_position_for_mysql() don't move cursor forward.
      
      Delete-marked records are correctly processed in row_search_mvcc().
      Non-unique secondary indexes are "uniquified" by adding the PK, the
      index->n_uniq should then be index->n_fields. So there is no need in
      additional checks in the fix.
      
      If transaction's readview can't see the changes made in secondary index
      record, it requests clustered index record in row_search_mvcc() to check
      its transaction id and get the correspondent record version. After this
      row_search_mvcc() commits mtr to preserve clustered index latching
      order, and starts mtr. Between those mtr commit and start secondary
      index pages are unlatched, and purge has the ability to remove stored in
      the cursor record, what causes rows duplication in result set for
      non-locking reads, as cursor position is restored to the previously
      visited record.
      
      To solve this the changes are just switched off for non-locking reads,
      it's quite simple solution, besides the changes don't make sense for
      non-locking reads.
      
      The more complex and effective from performance perspective solution is
      to create mtr savepoint before clustered record requesting and rolling
      back to that savepoint after that. See MDEV-27557.
      
      One more solution is to have per-record transaction id for secondary
      indexes. See MDEV-17598.
      
      If any of those is implemented, just remove select_lock_type argument in
      sel_restore_position_for_mysql().
      20e9e804
    • Vladislav Vaintroub's avatar
      Fix whitespaces · 7aa09af4
      Vladislav Vaintroub authored
      7aa09af4
    • Vladislav Vaintroub's avatar
    • Marko Mäkelä's avatar
      Merge 10.7 into 10.8 · 3553cfd0
      Marko Mäkelä authored
      3553cfd0
    • Marko Mäkelä's avatar
      Merge 10.6 into 10.7 · 33fd136c
      Marko Mäkelä authored
      33fd136c
    • Marko Mäkelä's avatar
      Merge 10.5 into 10.6 · feb8004b
      Marko Mäkelä authored
      feb8004b
    • Marko Mäkelä's avatar
      Merge 10.4 into 10.5 · 52b32c60
      Marko Mäkelä authored
      52b32c60
    • Marko Mäkelä's avatar
      Merge mariadb-10.5.15 into 10.5 · 6405ed63
      Marko Mäkelä authored
      6405ed63
    • Marko Mäkelä's avatar
      Merge 10.3 into 10.4 · c9bc10e6
      Marko Mäkelä authored
      c9bc10e6
    • Marko Mäkelä's avatar
      Merge mariadb-10.4.24 into 10.4 · 4964f181
      Marko Mäkelä authored
      4964f181
    • Marko Mäkelä's avatar
      Merge 10.2 into 10.3 · e928fdbf
      Marko Mäkelä authored
      e928fdbf
    • Marko Mäkelä's avatar
      Merge mariadb-10.3.34 into 10.3 · a6ef239b
      Marko Mäkelä authored
      a6ef239b
    • Marko Mäkelä's avatar
      Merge 10.7 into 10.8 · f6130147
      Marko Mäkelä authored
      f6130147
    • Marko Mäkelä's avatar
      Merge mariadb-10.8.2 into 10.8 · 6c2a7d43
      Marko Mäkelä authored
      6c2a7d43
    • Marko Mäkelä's avatar
      Merge 10.6 into 10.7 · 5291f35f
      Marko Mäkelä authored
      5291f35f
    • Marko Mäkelä's avatar
      Merge mariadb-10.7.3 into 10.7 · 018519a8
      Marko Mäkelä authored
      018519a8
  4. 13 Feb, 2022 2 commits
    • Marko Mäkelä's avatar
      MDEV-27817 InnoDB recovery of recently created files is not crash-safe · 7b891008
      Marko Mäkelä authored
      Before commit 86dc7b4d (MDEV-24626)
      all tablespace ID that needed recovery were known already in
      recv_init_crash_recovery_spaces().
      
      recv_sys_t::recover_deferred(): Invoke fil_names_dirty(space) on
      the newly initialized tablespace. In this way, if the next log
      checkpoint occurs at some LSN that is after the initialization of
      the tablespace and before the last recovered LSN, a FILE_MODIFY
      record will be written, so that a subsequent recovery will succeed.
      
      The recovery was broken when
      commit 0261eac5 merged the 10.5
      commit f443cd11 (MDEV-27022).
      7b891008
    • Marko Mäkelä's avatar
      Merge mariadb-10.6.7 into 10.6 · f1e08eaa
      Marko Mäkelä authored
      f1e08eaa
  5. 12 Feb, 2022 7 commits
  6. 11 Feb, 2022 3 commits
    • Vladislav Vaintroub's avatar
      MDEV-27813 Windows, compiling : RelWithDebInfo should use /Ob2 · 91d9e9bd
      Vladislav Vaintroub authored
      Fixed inlining flags. Remove /Ob1 added by CMake for RelWithDebInfo.
      (the actual compiler default is /Ob2 if optimizations are enabled)
      
      Allow to define custom /Ob flag with new variable MSVC_INLINE, if desired
      91d9e9bd
    • Marko Mäkelä's avatar
      Disable innodb_gis.rtree_compress2 · 1a7573d5
      Marko Mäkelä authored
      1a7573d5
    • Krunal Bauskar's avatar
      MDEV-27805: tpcc workload shows regression with MDB-10.6 · fb875055
      Krunal Bauskar authored
      - regression got revealed while running tpcc workload.
      
      - as part of MDEV-25919 changes logic for statistics computation was revamped.
      
      - if the table has changed to certain threshold then table is added to
        statistics recomputation queue (dict_stats_recalc_pool_add)
      
      - after the table is added to queue the background statistics thread is
        notified
      
      - during revamp the condition to notify background statistics threads was
        wrongly updated to check if the queue/vector is empty when it should
        check if there is queue/vector has entries to process.
      
      - vec.begin() == vec.end() : only when vector is empty
      
      - also accessing these iterator outside the parallely changing vector is not
        safe
      
      - fix now tend to notify background statistics thread if the logic adds
        an entry to the queue/vector.
      fb875055