1. 14 May, 2017 1 commit
  2. 12 May, 2017 4 commits
    • Marko Mäkelä's avatar
      MDEV-12674 Post-merge fix: Include accidentally omitted changes · f9069a3d
      Marko Mäkelä authored
      In 10.2, the definition of simple_counter resides in the file
      sync0types.h, not in the file os0sync.h which has been removed.
      f9069a3d
    • Marko Mäkelä's avatar
      Merge 10.1 into 10.2 · b9474b5d
      Marko Mäkelä authored
      b9474b5d
    • Marko Mäkelä's avatar
      Merge 10.0 into 10.1 · 03dca7a3
      Marko Mäkelä authored
      03dca7a3
    • Marko Mäkelä's avatar
      MDEV-12674 Innodb_row_lock_current_waits has overflow · ff166093
      Marko Mäkelä authored
      There is a race condition related to the variable
      srv_stats.n_lock_wait_current_count, which is only
      incremented and decremented by the function lock_wait_suspend_thread(),
      
      The incrementing is protected by lock_sys->wait_mutex, but the
      decrementing does not appear to be protected by anything.
      This mismatch could allow the counter to be corrupted when a
      transactional InnoDB table or record lock wait is terminating
      roughly at the same time with the start of a wait on a
      (possibly different) lock.
      
      ib_counter_t: Remove some unused methods. Prevent instantiation for N=1.
      Add an inc() method that takes a slot index as a parameter.
      
      single_indexer_t: Remove.
      
      simple_counter<typename Type, bool atomic=false>: A new counter wrapper.
      Optionally use atomic memory operations for modifying the counter.
      Aligned to the cache line size.
      
      lsn_ctr_1_t, ulint_ctr_1_t, int64_ctr_1_t: Define as simple_counter<Type>.
      These counters are either only incremented (and we do not care about
      losing some increment operations), or the increment/decrement operations
      are protected by some mutex.
      
      srv_stats_t::os_log_pending_writes: Document that the number is protected
      by log_sys->mutex.
      
      srv_stats_t::n_lock_wait_current_count: Use simple_counter<ulint, true>,
      that is, atomic inc() and dec() operations.
      
      lock_wait_suspend_thread(): Release the mutexes before incrementing
      the counters. Avoid acquiring the lock mutex if the lock wait has
      already been resolved. Atomically increment and decrement
      srv_stats.n_lock_wait_current_count.
      
      row_insert_for_mysql(), row_update_for_mysql(),
      row_update_cascade_for_mysql(): Use the inc() method with the trx->id
      as the slot index. This is a non-functional change, just using
      inc() instead of add(1).
      
      buf_LRU_get_free_block(): Replace the method add(index, n) with inc().
      There is no slot index in the simple_counter.
      ff166093
  3. 11 May, 2017 2 commits
    • Michael Widenius's avatar
      MDEV-10804 main.stat_tables_par fails sporadically in buildbot · 99332399
      Michael Widenius authored
      This was because of two issues:
      - thr_multi_lock_after_thr_lock needed to be hit 3 times before go2 could
        be signaled, because 2 of these happened before statistics_update_start
        was reached.
      - The original code didn't take into accunt that thr_locks can be executed in
        any random order, which caused sporadic failures when waiting for 1 lock
        of 3, as if the locks where in different order, there would be a dead-lock.
        Fixed by introducing thr_multi_lock_before_thr_lock which is deterministic.
      - Some of the test failures where not noticed as the DEBUG_SYNC timeout
        would cause the test to pass (after 300 seconds).
      99332399
    • Michael Widenius's avatar
  4. 10 May, 2017 11 commits
  5. 09 May, 2017 22 commits