1. 12 Sep, 2019 1 commit
  2. 11 Sep, 2019 8 commits
    • Sergei Petrunia's avatar
      MDEV-16560: [counter] rocksdb.ttl_secondary_read_filtering fail in buildbot · be6beb73
      Sergei Petrunia authored
      It is not reproducible, but the issue seems to be the same as with
      MDEV-20490 and rocksdb.ttl_primary_read_filtering - a compaction caused
      by DROP TABLE gets behind and compacts away the expired rows for the next
      test. Fix this in the same way.
      be6beb73
    • Sergei Petrunia's avatar
      MDEV-20371: Invalid reads at plan refinement stage: join->positions... · c8dc866f
      Sergei Petrunia authored
      best_access_path() is called from two optimization phases:
      
      1. Plan choice phase, in choose_plan(). Here, the join prefix being
         considered is in join->positions[]
      
      2. Plan refinement stage, in fix_semijoin_strategies_for_picked_join_order
         Here, the join prefix is in join->best_positions[]
      
      It used to access join->positions[] from stage #2. This didnt cause any
      valgrind or asan failures (as join->positions[] has been written-to before)
      but the effect was similar to that of reading the random data:
      The join prefix we've picked (in join->best_positions) could have
      nothing in common with the join prefix that was last to be considered
      (in join->positions).
      c8dc866f
    • Daniel Bartholomew's avatar
      bump the VERSION · 863a9517
      Daniel Bartholomew authored
      863a9517
    • Marko Mäkelä's avatar
      MDEV-20562 btr_cur_open_at_rnd_pos() fails to return error for corrupted page · 0f950e53
      Marko Mäkelä authored
      In mysql-server/commit@f46329044f8618212923bdf52e15d5b464201edc
      the InnoDB function btr_cur_open_at_rnd_pos() was corrected so that
      it would return a status that indicates whether the cursor was
      successfully positioned. But this change was not correctly merged to
      MariaDB in 2e814d47.
      
      btr_cur_open_at_rnd_pos(): In the code path that was introduced in
      MDEV-8588, properly return failure status.
      
      No deterministic test case was found for this failure.
      It was caught after removing the function
      page_copy_rec_list_end_to_created_page() in a development branch.
      As a result, the fill factor of index trees would improve, and
      supposedly, so would the probability of btr_cur_open_at_rnd_pos()
      reaching the intentionally corrupted page in the test
      innodb.leaf_page_corrupted_during_recovery.
      The wrong return value would cause
      btr_estimate_number_of_different_key_vals() to wrongly invoke
      btr_rec_get_externally_stored_len() on a non-leaf page and
      trigger an assertion failure at the start of that function.
      0f950e53
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-17939 Assertion `++loop_count < 2' failed in trx_undo_report_rename · df4dee4b
      Thirunarayanan Balathandayuthapani authored
      - During trx_undo_report_rename(), InnoDB can fail to write undo log
      for it if undo log doesn't fit in the undo page. In that case, InnoDB
      adds one more undo log page and retry to write the rename undo log.
      But the assert is wrong and it doesn't allow to fail even for one time.
      df4dee4b
    • Marko Mäkelä's avatar
      Merge 10.1 into 10.2 · f7fe51f1
      Marko Mäkelä authored
      f7fe51f1
    • Marko Mäkelä's avatar
      Merge 5.5 into 10.1 · d6f0e60a
      Marko Mäkelä authored
      Null merge the MDEV-14383 fix; it affects 5.5 only.
      d6f0e60a
    • Alexander Barkov's avatar
      5ec4efb7
  3. 10 Sep, 2019 1 commit
  4. 09 Sep, 2019 13 commits
  5. 08 Sep, 2019 1 commit
  6. 07 Sep, 2019 1 commit
  7. 06 Sep, 2019 5 commits
  8. 05 Sep, 2019 1 commit
    • Sergei Petrunia's avatar
      MDEV-20490: rocksdb.ttl_primary_read_filtering fails in BB · 41e351f6
      Sergei Petrunia authored
      Make the test stable: after DROP TABLE, make sure the compaction is
      run and finishes.
      
      If we don't do this, the post-drop compaction may run during the next
      testcase. It will cause a record from the next testcase to be compacted
      away when the test logic doesn't expect it and the test will fail
      41e351f6
  9. 04 Sep, 2019 9 commits
    • Sergei Golubchik's avatar
      more tests for DEFAULT and DEFAULT(column) in INSERT · f605ce08
      Sergei Golubchik authored
      this is not ideal and needs to be fixed eventually,
      but it's consistent over all forms of INSERT.
      f605ce08
    • Sergei Golubchik's avatar
      MDEV-20403 Assertion `0' or Assertion `btr_validate_index(index, 0)' failed in... · 8dca4cf5
      Sergei Golubchik authored
      MDEV-20403 Assertion `0' or Assertion `btr_validate_index(index, 0)' failed in row_upd_sec_index_entry or error code 126: Index is corrupted upon UPDATE with TIMESTAMP..ON UPDATE
      
      remove a special treatment of a bare DEFAULT keyword that made it
      behave inconsistently and differently from DEFAULT(column).
      Now all forms of the explicit assignment of a default column value
      behave identically, and all count as an explicitly assigned value
      (for the purpose of ON UPDATE NOW).
      
      followup for c7c481f4
      8dca4cf5
    • Sachin's avatar
      MDEV-20137 rpl.mdev_17588 fails in buildbot with "Table doesn't exist" · 53ec9047
      Sachin authored
      Fix the test case.
      53ec9047
    • Sachin's avatar
      MDEV-20137 rpl.mdev_17588 fails in buildbot with "Table doesn't exist" · 0e38cd37
      Sachin authored
      Fix the test case.
      0e38cd37
    • Monty's avatar
      Fix of query cache bug in Aria · 01e455db
      Monty authored
      MDEV-5817 query cache bug (returning inconsistent/old result
      set) with aria table parallel inserts, row format = page
      
      The problem is that for transactional aria tables
      (row_type=PAGE and transactional=1), maria_lock_database()
      didn't flush the state or the query cache.
      Not flushing the state is correct for transactional tables as
      this is done by checkpoint, but not flushing the query cache
      was wrong and could cause concurrent SELECT queries to not
      be deleted from the cache.
      
      Fixed by introducing a flush of the query cache as part of commit, if the table has changed.
      t for transactional aria tables (row_type=PAGE and transactional=1), maria_lock_table() didn't flush their state or the query cache.
      01e455db
    • Marko Mäkelä's avatar
      MDEV-15326: Backport trx_t::is_referenced() · dae1b3b0
      Marko Mäkelä authored
      Backport the applicable part of Sergey Vojtovich's commit
      0ca2ea1a from MariaDB Server 10.3.
      
      trx reference counter was updated under mutex and read without any
      protection. This is both slow and unsafe. Use atomic operations for
      reference counter accesses.
      dae1b3b0
    • Marko Mäkelä's avatar
      MDEV-15326: InnoDB: Failing assertion: !other_lock · b07beff8
      Marko Mäkelä authored
      MySQL 5.7.9 (and MariaDB 10.2.2) introduced a race condition
      between InnoDB transaction commit and the conversion of implicit
      locks into explicit ones.
      
      The assertion failure can be triggered with a test that runs
      3 concurrent single-statement transactions in a loop on a simple
      table:
      
      CREATE TABLE t (a INT PRIMARY KEY) ENGINE=InnoDB;
      thread1: INSERT INTO t SET a=1;
      thread2: DELETE FROM t;
      thread3: SELECT * FROM t FOR UPDATE; -- or DELETE FROM t;
      
      The failure scenarios are like the following:
      (1) The INSERT statement is being committed, waiting for lock_sys->mutex.
      (2) At the time of the failure, both the DELETE and SELECT transactions
      are active but have not logged any changes yet.
      (3) The transaction where the !other_lock assertion fails started
      lock_rec_convert_impl_to_expl().
      (4) After this point, the commit of the INSERT removed the transaction from
      trx_sys->rw_trx_set, in trx_erase_lists().
      (5) The other transaction consulted trx_sys->rw_trx_set and determined
      that there is no implicit lock. Hence, it grabbed the lock.
      (6) The !other_lock assertion fails in lock_rec_add_to_queue()
      for the lock_rec_convert_impl_to_expl(), because the lock was 'stolen'.
      This assertion failure looks genuine, because the INSERT transaction
      is still active (trx->state=TRX_STATE_ACTIVE).
      
      The problematic step (4) was introduced in
      mysql/mysql-server@e27e0e0bb75b4d35e87059816f1cc370c09890ad
      which fixed something related to MVCC (covered by the test
      innodb.innodb-read-view). Basically, it reintroduced an error
      that had been mentioned in an earlier commit
      mysql/mysql-server@a17be6963fc0d9210fa0642d3985b7219cdaf0c5:
      "The active transaction was removed from trx_sys->rw_trx_set prematurely."
      
      Our fix goes along the following lines:
      
      (a) Implicit locks will released by assigning
      trx->state=TRX_STATE_COMMITTED_IN_MEMORY as the first step.
      This transition will no longer be protected by lock_sys_t::mutex,
      only by trx->mutex. This idea is by Sergey Vojtovich.
      (b) We detach the transaction from trx_sys before starting to release
      explicit locks.
      (c) All callers of trx_rw_is_active() and trx_rw_is_active_low() must
      recheck trx->state after acquiring trx->mutex.
      (d) Before releasing any explicit locks, we will ensure that any activity
      by other threads to convert implicit locks into explicit will have ceased,
      by checking !trx_is_referenced(trx). There was a glitch
      in this check when it was part of lock_trx_release_locks(); at the end
      we would release trx->mutex and acquire lock_sys->mutex and trx->mutex,
      and fail to recheck (trx_is_referenced() is protected by trx_t::mutex).
      (e) Explicit locks can be released in batches (LOCK_RELEASE_INTERVAL=1000)
      just like we did before.
      
      trx_t::state: Document that the transition to COMMITTED is only
      protected by trx_t::mutex, no longer by lock_sys_t::mutex.
      
      trx_rw_is_active_low(), trx_rw_is_active(): Document that the transaction
      state should be rechecked after acquiring trx_t::mutex.
      
      trx_t::commit_state(): New function to change a transaction to committed
      state, to release implicit locks.
      
      trx_t::release_locks(): New function to release the explicit locks
      after commit_state().
      
      lock_trx_release_locks(): Move much of the logic to the caller
      (which must invoke trx_t::commit_state() and trx_t::release_locks()
      as needed), and assert that the transaction will have locks.
      
      trx_get_trx_by_xid(): Make the parameter a pointer to const.
      
      lock_rec_other_trx_holds_expl(): Recheck trx->state after acquiring
      trx->mutex, and avoid a redundant lookup of the transaction.
      
      lock_rec_queue_validate(): Recheck impl_trx->state while holding
      impl_trx->mutex.
      
      row_vers_impl_x_locked(), row_vers_impl_x_locked_low():
      Document that the transaction state must be rechecked after
      trx_mutex_enter().
      
      trx_free_prepared(): Adjust for the changes to lock_trx_release_locks().
      b07beff8
    • Marko Mäkelä's avatar
      MDEV-15326 preparation: Remove trx_sys_t::n_prepared_trx · 7c79c127
      Marko Mäkelä authored
      This is a backport of 900b0790
      from MariaDB Server 10.3.
      7c79c127
    • Marko Mäkelä's avatar
      MDEV-15326 preparation: Test slow shutdown after XA PREPARE · 154bd095
      Marko Mäkelä authored
      We were missing a test that would exercise trx_free_prepared()
      with innodb_fast_shutdown=0. Add a test.
      
      Note: if shutdown hangs due to the XA PREPARE transactions,
      in MariaDB 10.2 the test would unfortunately pass, but take
      2*60 seconds longer, because of two shutdown_server statements
      timing out after 60 seconds. Starting with MariaDB 10.3, the
      hung server would be killed with SIGABRT, and the test could
      fail thanks to a backtrace message.
      154bd095