1. 11 Feb, 2014 7 commits
    • Michael Widenius's avatar
      Automatic merge · 3f433710
      Michael Widenius authored
      3f433710
    • Michael Widenius's avatar
      Fixed MDEV-4551: mysqldump --dump-slave fails with multi-source replication · add6eb69
      Michael Widenius authored
      When running with multi-source enabled master (MariaDB 10.0) all master will be recorded
      
      mysql-test/r/rpl_mysqldump_slave.result:
        Updated results to new syntax
      add6eb69
    • Michael Widenius's avatar
      Fixed MDEV-3815: Aria engine return "The table is full" (ERROR 1114) inserting... · 94d23e24
      Michael Widenius authored
      Fixed MDEV-3815: Aria engine return "The table is full" (ERROR 1114) inserting record, while MyISAM and InnoDB doesn't
      
      Increase default pointer length for Aria tables to be able to handle big files without having to specify MAX_ROWS
      
      
      mysql-test/suite/maria/icp.result:
        Updated result
      mysql-test/suite/maria/maria-preload.result:
        More pages are needed with longer pointer length
      mysql-test/suite/maria/maria.result:
        Added more tests
      mysql-test/suite/maria/maria.test:
        Added more tests
      storage/maria/ma_create.c:
        Increase default pointer length for Aria tables to be able to handle big files without having to specify MAX_ROWS
      storage/maria/ma_range.c:
        Optimize records_in_range() to be more exact
      storage/maria/ma_static.c:
        Increase default pointer size
      storage/maria/ma_test2.c:
        Allow a bit larger errors in records_in_range
      94d23e24
    • Michael Widenius's avatar
    • Michael Widenius's avatar
      Fixed wrong result file · e068197c
      Michael Widenius authored
      e068197c
    • unknown's avatar
      Merge 10.0-base -> 10.0 · 34bd0d02
      unknown authored
      34bd0d02
    • unknown's avatar
      MDEV-4937: sql_slave_skip_counter does not work with GTID · cc792576
      unknown authored
      As a side-effect of purge_relay_logs(), sql_slave_skip_counter
      was silently ignored in GTID mode.
      
      But sql_slave_skip_counter in fact is not a good match with GTID.
      And it is not really needed either, as users can explicitly set
      @@gtid_slave_pos to skip specific GTIDs, in a way that matches
      well how GTID replication works.
      
      So with this patch, we give an error on attempts to set
      sql_slave_skip_counter when using GTID, with a suggestion to use
      gtid_slave_pos instead, if needed.
      cc792576
  2. 10 Feb, 2014 4 commits
  3. 09 Feb, 2014 1 commit
  4. 08 Feb, 2014 3 commits
    • unknown's avatar
      MDEV-5636: Deadlock in RESET MASTER · 07eaf6ea
      unknown authored
      The problem is a deadlock between MYSQL_BIN_LOG::reset_logs() and
      MYSQL_BIN_LOG::mark_xid_done(). The former takes LOCK_log and waits for the
      latter to complete. But the latter also tries to take LOCK_log; this can lead
      to a deadlock.
      
      There was already code that tries to deal with this, with the flag
      reset_master_pending. However, there was still a small opportunity for
      deadlock, when an previous mark_xid_done() is still running when reset_logs()
      is called and is at the precise point where it first releases LOCK_xid_list
      and then re-aquires both LOCK_log and LOCK_xid_list.
      
      Solve by setting reset_master_pending in reset_logs() before taking
      LOCK_log. And also count how many invocations of LOCK_xid_list are in the
      progress of releasing and re-aquiring locks, and in reset_logs() wait for that
      number to drop to zero after setting reset_master_pending and before taking
      LOCK_log.
      07eaf6ea
    • unknown's avatar
      MDEV-4984: Implement MASTER_GTID_WAIT() and @@LAST_GTID. · 76e929a9
      unknown authored
      Rewrite the gtid_waiting::wait_for_gtid() function.
      The code was rubbish (and buggy). Now the logic is
      much clearer.
      
      Also fix a missing slave sync that could cause test failure.
      76e929a9
    • unknown's avatar
      MDEV-4984: Implement MASTER_GTID_WAIT() and @@LAST_GTID. · 3c97d24f
      unknown authored
      Couple of small fixes following buildbot testing.
      3c97d24f
  5. 07 Feb, 2014 2 commits
    • unknown's avatar
      MDEV-4726: Race in mysql-test/suite/rpl/t/rpl_gtid_stop_start.test · 7bb022f3
      unknown authored
      Some GTID test cases were using include/wait_condition.inc with a
      condition like SELECT COUNT(*)=4 FROM t1 to wait for the slave to
      catch up with the master. This causes races and test failures, as the
      changes to the tables become visible at the COMMIT of the SQL thread
      (or even before in case of MyISAM), but the changes to
      @@gtid_slave_pos only become visible a little bit after the COMMIT.
      
      Now that we have MASTER_GTID_WAIT(), just use that to sync up in a
      GTID-friendly way, wrapped in nice include/save_master_gtid.inc and
      include/sync_with_master_gtid.inc scripts.
      7bb022f3
    • unknown's avatar
      MDEV-4984: Implement MASTER_GTID_WAIT() and @@LAST_GTID. · 4e6606ac
      unknown authored
      MASTER_GTID_WAIT() is similar to MASTER_POS_WAIT(), but works with a
      GTID position rather than an old-style filename/offset.
      
      @@LAST_GTID gives the GTID assigned to the last transaction written
      into the binlog.
      
      Together, the two can be used by applications to obtain the GTID of
      an update on the master, and then do a MASTER_GTID_WAIT() for that
      position on any read slave where it is important to get results that
      are caught up with the master at least to the point of the update.
      
      The implementation of MASTER_GTID_WAIT() is implemented in a way
      that tries to minimise the performance impact on the SQL threads,
      even in the presense of many waiters on single GTID positions (as
      from @@LAST_GTID).
      4e6606ac
  6. 06 Feb, 2014 12 commits
  7. 05 Feb, 2014 11 commits
    • Michael Widenius's avatar
      MDEV-5602: CREATE OR REPLACE obtains stricter locks than the connection had before · 1695fc45
      Michael Widenius authored
      mysql-test/r/create_or_replace.result:
        Added test case
      mysql-test/t/create_or_replace.test:
        Added test case
      sql/sql_base.cc:
        Downgrade locks in LOCK TABLES + CREATE TABLE OR REPLACE
      sql/sql_table.cc:
        Downgrade locks in LOCK TABLES + CREATE TABLE OR REPLACE
      1695fc45
    • Michael Widenius's avatar
      0557de84
    • Michael Widenius's avatar
      Automatic merge · 10001c8e
      Michael Widenius authored
      10001c8e
    • Sergei Golubchik's avatar
      revert bugfix for MDEV-5295 deb upgrade 5.5 to 10.0.6 does not work · a0de0fd5
      Sergei Golubchik authored
      it didn't help, instead it only broke upgrades even more
      a0de0fd5
    • Michael Widenius's avatar
      Replication changes for CREATE OR REPLACE TABLE · 5426facd
      Michael Widenius authored
      - CREATE TABLE is by default executed on the slave as CREATE OR REPLACE
      - DROP TABLE is by default executed on the slave as DROP TABLE IF NOT EXISTS
      
      This means that a slave will by default continue even if we try to create
      a table that existed on the slave (the table will be deleted and re-created) or
      if we try to drop a table that didn't exist on the slave.
      This should be safe as instead of having the slave stop because of an inconsistency between
      master and slave, it will fix the inconsistency.
      Those that would prefer to get a stopped slave instead for the above cases can set slave_ddl_exec_mode to STRICT. 
      
      - Ensure that a CREATE OR REPLACE TABLE which dropped a table is replicated
      - DROP TABLE that generated an error on master is handled as an identical DROP TABLE on the slave (IF NOT EXISTS is not added in this case)
      - Added slave_ddl_exec_mode variable to decide how DDL's are replicated
      
      New logic for handling BEGIN GTID ... COMMIT from the binary log:
      
      - When we find a BEGIN GTID, we start a transaction and set OPTION_GTID_BEGIN
      - When we find COMMIT, we reset OPTION_GTID_BEGIN and execute the normal COMMIT code.
      - While OPTION_GTID_BEGIN is set:
        - We don't generate implict commits before or after statements
        - All tables are regarded as transactional tables in the binary log (to ensure things are executed exactly as on the master)
      - We reset OPTION_GTID_BEGIN also on rollback
      
      This will help ensuring that we don't get any sporadic commits (and thus new GTID's) on the slave and will help keep the GTID's between master and slave in sync.
      
      
      mysql-test/extra/rpl_tests/rpl_log.test:
        Added testing of mode slave_ddl_exec_mode=STRICT
      mysql-test/r/mysqld--help.result:
        New help messages
      mysql-test/suite/rpl/r/create_or_replace_mix.result:
        Testing of CREATE OR REPLACE TABLE with replication
      mysql-test/suite/rpl/r/create_or_replace_row.result:
        Testing of CREATE OR REPLACE TABLE with replication
      mysql-test/suite/rpl/r/create_or_replace_statement.result:
        Testing replication of create or replace
      mysql-test/suite/rpl/r/rpl_gtid_startpos.result:
        Test must be run in slave_ddl_exec_mode=STRICT as part of the test depends on that DROP TABLE should fail on slave.
      mysql-test/suite/rpl/r/rpl_row_log.result:
        Updated result
      mysql-test/suite/rpl/r/rpl_row_log_innodb.result:
        Updated result
      mysql-test/suite/rpl/r/rpl_row_show_relaylog_events.result:
        Updated result
      mysql-test/suite/rpl/r/rpl_stm_log.result:
        Updated result
      mysql-test/suite/rpl/r/rpl_stm_mix_show_relaylog_events.result:
        Updated result
      mysql-test/suite/rpl/r/rpl_temp_table_mix_row.result:
        Updated result
      mysql-test/suite/rpl/t/create_or_replace.inc:
        Testing of CREATE OR REPLACE TABLE with replication
      mysql-test/suite/rpl/t/create_or_replace_mix.cnf:
        Testing of CREATE OR REPLACE TABLE with replication
      mysql-test/suite/rpl/t/create_or_replace_mix.test:
        Testing of CREATE OR REPLACE TABLE with replication
      mysql-test/suite/rpl/t/create_or_replace_row.cnf:
        Testing of CREATE OR REPLACE TABLE with replication
      mysql-test/suite/rpl/t/create_or_replace_row.test:
        Testing of CREATE OR REPLACE TABLE with replication
      mysql-test/suite/rpl/t/create_or_replace_statement.cnf:
        Testing of CREATE OR REPLACE TABLE with replication
      mysql-test/suite/rpl/t/create_or_replace_statement.test:
        Testing of CREATE OR REPLACE TABLE with replication
      mysql-test/suite/rpl/t/rpl_gtid_startpos.test:
        Test must be run in slave_ddl_exec_mode=STRICT as part of the test depends on that DROP TABLE should fail on slave.
      mysql-test/suite/rpl/t/rpl_stm_log.test:
        Removed some lines
      mysql-test/suite/sys_vars/r/slave_ddl_exec_mode_basic.result:
        Testing of slave_ddl_exec_mode
      mysql-test/suite/sys_vars/t/slave_ddl_exec_mode_basic.test:
        Testing of slave_ddl_exec_mode
      sql/handler.cc:
        Regard all tables as transactional in commit if OPTION_GTID_BEGIN is set.
        This is to ensure that statments are not commited too early if non transactional tables are used.
      sql/log.cc:
        Regard all tables as transactional in commit if OPTION_GTID_BEGIN is set.
        Also treat 'direct' log events as transactional (to get them logged as they where on the master)
      sql/log_event.cc:
        Ensure that the new error from DROP TABLE when trying to drop a view is treated same as the old one.
        Store error code that slave expects in THD.
        Set OPTION_GTID_BEGIN if we find a BEGIN.
        Reset OPTION_GTID_BEGIN if we find a COMMIT.
      sql/mysqld.cc:
        Added slave_ddl_exec_mode_options
      sql/mysqld.h:
        Added slave_ddl_exec_mode_options
      sql/rpl_gtid.cc:
        Reset OPTION_GTID_BEGIN if we record a gtid (safety)
      sql/sql_class.cc:
        Regard all tables as transactional in commit if OPTION_GTID_BEGIN is set.
      sql/sql_class.h:
        Added to THD: log_current_statement and slave_expected_error
      sql/sql_insert.cc:
        Ensure that CREATE OR REPLACE is logged if table was deleted.
        Don't do implicit commit for CREATE if we are under OPTION_GTID_BEGIN
      sql/sql_parse.cc:
        Change CREATE TABLE -> CREATE OR REPLACE TABLE for slaves
        Change DROP TABLE -> DROP TABLE IF EXISTS for slaves
        CREATE TABLE doesn't force implicit commit in case of OPTION_GTID_BEGIN
        Don't do commits before or after any statement if OPTION_GTID_BEGIN was set.
      sql/sql_priv.h:
        Added OPTION_GTID_BEGIN
      sql/sql_show.cc:
        Enhanced store_create_info() to also be able to handle CREATE OR REPLACE
      sql/sql_show.h:
        Updated prototype
      sql/sql_table.cc:
        Ensure that CREATE OR REPLACE is logged if table was deleted.
      sql/sys_vars.cc:
        Added slave_ddl_exec_mode
      sql/transaction.cc:
        Added warning if we got a GTID under OPTION_GTID_BEGIN
      5426facd
    • Sergei Golubchik's avatar
      more solaris fixes. xtradb and spider. · 5eb14585
      Sergei Golubchik authored
      5eb14585
    • Sergei Golubchik's avatar
      b25951cc
    • unknown's avatar
      Fix of rpl_parallel.test cleanup. · 2ab48b44
      unknown authored
      2ab48b44
    • unknown's avatar
      merge 10.0-base ->10.0 · 52311b72
      unknown authored
      52311b72
    • unknown's avatar
      merge 5.5->10.0-base · bfdbb179
      unknown authored
      bfdbb179
    • Elena Stepanova's avatar
      From MySQL 5.6.13 change log: · f68eac2e
      Elena Stepanova authored
      Unlike MyISAM, InnoDB does not support boolean full-text searches on 
      nonindexed columns, but this restriction was not enforced, resulting 
      in queries that returned incorrect results. (Bug #16434374)
      f68eac2e