1. 05 May, 2015 2 commits
  2. 04 May, 2015 1 commit
    • Sergei Golubchik's avatar
      MDEV-7973 bigint fail with gcc 5.0 · ae18a285
      Sergei Golubchik authored
      -LONGLONG_MIN is the undefined behavior in C.
      longlong2decimal() used to do this:
      
        int longlong2decimal(longlong from, decimal_t *to) {
          if ((to->sign= from < 0))
            return ull2dec(-from, to);
          return ull2dec(from, to);
      
      and later in ull2dec() (DIG_BASE is 1000000000):
      
        static int ull2dec(ulonglong from, decimal_t *to) {
          for (intg1=1; from >= DIG_BASE; intg1++, from/=DIG_BASE) {}
      
      this breaks in gcc-5 at -O3. Here ull2dec is inlined into
      longlong2decimal. And gcc-5 believes that 'from' in the
      inlined ull2dec is always a positive integer (indeed, if it was
      negative, then -from was used instead). So gcc-5 uses
      *signed* comparison with DIG_BASE.
      
      Fix: make a special case for LONGLONG_MIN, don't negate it
      ae18a285
  3. 03 May, 2015 17 commits
  4. 02 May, 2015 1 commit
  5. 01 May, 2015 1 commit
  6. 30 Apr, 2015 2 commits
  7. 29 Apr, 2015 1 commit
  8. 28 Apr, 2015 1 commit
  9. 24 Apr, 2015 1 commit
  10. 23 Apr, 2015 1 commit
    • Kristian Nielsen's avatar
      MDEV-8031: Parallel replication stops on "connection killed" error (probably... · b616991a
      Kristian Nielsen authored
      MDEV-8031: Parallel replication stops on "connection killed" error (probably incorrectly handled deadlock kill)
      
      There was a rare race, where a deadlock error might not be correctly
      handled, causing the slave to stop with something like this in the error
      log:
      
      150423 14:04:10 [ERROR] Slave SQL: Connection was killed, Gtid 0-1-2, Internal MariaDB error code: 1927
      150423 14:04:10 [Warning] Slave: Connection was killed Error_code: 1927
      150423 14:04:10 [Warning] Slave: Deadlock found when trying to get lock; try restarting transaction Error_code: 1213
      150423 14:04:10 [Warning] Slave: Connection was killed Error_code: 1927
      150423 14:04:10 [Warning] Slave: Connection was killed Error_code: 1927
      150423 14:04:10 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'master-bin.000001 position 1234
      
      The problem was incorrect error handling. When a deadlock is detected, it
      causes a KILL CONNECTION on the offending thread. This error is then later
      converted to a deadlock error, and the transaction is retried.
      
      However, the deadlock error was not cleared at the start of the retry, nor
      was the lingering kill signal. So it was possible to get another deadlock
      kill early during retry. If this happened with particular thread
      scheduling/timing, it was possible that the new KILL CONNECTION error was
      masked by the earlier deadlock error, so that the second kill was not
      properly converted into a deadlock error and retry.
      
      This patch adds code that clears the old error and killed flag before
      starting the retry. It also adds code to handle a deadlock kill caught in a
      couple of places where it was not handled before.
      b616991a
  11. 21 Apr, 2015 1 commit
  12. 20 Apr, 2015 2 commits
  13. 19 Apr, 2015 1 commit
  14. 14 Apr, 2015 2 commits
    • Kristian Nielsen's avatar
      Merge MDEV-7975 into 10.0 · a8523559
      Kristian Nielsen authored
      a8523559
    • Kristian Nielsen's avatar
      MDEV-7975: sporadic failure in test case rpl.rpl_gtid_startpos · 5d2b85a2
      Kristian Nielsen authored
      Add some suppressions that were missing. They are for if a STOP SLAVE is
      executed early during IO thread startup, when it is negotiating with the
      master. The master connection may be killed in the middle of a
      mysql_real_query(), which is not a test failure if it is a network error.
      
      This also caught one real code error, fixed with this commit: The I/O thread
      would fail to automatically reconnect if a network error happened while
      fetching the value of @@GLOBAL.gtid_domain_id.
      5d2b85a2
  15. 13 Apr, 2015 3 commits
    • Kristian Nielsen's avatar
      Merge MDEV-7936 into 10.0. · 17aff4b1
      Kristian Nielsen authored
      Conflicts:
      	sql/sql_base.cc
      17aff4b1
    • Kristian Nielsen's avatar
      MDEV-7936: Assertion `!table || table->in_use == _current_thd()' failed on... · 60d094ae
      Kristian Nielsen authored
      MDEV-7936: Assertion `!table || table->in_use == _current_thd()' failed on parallel replication in optimistic mode
      
      Make sure that in parallel replication, we execute wait_for_prior_commit()
      before setting table->in_use for a temporary table. Otherwise we can end up
      with two parallel replication worker threads competing with each other for
      use of a temporary table.
      
      Re-factor the use of find_temporary_table() to be able to handle errors
      in the caller (as wait_for_prior_commit() can return error in case of
      deadlock kill).
      60d094ae
    • Kristian Nielsen's avatar
      MDEV-7668: Intermediate master groups CREATE TEMPORARY with INSERT, causing... · c47fe0e9
      Kristian Nielsen authored
      MDEV-7668: Intermediate master groups CREATE TEMPORARY with INSERT, causing parallel replication failure
      
      [This commit cherry-picked to be able to merge MDEV-7936, of which it
      is a pre-requisite, into both 10.0 and 10.1.]
      
      Parallel replication depends on locking (table locks, row locks, etc.) to
      prevent two conflicting transactions from running and committing in parallel.
      But temporary tables are designed to be visible only to one thread, and have
      no such locking.
      
      In the concrete issue, an intermediate master could commit a CREATE TEMPORARY
      TABLE in the same group commit as in INSERT into that table. Thus, a
      lower-level master could attempt to run them in parallel and get an error.
      
      More generally, we need protection from parallel replication trying to run
      transactions in parallel that access a common temporary table.
      
      This patch simply causes use of a temporary table from parallel replication
      to wait for all previous transactions to commit, serialising the replication
      at that point.
      
      (A more fine-grained locking could be added later, possibly. However,
      using temporary tables in statement-based replication is in any case
      normally undesirable; for example a restart of the server will lose
      temporary tables and can break replication).
      
      Note that row-based replication is not affected, as it does not do any
      temporary tables on the slave-side.
      
      This patch also cleans up the locking around protecting the list of
      temporary tables in Relay_log_info. This used to take the
      rli->data_lock at the end of every statement, which is very bad for
      concurrency. With this patch, the lock is not taken unless temporary
      tables (with statement-based binlogging) are in use on the slave.
      c47fe0e9
  16. 09 Apr, 2015 2 commits
  17. 08 Apr, 2015 1 commit