1. 22 Feb, 2022 2 commits
  2. 21 Feb, 2022 5 commits
    • Haidong Ji's avatar
      MDEV-27394 added memset to zero out addr.un.sun_path string · 120480d1
      Haidong Ji authored
      If this char[] is not zeroed out, inaccurate log message described in
      MDEV-27394 will show up.
      120480d1
    • Vlad Lesin's avatar
      Merge 10.3 into 10.4 · f6f055a1
      Vlad Lesin authored
      f6f055a1
    • Vlad Lesin's avatar
      MDEV-20605 Awaken transaction can miss inserted by other transaction records... · a6f258e4
      Vlad Lesin authored
      MDEV-20605 Awaken transaction can miss inserted by other transaction records due to wrong persistent cursor restoration
      
      Backported from 10.5 20e9e804 and
      5948d760.
      
      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().
      a6f258e4
    • Marko Mäkelä's avatar
      MDEV-27550: Disable galera.MW-328D · b9ee26e9
      Marko Mäkelä authored
      (cherry picked from commit 66465914)
      b9ee26e9
    • Vlad Lesin's avatar
      MDEV-27025 insert-intention lock conflicts with waiting ORDINARY lock · 5f001bd7
      Vlad Lesin authored
      The code was backported from 10.5 be811386
      commit. See that commit message for details.
      5f001bd7
  3. 18 Feb, 2022 3 commits
    • Marko Mäkelä's avatar
      MDEV-26645: Fix UB in Item_func_plus and Item_func_minus · b69191bb
      Marko Mäkelä authored
      An integer overflow in an expression like a+b or a-b is undefined behavior.
      The compiler is allowed to assume that no such overflow is possible,
      and optimize away some code accordingly.
      
      Item_func_plus::int_op(), Item_func_minus::int_op(): Always check
      for overflow.
      
      Depending on the compiler and the compilation options, a test might fail:
      
      CURRENT_TEST: main.func_math
      mysqltest: At line 425: query 'SELECT 9223372036854775807 + 9223372036854775807' succeeded - should have failed with errno 1690...
      
      A similar bug had been fixed earlier in
      commit 328edf85.
      b69191bb
    • Marko Mäkelä's avatar
      4030a9fb
    • Nayuta Yanagisawa's avatar
      MDEV-27730 Add PLUGIN_VAR_DEPRECATED flag to plugin variables · 66f55a01
      Nayuta Yanagisawa authored
      The sys_var class has the deprecation_substitute member to mark the
      deprecated variables. As it's set, the server produces warnings when
      these variables are used. However, the plugin has no means to utilize
      that functionality.
      
      So, the PLUGIN_VAR_DEPRECATED flag is introduced to set the
      deprecation_substitute with the empty string. A non-empty string can
      make the warning more informative, but there's no nice way seen to
      specify it, and not that needed at the moment.
      66f55a01
  4. 17 Feb, 2022 11 commits
  5. 16 Feb, 2022 4 commits
    • forkfun's avatar
    • Monty's avatar
      MDEV-17223 Assertion `thd->killed != 0' failed in ha_maria::enable_indexes · 0a92ef45
      Monty authored
      MDEV-22500 Assertion `thd->killed != 0' failed in ha_maria::enable_indexes
      
      For MDEV-17223 the issue was an assert that didn't take into account that
      we could get duplicate key errors when enablling unique indexes.
      Fixed by not retrying repair in case of duplicate key error for this
      case, which avoids the assert.
      
      For MDEV-22500 I removed the assert, as it's not critical (just a way to
      find potential wrong code) and we will anyway get things logged in the
      error log if this happens. This case cannot triggered an assert in 10.3
      but I verified that it would trigger in 10.5 and that this patch fixes
      it.
      0a92ef45
    • Marko Mäkelä's avatar
      MDEV-27634 innodb_zip tests failing on s390x · cf574cf5
      Marko Mäkelä authored
      Some GNU/Linux distributions ship a zlib that is modified to use
      the s390x DFLTCC instruction. That modification would essentially
      redefine compressBound(sourceLen) as (sourceLen * 16 + 2308) / 8 + 6.
      
      Let us relax the tests for InnoDB ROW_FORMAT=COMPRESSED to cope with
      such a weaker compression guarantee.
      
      create_table_info_t::row_size_is_acceptable(): Remove a bogus debug-only
      assertion that would fail to hold for the test innodb_zip.bug36169.
      The function page_zip_empty_size() may indeed return 0.
      cf574cf5
    • Lena Startseva's avatar
      MDEV-27691: make working view-protocol · 6c3f1f66
      Lena Startseva authored
      Added ability to disable/enable (--disable_view_protocol/--enable_view_protocol) view-protocol in tests.
      When the  option "--disable_view_protocol" is used  util connections are closed.
      Added new test for checking view-protocol
      6c3f1f66
  6. 15 Feb, 2022 4 commits
    • Brandon Nesterenko's avatar
      MDEV-16091: Seconds_Behind_Master spikes to millions of seconds · cdf19cd6
      Brandon Nesterenko authored
      The rpl.rpl_seconds_behind_master_spike test would sometimes
      timeout or take a very long time to complete. This happened
      because an MTR DEBUG_SYNC signal would be lost due to a
      subsequent call to RESET. I.e., the slave SQL thread would
      be paused due to the WAIT_FOR signal being lost, resulting in
      either a failed test if the `select master_pos_wait` timeout
      occurs first, or a very long run-time if the DBUG_SYNC timeout
      occurs first.
      
      The fix ensures that the MTR signal is processed by the slave
      SQL thread before issuing the call to RESET
      
      Reviewed By:
      ============
      Andrei Elkin <andrei.elkin@mariadb.com>
      cdf19cd6
    • 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
    • Ustun Ozgur's avatar
      Fix typo in mysqadmin manpage · b557f263
      Ustun Ozgur authored
      b557f263
  7. 14 Feb, 2022 11 commits
    • Vlad Lesin's avatar
      Merge 10.5 into 10.6 · f2f22c38
      Vlad Lesin authored
      f2f22c38
    • 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.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