1. 11 Oct, 2019 1 commit
    • Marko Mäkelä's avatar
      MDEV-20804 Speed up main.index_merge_innodb · 5ef12244
      Marko Mäkelä authored
      The test main.index_merge_innodb is taking very much time,
      especially on later versions (10.2 and 10.3).
      
      Some of this could be attributed to the use of INSERT...SELECT,
      which is time-consumingly creating explicit record locks in InnoDB
      for the locking read in the SELECT part.
      
      In 10.3 and later, some slowness can be attributed to MDEV-12288,
      which makes the InnoDB purge thread spend time to reset transaction
      identifiers in the inserted records. If we prevent purge from
      running before all tables are dropped, the test seems to be
      10% faster on an unoptimized debug build on 10.5. (A proper fix
      would be to implement MDEV-515 and stop writing row-level undo log
      records for inserts into an empty table or partition.)
      
      At the same time, it should not hurt to make main.index_merge_myisam
      to use the sequence engine. Not only could it be a little faster,
      but the test would be slightly more readable.
      5ef12244
  2. 08 Oct, 2019 1 commit
  3. 07 Oct, 2019 2 commits
  4. 02 Oct, 2019 1 commit
    • Sergey Vojtovich's avatar
      Cleanup EITS · e43791d4
      Sergey Vojtovich authored
      Moved EITS allocation inside read_statistics_for_tables_if_needed().
      Removed redundant is_safe argument.
      e43791d4
  5. 01 Oct, 2019 2 commits
  6. 30 Sep, 2019 1 commit
    • Sujatha's avatar
      MDEV-20645: Replication consistency is broken as workers miss the error... · 9b80f930
      Sujatha authored
      MDEV-20645: Replication consistency is broken as workers miss the error notification from an earlier failed group.
      
      Analysis:
      ========
      In general if there are three groups.
      1 - Inserts 32 which fails due to local entry '32' on slave.
      2 - Inserts 33
      3 - Inserts 34
      
      Each group considers itself as a waiter and it waits for prior group 'waitee'.
      This is done in 'register_wait_for_prior_event_group_commit'. If there is no
      other parallel group being scheduled then no waitee will be there.
      
      Let us assume 3 groups are being scheduled in parallel.
      
      3-> waits for 2-> waits for->1
      
      '1' upon completion it checks is there any registered subsequent waiter. If
      so it wakes up the subsequent waiter with its execution status. This execution
      status is stored in wakeup_error.
      
      If '1' failed then it sends corresponding wakeup_error to 2. Then '2' aborts
      and it propagates error to '3'.  So all further commits are aborted.  This
      mechanism works only when all transactions reach a stage where they are
      waiting for their prior commit to complete.
      
      In case of optimistic following scenario occurs.
      
      1,2,3 are scheduled in parallel.
      
      3 - Reaches group_commit_code waits for 2 to complete.
      1 - errors out sets stop_on_error_sub_id=1.
      
      When a group execution results in error its corresponding sub_id is set to
      'stop_on_error_sub_id'. Any new groups queued for execution will check if
      their sub_id is > stop_on_error_sub_id.  If it is true their execution will be
      skipped as prior group execution failed.  'skip_event_group=1' will be set.
      Since the execution of SQL thread is about to stop we just skip execution of
      all the following event groups.  We still do all the normal waiting and wakeup
      processing between the event groups as a simple way to ensure that everything
      is stopped and cleaned up correctly.
      
      Upon error '1' transaction checks for registered waiters. Since no one is
      there it simply goes away.
      
      2 - Starts the execution. It checks do I have a waitee.
      
      Since wait_commit_sub_id == entry->last_committed_sub_id no waitee is set.
      
      Secondly: 'entry->stop_on_error_sub_id' is set by '1'st execution.  Now
      'handle_parallel_thread' code checks if the current group 'sub_id' is greater
      than the 'sub_id' set within 'stop_on_error_sub_id'.
      
      Since the above is true 'skip_event_group=true' is set.  Simply call
      'wait_for_prior_commit' to wakeup all waiters.  Group '2' didn't had any
      waitee and its execution is skipped.  Hence its wakeup_error=0.It sends a
      positive wakeup signal to '3'. Which commits. This results in a missed
      transaction. i.e 33 is missed and 34 is committed.
      
      Fix:
      ===
      When a worker learns that an earlier transaction execution has failed, and it
      should not proceed for further execution, it should mark its own execution
      status as failed so that it alerts its followers to abort as well.
      9b80f930
  7. 27 Sep, 2019 1 commit
    • Sergei Golubchik's avatar
      chkconfig in RPM server scriptlets · 677cc644
      Sergei Golubchik authored
      chkconfig --add and --del [might] invoke /sbin/insserv
      and even if chkconfig exists, insserv might not (SLES15).
      
      Ignore chkconfig --del errors - it's a "best effort" cleanup anyway
      677cc644
  8. 26 Sep, 2019 1 commit
  9. 25 Sep, 2019 1 commit
    • Marko Mäkelä's avatar
      Speed up main.sum_distinct-big · 516f7c11
      Marko Mäkelä authored
      Eliminate one InnoDB table with 128*16384 rows, and use
      the sequence engine instead. Also, run everything in a single
      transaction, to prevent purge from running concurrently
      unnecessarily. (Starting with MariaDB Server 10.3, purge would
      reset the DB_TRX_ID after INSERT.)
      516f7c11
  10. 24 Sep, 2019 2 commits
  11. 21 Sep, 2019 2 commits
  12. 20 Sep, 2019 5 commits
  13. 18 Sep, 2019 2 commits
    • Otto Kekäläinen's avatar
      Deb: Implement proper version detection in maintainer scripts · 13c2fd36
      Otto Kekäläinen authored
      Fixes bug introduced in commit 54150029.
      
      Using script run-time filename does not always work. One cannot assume
      that the filename is always the same as there might be temporary file
      names used by dpkg in certain situations. See Debian #920415.
      
      The same fix has been successfully in use in Debian official packages
      since February 2019:
      https://salsa.debian.org/mariadb-team/mariadb-10.3/commit/6440c0d6e75
      13c2fd36
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-19529 InnoDB hang on DROP FULLTEXT INDEX · 8a79fa0e
      Thirunarayanan Balathandayuthapani authored
      Problem:
      =======
        During dropping of fts index, InnoDB waits for fts_optimize_remove_table()
      and it holds dict_sys->mutex and dict_operaiton_lock even though the
      table id is not present in the queue. But fts_optimize_thread does wait
      for dict_sys->mutex to process the unrelated table id from the slot.
      
      Solution:
      ========
        Whenever table is added to fts_optimize_wq, update the fts_status
      of in-memory fts subsystem to TABLE_IN_QUEUE. Whenever drop index
      wants to remove table from the queue, it can check the fts_status
      to decide whether it should send the MSG_DELETE_TABLE to the queue.
      
      Removed the following functions because these are all deadcode.
      dict_table_wait_for_bg_threads_to_exit(),
      fts_wait_for_background_thread_to_start(),fts_start_shutdown(), fts_shudown().
      8a79fa0e
  14. 17 Sep, 2019 1 commit
  15. 14 Sep, 2019 1 commit
  16. 13 Sep, 2019 2 commits
    • Igor Babaev's avatar
      Post fix after the patch for MDEV-20576. · 0954bcb6
      Igor Babaev authored
      Adjusted test results.
      0954bcb6
    • Igor Babaev's avatar
      MDEV-20576 A new assertion added to check validity of calculated · deb9121f
      Igor Babaev authored
                 selectivity values fails
      
      After having set the assertion that checks validity of selectivity values
      returned by the function table_cond_selectivity() a test case from
      order_by.tesst failed. The failure occurred because range optimizer could
      return as an estimate of the cardinality of the ranges built for an index
      a number exceeding the total number of records in the table.
      
      The second bug is more subtle. It may happen when there are several
      indexes with same prefix defined on the first joined table t accessed by
      a constant ref access. In this case the range optimizer estimates the
      number of accessed records of t for each usable index and these
      estimates can be different. Only the first of these estimates is taken
      into account when the selectivity of the ref access is calculated.
      However the optimizer later can choose a different index that provides
      a different estimate. The function table_condition_selectivity() could use
      this estimate to discount the selectivity of the ref access. This could
      lead to an selectivity value returned by this function that was greater
      that 1.
      deb9121f
  17. 11 Sep, 2019 1 commit
  18. 09 Sep, 2019 1 commit
  19. 04 Sep, 2019 1 commit
  20. 03 Sep, 2019 2 commits
  21. 01 Sep, 2019 1 commit
  22. 28 Aug, 2019 2 commits
  23. 27 Aug, 2019 2 commits
  24. 26 Aug, 2019 2 commits
    • Julius Goryavsky's avatar
      MDEV-20420: SST failed after MDEV-18863 in some test configurations · de0f93fb
      Julius Goryavsky authored
      After applying MDEV-18863, in some test configurations, SST
      may fails due to duplication of some parameters (in particular
      "--port") in the main part of the command line and after
      "--mysqld-args", as well as due to incorrect interpretation
      of the parameter "--port" passed after "--mysqld-args" when
      the SST script is invoked without explicitly specifying a port
      for SST. In addition, it is necessary to correctly handle spaces,
      quotation marks and special characters when copying original
      arguments from the argv[] array to a new command line (after
      "--mysqld-args"). This patch resolves these shortcomings.
      de0f93fb
    • Sujatha's avatar
      MDEV-20188: binlog.binlog_stm_drop_tmp_tbl fails in buildbot with Unknown table on exec · 4a9fb905
      Sujatha authored
      Analysis:
      ========
      As part of BUG#28642318 fix, two new test cases were added. The first test
      case tests a scenario where two sessions are present, in which the first
      session has a regular table named 't1' and another session has a temporary
      table named 't1'. Test executes a DELETE statement on regular table. These
      statements are captured from binary log and replayed back on new client
      connection to prove that DELETE statement is applied successfully. Note that
      the binlog contains only CREATE TEMPORARY TABLE part hence a temporary table
      gets created in new connection. This replaying logic is implemented by using
      '--exec $MYSQL' command. If the new connection gets disconnected within the
      scope of first test case the test passes, i.e the temporary table gets dropped
      as part thread cleanup. But on slow platforms the connection gets closed at
      the time of execution of test case 2. When the temporary table is dropped as
      part thread cleanup a "DROP TEMPORARY TABLE t1" is written into the binary
      log. In test case two the same sessions continue to exist and and table names
      are reused to test a new bug scenario. The additional "DROP TEMPORARY TABLE"
      command drops second test specific tables which results in "Unknown table"
      error.
      
      Fix:
      ====
      Rename the second case specific table to 't2'. Even if the close connection
      from test case one happens later the drop command with has
      'DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `t1`' will not result in an error.
      4a9fb905
  25. 22 Aug, 2019 2 commits