1. 14 Feb, 2022 14 commits
  2. 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
  3. 12 Feb, 2022 7 commits
  4. 11 Feb, 2022 6 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
    • Marko Mäkelä's avatar
      MDEV-27774 fixup: Replace sspin_lock with srw_lock · bd70ae05
      Marko Mäkelä authored
      srw_lock in log_sys.append_prepare() turned out to yield best throughput.
      We might try a NUMA aware spin lock implementation later.
      bd70ae05
    • Vlad Lesin's avatar
      MDEV-27746 Wrong comparision of BLOB's empty preffix with non-preffixed BLOB... · 3b10e8f8
      Vlad Lesin authored
      MDEV-27746 Wrong comparision of BLOB's empty preffix with non-preffixed BLOB causes rows count mismatch for clustered and secondary indexes during non-locking read
      
      row_sel_sec_rec_is_for_clust_rec() treats empty BLOB prefix field in
      secondary index as a field equal to any external BLOB field in clustered
      index. Row_sel_get_clust_rec_for_mysql::operator() doesn't zerro out
      clustered record pointer in row_search_mvcc(), and row_search_mvcc()
      thinks that delete-marked secondary index record has visible for
      "CHECK TABLE"'s read view old-versioned clustered index record, and
      row_scan_index_for_mysql() counts it as a row.
      
      The fix is to execute row_sel_sec_rec_is_for_blob() in
      row_sel_sec_rec_is_for_clust_rec() if clustered field contains BLOB's
      reference.
      3b10e8f8
    • Samuel Thibault's avatar
      MDEV-27804 Fails to build - perf schema - thread id of type uintptr_t requires header · 7c6ec0a5
      Samuel Thibault authored
      While building on GNU/Hurd and kfreebsd.
      
      On the C++ standard uintptr_t can be defined in <cstdint>
      ref: https://www.cplusplus.com/reference/cstdint/
      
      Fixes: 0d44792a
      7c6ec0a5
  5. 10 Feb, 2022 11 commits
    • Sergei Golubchik's avatar
      Merge branch '10.7' into 10.8 · 7dade0ad
      Sergei Golubchik authored
      7dade0ad
    • Sergei Golubchik's avatar
      Merge branch '10.6' into 10.7 · 65f60231
      Sergei Golubchik authored
      65f60231
    • Sergei Golubchik's avatar
      Merge branch '10.5 into 10.6 · e3894f5d
      Sergei Golubchik authored
      e3894f5d
    • Sergei Golubchik's avatar
      Merge branch '10.4' into 10.5 · 9aa3564e
      Sergei Golubchik authored
      9aa3564e
    • Sergei Golubchik's avatar
      Merge branch '10.3' into 10.4 · b4477ae7
      Sergei Golubchik authored
      b4477ae7
    • Sergei Golubchik's avatar
      Merge branch '10.2' into 10.3 · a36fc80a
      Sergei Golubchik authored
      a36fc80a
    • Sergei Petrunia's avatar
      MDEV-25636: Bug report: abortion in sql/sql_parse.cc:6294 · 3a525694
      Sergei Petrunia authored
      The asserion failure was caused by this query
      
        select /*id=1*/ from t1
        where
         col= ( select /*id=2*/ from ... where corr_cond1
                union
                select /*id=4*/ from ... where corr_cond2)
      
      Here,
      - select with id=2 was correlated due to corr_cond1.
      - select with id=4 was initially correlated due to corr_cond2, but then
        the optimizer optimized away the correlation, making the select with id=4
        uncorrelated.
      
      However, since select with id=2 remained correlated, the execution had to
      re-compute the whole UNION. When it tried to execute select with id=4, it
      hit an assertion  (join buffer already free'd).
      
      This is because select with id=4 has freed its execution structures after
      it has been executed once. The select is uncorrelated, so it did not expect
      it would need to be executed for the second time.
      
      Fixed this by adding this logic in
      st_select_lex::optimize_unflattened_subqueries():
      
        If a member of a UNION is correlated, mark all its members as
        correlated, so that they are prepared to be executed multiple times.
      3a525694
    • Vladislav Vaintroub's avatar
      MDEV-27796 Windows - starting server with huge innodb-log-buffer-size may fail · 012e724d
      Vladislav Vaintroub authored
      Fixed tpool::pread() and tpool::pwrite() to return SSIZE_T on Windows,
      so that huge numbers are not converted to negatives.
      
      Also, make sure to never attempt reading/writing more bytes than
      DWORD can accomodate (4G)
      012e724d
    • Sergei Golubchik's avatar
      MDEV-26351 segfault - (MARIA_HA *) 0x0 in ha_maria::extra · 9e2c26b0
      Sergei Golubchik authored
      don't let Aria create a table that it cannot open
      9e2c26b0
    • Sergei Golubchik's avatar
      MDEV-26351 segfault - (MARIA_HA *) 0x0 in ha_maria::extra · 1b8bb441
      Sergei Golubchik authored
      use the correct check. before invoking handler methods we
      need to know that the table was opened, not only created.
      1b8bb441
    • Marko Mäkelä's avatar
      MDEV-27774 Reduce scalability bottlenecks in mtr_t::commit() · a635c406
      Marko Mäkelä authored
      A prominent bottleneck in mtr_t::commit() is log_sys.mutex between
      log_sys.append_prepare() and log_close().
      
      User-visible change: The minimum innodb_log_file_size will be
      increased from 1MiB to 4MiB so that some conditions can be
      trivially satisfied.
      
      log_sys.latch (log_latch): Replaces log_sys.mutex and
      log_sys.flush_order_mutex. Copying mtr_t::m_log to
      log_sys.buf is protected by a shared log_sys.latch.
      Writes from log_sys.buf to the file system will be protected
      by an exclusive log_sys.latch.
      
      log_sys.lsn_lock: Protects the allocation of log buffer
      in log_sys.append_prepare().
      
      sspin_lock: A simple spin lock, for log_sys.lsn_lock.
      
      Thanks to Vladislav Vaintroub for suggesting this idea, and for
      reviewing these changes.
      
      mariadb-backup: Replace some use of log_sys.mutex with recv_sys.mutex.
      
      buf_pool_t::insert_into_flush_list(): Implement sorting of flush_list
      because ordering is otherwise no longer guaranteed. Ordering by LSN
      is needed for the proper operation of redo log checkpoints.
      
      log_sys.append_prepare(): Advance log_sys.lsn and log_sys.buf_free by
      the length, and return the old values. Also increment write_to_buf,
      which was previously done in log_close().
      
      mtr_t::finish_write(): Obtain the buffer pointer from
      log_sys.append_prepare().
      
      log_sys.buf_free: Make the field Atomic_relaxed,
      to simplify log_flush_margin(). Use only loads and stores
      to avoid costly read-modify-write atomic operations.
      
      buf_pool.flush_list_requests: Replaces
      export_vars.innodb_buffer_pool_write_requests
      and srv_stats.buf_pool_write_requests.
      Protected by buf_pool.flush_list_mutex.
      
      buf_pool_t::insert_into_flush_list(): Do not invoke page_cleaner_wakeup().
      Let the caller do that after a batch of calls.
      
      recv_recover_page(): Invoke a minimal part of
      buf_pool.insert_into_flush_list().
      
      ReleaseBlocks::modified: A number of pages added to buf_pool.flush_list.
      
      ReleaseBlocks::operator(): Merge buf_flush_note_modification() here.
      
      log_t::set_capacity(): Renamed from log_set_capacity().
      a635c406