1. 30 Mar, 2015 3 commits
    • Kristian Nielsen's avatar
      Merge MDEV-7847 and MDEV-7882 into 10.0. · c41e4d3b
      Kristian Nielsen authored
      Conflicts:
      	mysql-test/suite/rpl/r/rpl_parallel.result
      	mysql-test/suite/rpl/t/rpl_parallel.test
      c41e4d3b
    • Kristian Nielsen's avatar
      MDEV-7847: "Slave worker thread retried transaction 10 time(s) in vain, giving... · 880f2273
      Kristian Nielsen authored
      MDEV-7847: "Slave worker thread retried transaction 10 time(s) in vain, giving up", followed by replication hanging
      
      This patch fixes a bug in the error handling in parallel replication, when one
      worker thread gets a failure and other worker threads processing later
      transactions have to rollback and abort.
      
      The problem was with the lifetime of group_commit_orderer objects (GCOs).
      A GCO is freed when we register that its last event group has committed. This
      relies on register_wait_for_prior_commit() and wait_for_prior_commit() to
      ensure that the fact that T2 has committed implies that any earlier T1 has
      also committed, and can thus no longer execute mark_start_commit().
      
      However, in the error case, the code was skipping the
      register_wait_for_prior_commit() and wait_for_prior_commit() calls. Thus
      commit ordering was not guaranteed, and a GCO could be freed too early. Then a
      later mark_start_commit() would reference deallocated GCO, which could lead to
      lost wakeup (causing slave threads to hang) or other corruption.
      
      This patch makes also the error case respect commit order. This way, also the
      error case gets the GCO lifetime correct, and the hang no longer occurs.
      880f2273
    • Kristian Nielsen's avatar
      MDEV-7882: Excessive transaction retry in parallel replication · a4082918
      Kristian Nielsen authored
      When a transaction in parallel replication needs to retry (eg. because of
      deadlock kill), first wait for all prior transactions to commit before doing
      the retry. This way, we avoid the retry once again conflicting with a prior
      transaction, requiring yet another retry.
      
      Without this patch, we saw "in the wild" that transactions had to be retried
      more than 10 times to succeed, which exceeds the default
      --slave_transaction_retries value and is in any case undesirable.
      
      (We already do this in 10.1 in "optimistic" parallel replication mode; this
      patch just makes the code use the same logic for "conservative" mode (only
      mode in 10.0)).
      a4082918
  2. 25 Mar, 2015 1 commit
  3. 18 Mar, 2015 3 commits
  4. 17 Mar, 2015 2 commits
  5. 16 Mar, 2015 1 commit
  6. 13 Mar, 2015 2 commits
    • Kristian Nielsen's avatar
      MDEV-7249: Performance problem in parallel replication with multi-level slaves · 184f718f
      Kristian Nielsen authored
      Parallel replication (in 10.0 / "conservative" mode) relies on binlog group
      commits to group transactions that can be safely run in parallel on the
      slave. The --binlog-commit-wait-count and --binlog-commit-wait-usec options
      exist to increase the number of commits per group. But in case of conflicts
      between transactions, this can cause unnecessary delay and reduced througput,
      especially on a slave where commit order is fixed.
      
      This patch adds a heuristics to reduce this problem. When transaction T1 goes
      to commit, it will first wait for N transactions to queue up for a group
      commit. However, if we detect that another transaction T2 is waiting for a row
      lock held by T1, then we will skip the wait and let T1 commit immediately,
      releasing locks and let T2 continue.
      
      On a slave, this avoids the unfortunate situation where T1 is waiting for T2
      to join the group commit, but T2 is waiting for T1 to release locks, causing
      no work to be done for the duration of the --binlog-commit-wait-usec timeout.
      
      (The heuristic seems reasonable on the master as well, so it is enabled for
      all transactions, not just replication transactions).
      184f718f
    • Alexander Barkov's avatar
      MDEV-7387 [PATCH] Alter table xxx CHARACTER SET utf8, CONVERT TO CHARACTER SET latin1 should fail · bc902a2b
      Alexander Barkov authored
      A contribution from Daniel Black, with minor additional enhancements.
      bc902a2b
  7. 12 Mar, 2015 1 commit
  8. 11 Mar, 2015 1 commit
    • Kristian Nielsen's avatar
      MDEV-5289: master server starts slave parallel threads · ed04c40b
      Kristian Nielsen authored
      Delay spawning parallel replication worker threads until a slave SQL
      thread is running, and de-spawn them when the last SQL thread stops.
      
      This is especially useful to avoid needless threads on a master in a
      setup where same my.cnf is used on masters and slaves.
      ed04c40b
  9. 09 Mar, 2015 4 commits
    • Jan Lindström's avatar
      MDEV-7685: MariaDB - server crashes when inserting more rows than · a7fd11b3
      Jan Lindström authored
      available space on disk
      
      Add error handling when disk full situation happens and
      intentionally bring server down with stacktrace because
      on all cases InnoDB can't continue anyway.
      a7fd11b3
    • Elena Stepanova's avatar
      MDEV-7107 Sporadic test failure in multi_source.multisource · ec16d1b6
      Elena Stepanova authored
      Extend show_slave_status.inc to run SHOW ALL SLAVES STATUS and
      SHOW SLAVE 'name' STATUS on demand, and make the test use
      the include file instead of direct SHOW statements
      ec16d1b6
    • Kristian Nielsen's avatar
      MDEV-7668: Intermediate master groups CREATE TEMPORARY with INSERT, causing... · 96784eb1
      Kristian Nielsen authored
      MDEV-7668: Intermediate master groups CREATE TEMPORARY with INSERT, causing parallel replication failure
      
      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.
      96784eb1
    • Jan Lindström's avatar
      MDEV-7627 :Some symbols in table name can cause to Error Code: 1050 · 040027c8
      Jan Lindström authored
      when created FK
      
      Analysis: Table name is on filename charset but foreign key
      identifiers are not. This lead incorrect foreign key
      identifier number to be used.
      
      Fix: Convert foreign key identifier to filename charset before
      comparing it to table name when largest foreign key identifier
      number is resolved.
      040027c8
  10. 08 Mar, 2015 1 commit
    • Elena Stepanova's avatar
      MDEV-7187 perfschema.aggregate fails sporadically in buildbot · 6fc0a8af
      Elena Stepanova authored
      During slow execution, e.g. under valgrind, there was a chance
      that Aria checkpoint would happen while P_S tables were being
      queried; it could cause different data in joined P_S, and
      thus combinations of results that the test did not expect.
      
      Fixed by disabling Aria checkpoints for the test.
      6fc0a8af
  11. 06 Mar, 2015 7 commits
  12. 05 Mar, 2015 3 commits
  13. 04 Mar, 2015 3 commits
    • Kristian Nielsen's avatar
      3ef0b9b2
    • Kristian Nielsen's avatar
      MDEV-6403: Temporary tables lost at STOP SLAVE in GTID mode if master has not... · 78c74dbe
      Kristian Nielsen authored
      MDEV-6403: Temporary tables lost at STOP SLAVE in GTID mode if master has not rotated binlog since restart
      
      The binlog contains specially marked format description events to mark
      when a master restart happened (which could have caused temporary
      tables to be silently dropped). Such events also cause slave to close
      temporary tables.
      
      However, there was a bug that if after this, slave re-connects to the
      master in GTID mode, the master can send an old format description
      event again. If temporary tables are closed when such event is seen
      for the second time, it might drop temporary tables created after that
      event, and cause replication failure.
      
      With this patch, the restart flag of the format description event is
      cleared by the master when it is sent to the slave in a subsequent
      connection, to avoid the errorneous temp table close.
      78c74dbe
    • Kristian Nielsen's avatar
      MDEV-6589: Incorrect relay log start position when restarting SQL thread after... · ad0d203f
      Kristian Nielsen authored
      MDEV-6589: Incorrect relay log start position when restarting SQL thread after error in parallel replication
      
      The problem occurs in parallel replication in GTID mode, when we are using
      multiple replication domains. In this case, if the SQL thread stops, the
      slave GTID position may refer to a different point in the relay log for each
      domain.
      
      The bug was that when the SQL thread was stopped and restarted (but the IO
      thread was kept running), the SQL thread would resume applying the relay log
      from the point of the most advanced replication domain, silently skipping all
      earlier events within other domains. This caused replication corruption.
      
      This patch solves the problem by storing, when the SQL thread stops with
      multiple parallel replication domains active, the current GTID
      position. Additionally, the current position in the relay logs is moved back
      to a point known to be earlier than the current position of any replication
      domain. Then when the SQL thread restarts from the earlier position, GTIDs
      encountered are compared against the stored GTID position. Any GTID that was
      already applied before the stop is skipped to avoid duplicate apply.
      
      This patch should have no effect if multi-domain GTID parallel replication is
      not used. Similarly, if both SQL and IO thread are stopped and restarted, the
      patch has no effect, as in this case the existing relay logs are removed and
      re-fetched from the master at the current global @@gtid_slave_pos.
      ad0d203f
  14. 02 Mar, 2015 2 commits
  15. 01 Mar, 2015 4 commits
    • Olivier Bertrand's avatar
      - Make json_udf test work on Windows · b9a9b82f
      Olivier Bertrand authored
      modified:
        storage/connect/mysql-test/connect/t/json_udf.inc
      b9a9b82f
    • Olivier Bertrand's avatar
      - Making json_udf test working on linux · 5f4909b3
      Olivier Bertrand authored
      added:
        storage/connect/mysql-test/connect/t/json_udf.inc
      modified:
        storage/connect/mysql-test/connect/r/json_udf.result
        storage/connect/mysql-test/connect/t/json_udf.test
      5f4909b3
    • Olivier Bertrand's avatar
      - Remove a signed/unsigned warning. · 34c89597
      Olivier Bertrand authored
      modified:
        storage/connect/jsonudf.cpp
      34c89597
    • Olivier Bertrand's avatar
      - Fix crash when Json_Value was called without arguments. · 5c8862ee
      Olivier Bertrand authored
        Correct memory calculation in Serialize.
        Correct some UDF's messages.
        Add and modify the json tests
      removed:
        storage/connect/mysql-test/connect/std_data/biblio.jsn
        storage/connect/mysql-test/connect/std_data/expense.jsn
        storage/connect/mysql-test/connect/std_data/mulexp3.jsn
        storage/connect/mysql-test/connect/std_data/mulexp4.jsn
        storage/connect/mysql-test/connect/std_data/mulexp5.jsn
      added:
        storage/connect/mysql-test/connect/r/json_udf.result
        storage/connect/mysql-test/connect/std_data/biblio.json
        storage/connect/mysql-test/connect/std_data/expense.json
        storage/connect/mysql-test/connect/std_data/mulexp3.json
        storage/connect/mysql-test/connect/std_data/mulexp4.json
        storage/connect/mysql-test/connect/std_data/mulexp5.json
        storage/connect/mysql-test/connect/t/json_udf.test
      modified:
        storage/connect/json.cpp
        storage/connect/jsonudf.cpp
        storage/connect/mysql-test/connect/r/json.result
        storage/connect/mysql-test/connect/t/json.test
      5c8862ee
  16. 28 Feb, 2015 2 commits
    • Olivier Bertrand's avatar
      - Implement random access to ODBC tables · d862d7c0
      Olivier Bertrand authored
      modified:
        storage/connect/odbconn.cpp
        storage/connect/odbconn.h
      
      - Fix get proper length of ODBC DECIMAL column in discovery
      modified:
        storage/connect/ha_connect.cc
        storage/connect/mysql-test/connect/r/odbc_oracle.result
      
      - Implement random access to JSON tables
      modified:
        storage/connect/tabjson.cpp
        storage/connect/tabjson.h
      
      - Fix MDEV-7636
      modified:
        storage/connect/tabutil.cpp
      d862d7c0
    • Vicențiu Ciorbaru's avatar
      MDEV-6838: Using too big key for internal temp tables · 45b6edb1
      Vicențiu Ciorbaru authored
      This bug manifests due to wrong computation and evaluation of
      keyinfo->key_length. The issues were:
      * Using table->file->max_key_length() as an absolute value that must not be
        reached for a key, while it represents the maximum number of bytes
        possible for a table key.
      * Incorrectly computing the keyinfo->key_length size during
        KEY_PART_INFO creation. The metadata information regarding the key
        such the field length (for strings) was added twice.
      45b6edb1