An error occurred fetching the project authors.
  1. 12 Aug, 2014 1 commit
  2. 31 Jul, 2014 1 commit
  3. 19 Jul, 2014 2 commits
    • Michael Widenius's avatar
      Fixed problem with very slow shutdown when using 100,000 MyISAM tables with delay_key_write · f0f2072d
      Michael Widenius authored
      Reason for the problem was that the hash of changed files in the key cache was too small (was 128). Fixed by making the hash size larger and changeable.
      
      - Introduced key-cache-file-hash-size (default 512) for MyISAM and aria_pagecache_file_hash_size (default 512) for Aria.
      - Added new status variable "Feature_delay_key_write" which counts number of tables opened that are using delay_key_write
      
      
      mysql-test/r/features.result:
        Added test of Feature_delay_key_write
      mysql-test/r/key_cache.result:
        Updated tests as the number of blocks has changed
      mysql-test/r/mysqld--help.result:
        Updated result
      mysql-test/suite/maria/maria3.result:
        Updated result
      mysql-test/suite/sys_vars/r/key_cache_file_hash_size_basic.result:
        Test new variable
      mysql-test/suite/sys_vars/t/aria_pagecache_file_hash_size_basic.test:
        Test new variable
      mysql-test/suite/sys_vars/t/key_cache_file_hash_size_basic.test:
        Test new variable
      mysql-test/t/features.test:
        Added test of Feature_delay_key_write
      mysql-test/t/key_cache.test:
        Updated tests as the number of blocks has changed
      mysys/mf_keycache.c:
        Made CHANGED_BLOCKS_HASH dynamic
      sql/handler.cc:
        Updated call to init_key_cache()
      sql/mysqld.cc:
        Added "Feature_delay_key_write"
        Added support for key-cache-file-hash-size
      sql/mysqld.h:
        Added support for key-cache-file-hash-size
      sql/sql_class.h:
        Added feature_files_opened_with_delayed_keys
      sql/sys_vars.cc:
        Added key_cache_file_hash_size
      storage/maria/ha_maria.cc:
        Added pagecache_file_hash_size
        Added counting of files with delay_key_write
      storage/maria/ma_checkpoint.c:
        Fixed compiler warning
      storage/maria/ma_pagecache.c:
        Made PAGECACHE_CHANGED_BLOCKS_HASH into a variable
      storage/maria/ma_pagecache.h:
        Made PAGECACHE_CHANGED_BLOCKS_HASH into a variable
      storage/maria/ma_rt_test.c:
        Updated parameters for init_pagecache()
      storage/maria/ma_test1.c:
        Updated parameters for init_pagecache()
      storage/maria/ma_test2.c:
        Updated parameters for init_pagecache()
      storage/maria/ma_test3.c:
        Updated parameters for init_pagecache()
      storage/maria/maria_chk.c:
        Updated parameters for init_pagecache()
      storage/maria/maria_ftdump.c:
        Updated parameters for init_pagecache()
      storage/maria/maria_pack.c:
        Updated parameters for init_pagecache()
      storage/maria/maria_read_log.c:
        Updated parameters for init_pagecache()
      storage/maria/unittest/ma_pagecache_consist.c:
        Updated parameters for init_pagecache()
      storage/maria/unittest/ma_pagecache_rwconsist.c:
        Updated parameters for init_pagecache()
      storage/maria/unittest/ma_pagecache_rwconsist2.c:
        Updated parameters for init_pagecache()
      storage/maria/unittest/ma_pagecache_single.c:
        Updated parameters for init_pagecache()
      storage/maria/unittest/ma_test_loghandler-t.c:
        Updated parameters for init_pagecache()
      storage/maria/unittest/ma_test_loghandler_first_lsn-t.c:
        Updated parameters for init_pagecache()
      storage/maria/unittest/ma_test_loghandler_max_lsn-t.c:
        Updated parameters for init_pagecache()
      storage/maria/unittest/ma_test_loghandler_multigroup-t.c:
        Updated parameters for init_pagecache()
      storage/maria/unittest/ma_test_loghandler_multithread-t.c:
        Updated parameters for init_pagecache()
      storage/maria/unittest/ma_test_loghandler_noflush-t.c:
        Updated parameters for init_pagecache()
      storage/maria/unittest/ma_test_loghandler_nologs-t.c:
        Updated parameters for init_pagecache()
      storage/maria/unittest/ma_test_loghandler_pagecache-t.c:
        Updated parameters for init_pagecache()
      storage/maria/unittest/ma_test_loghandler_purge-t.c:
        Updated parameters for init_pagecache()
      storage/myisam/ha_myisam.cc:
        Added counting of files with delay_key_write
      storage/myisam/mi_check.c:
        Updated call to init_key_cache()
      storage/myisam/mi_test1.c:
        Updated call to init_key_cache()
      storage/myisam/mi_test2.c:
        Updated call to init_key_cache()
      storage/myisam/mi_test3.c:
        Updated call to init_key_cache()
      storage/myisam/mi_test_all.sh:
        Fixed broken test
      storage/myisam/myisam_ftdump.c:
        Updated call to init_key_cache()
      storage/myisam/myisamchk.c:
        Updated call to init_key_cache()
      storage/myisam/myisamlog.c:
        Updated call to init_key_cache()
      f0f2072d
    • Michael Widenius's avatar
      Fixed assert in perfschema/pfs.cc::start_idle_wait_v1 when using performance... · ff205b25
      Michael Widenius authored
      Fixed assert in perfschema/pfs.cc::start_idle_wait_v1 when using performance schema and big packets in debug version.
      
      The bug was that my_real_read() called net_before_header_psi() multiple times for long packets.
      Fixed by adding a flag when we are reading a header.
      Did also some cleanups to interface of my_net_read() to avoid unnecessary calls if performance schema is not used.
      
      - Added my_net_read_packet() as a replacement for my_net_read(). my_net_read() is still in the client library for old clients.
      - Removed THD->m_server_idle (not needed anymore as this is now given as argument to my_net_read_packet()
      - Added my_net_read_packet(), which is a new version of my_net_read() with a new parameter if we are doing a read for a new command from the server.
      - Added tests for compressed protocol and big packets
      
      
      
      
      
      include/mysql.h.pp:
        Added my_net_read_packet() as a replacement for my_net_read()
      include/mysql_com.h:
        Added my_net_read_packet() as a replacement for my_net_read()
      mysql-test/r/mysql_client_test_comp.result:
        New test
      mysql-test/t/mysql_client_test-master.opt:
        Added max_allowed_packet to be able to test big packets and packet size overflows.
      mysql-test/t/mysql_client_test_comp-master.opt:
        New test
      mysql-test/t/mysql_client_test_nonblock-master.opt:
        Added max_allowed_packet to be able to test big packets and packet size overflows.
      sql-common/client.c:
        Use my_net_read_packet()
      sql/mf_iocache.cc:
        Use my_net_read_packet()
      sql/mysqld.cc:
        Removed THD->m_server_idle (not needed anymore as this is now given as argument to my_net_read_packet()
      sql/net_serv.cc:
        Added argument to my_real_read() to indicte if we are reading the first block of the next statement and should call performance schema.
        Added 'compatibilty function' my_net_read().
        Added my_net_read_packet(), which is a new version of my_net_read() with a new parameter if we are doing a read for a new command from the server.
      sql/sql_class.cc:
        Removed m_server_idle (not needed anymore)
      sql/sql_class.h:
        Removed m_server_idle (not needed anymore)
      sql/sql_parse.cc:
        Removed m_server_idle (not needed anymore)
      tests/mysql_client_test.c:
        Added tests for compressed protocol and big packets
      ff205b25
  4. 08 Jul, 2014 1 commit
    • Kristian Nielsen's avatar
      MDEV-5262, MDEV-5914, MDEV-5941, MDEV-6020: Deadlocks during parallel... · 98fc5b3a
      Kristian Nielsen authored
      MDEV-5262, MDEV-5914, MDEV-5941, MDEV-6020: Deadlocks during parallel replication causing replication to fail.
      
      After-review changes.
      
      For this patch in 10.0, we do not introduce a new public storage engine API,
      we just fix the InnoDB/XtraDB issues. In 10.1, we will make a better public
      API that can be used for all storage engines (MDEV-6429).
      
      Eliminate the background thread that did deadlock kills asynchroneously.
      Instead, we ensure that the InnoDB/XtraDB code can handle doing the kill from
      inside the deadlock detection code (when thd_report_wait_for() needs to kill a
      later thread to resolve a deadlock).
      
      (We preserve the part of the original patch that introduces dedicated mutex
      and condition for the slave init thread, to remove the abuse of
      LOCK_thread_count for start/stop synchronisation of the slave init thread).
      
      98fc5b3a
  5. 09 Jul, 2014 1 commit
  6. 10 Jun, 2014 1 commit
    • unknown's avatar
      MDEV-5262, MDEV-5914, MDEV-5941, MDEV-6020: Deadlocks during parallel · bd4153a8
      unknown authored
      replication causing replication to fail.
      
      Remove the temporary fix for MDEV-5914, which used READ COMMITTED for parallel
      replication worker threads. Replace it with a better, more selective solution.
      
      The issue is with certain edge cases of InnoDB gap locks, for example between
      INSERT and ranged DELETE. It is possible for the gap lock set by the DELETE to
      block the INSERT, if the DELETE runs first, while the record lock set by
      INSERT does not block the DELETE, if the INSERT runs first. This can cause a
      conflict between the two in parallel replication on the slave even though they
      ran without conflicts on the master.
      
      With this patch, InnoDB will ask the server layer about the two involved
      transactions before blocking on a gap lock. If the server layer tells InnoDB
      that the transactions are already fixed wrt. commit order, as they are in
      parallel replication, InnoDB will ignore the gap lock and allow the two
      transactions to proceed in parallel, avoiding the conflict.
      
      Improve the fix for MDEV-6020. When InnoDB itself detects a deadlock, it now
      asks the server layer for any preferences about which transaction to roll
      back. In case of parallel replication with two transactions T1 and T2 fixed to
      commit T1 before T2, the server layer will ask InnoDB to roll back T2 as the
      deadlock victim, not T1. This helps in some cases to avoid excessive deadlock
      rollback, as T2 will in any case need to wait for T1 to complete before it can
      itself commit.
      
      Also some misc. fixes found during development and testing:
      
       - Remove thd_rpl_is_parallel(), it is not used or needed.
      
       - Use KILL_CONNECTION instead of KILL_QUERY when a parallel replication
         worker thread is killed to resolve a deadlock with fixed commit
         ordering. There are some cases, eg. in sql/sql_parse.cc, where a KILL_QUERY
         can be ignored if the query otherwise completed successfully, and this
         could cause the deadlock kill to be lost, so that the deadlock was not
         correctly resolved.
      
       - Fix random test failure due to missing wait_for_binlog_checkpoint.inc.
      
       - Make sure that deadlock or other temporary errors during parallel
         replication are not printed to the the error log; there were some places
         around the replication code with extra error logging. These conditions can
         occur occasionally and are handled automatically without breaking
         replication, so they should not pollute the error log.
      
       - Fix handling of rgi->gtid_sub_id. We need to be able to access this also at
         the end of a transaction, to be able to detect and resolve deadlocks due to
         commit ordering. But this value was also used as a flag to mark whether
         record_gtid() had been called, by being set to zero, losing the value. Now,
         introduce a separate flag rgi->gtid_pending, so rgi->gtid_sub_id remains
         valid for the entire duration of the transaction.
      
       - Fix one place where the code to handle ignored errors called reset_killed()
         unconditionally, even if no error was caught that should be ignored. This
         could cause loss of a deadlock kill signal, breaking deadlock detection and
         resolution.
      
       - Fix a couple of missing mysql_reset_thd_for_next_command(). This could
         cause a prior error condition to remain for the next event executed,
         causing assertions about errors already being set and possibly giving
         incorrect error handling for following event executions.
      
       - Fix code that cleared thd->rgi_slave in the parallel replication worker
         threads after each event execution; this caused the deadlock detection and
         handling code to not be able to correctly process the associated
         transactions as belonging to replication worker threads.
      
       - Remove useless error code in slave_background_kill_request().
      
       - Fix bug where wfc->wakeup_error was not cleared at
         wait_for_commit::unregister_wait_for_prior_commit(). This could cause the
         error condition to wrongly propagate to a later wait_for_prior_commit(),
         causing spurious ER_PRIOR_COMMIT_FAILED errors.
      
       - Do not put the binlog background thread into the processlist. It causes
         too many result differences in mtr, but also it probably is not useful
         for users to pollute the process list with a system thread that does not
         really perform any user-visible tasks...
      bd4153a8
  7. 03 Jun, 2014 1 commit
    • unknown's avatar
      MDEV-5262, MDEV-5914, MDEV-5941, MDEV-6020: Deadlocks during parallel · 629b8229
      unknown authored
      replication causing replication to fail.
      
      In parallel replication, we run transactions from the master in parallel, but
      force them to commit in the same order they did on the master. If we force T1
      to commit before T2, but T2 holds eg. a row lock that is needed by T1, we get
      a deadlock when T2 waits until T1 has committed.
      
      Usually, we do not run T1 and T2 in parallel if there is a chance that they
      can have conflicting locks like this, but there are certain edge cases where
      it can occasionally happen (eg. MDEV-5914, MDEV-5941, MDEV-6020). The bug was
      that this would cause replication to hang, eventually getting a lock timeout
      and causing the slave to stop with error.
      
      With this patch, InnoDB will report back to the upper layer whenever a
      transactions T1 is about to do a lock wait on T2. If T1 and T2 are parallel
      replication transactions, and T2 needs to commit later than T1, we can thus
      detect the deadlock; we then kill T2, setting a flag that causes it to catch
      the kill and convert it to a deadlock error; this error will then cause T2 to
      roll back and release its locks (so that T1 can commit), and later T2 will be
      re-tried and eventually also committed.
      
      The kill happens asynchroneously in a slave background thread; this is
      necessary, as the reporting from InnoDB about lock waits happen deep inside
      the locking code, at a point where it is not possible to directly call
      THD::awake() due to mutexes held.
      
      Deadlock is assumed to be (very) rarely occuring, so this patch tries to
      minimise the performance impact on the normal case where no deadlocks occur,
      rather than optimise the handling of the occasional deadlock.
      
      Also fix transaction retry due to deadlock when it happens after a transaction
      already signalled to later transactions that it started to commit. In this
      case we need to undo this signalling (and later redo it when we commit again
      during retry), so following transactions will not start too early.
      
      Also add a missing thd->send_kill_message() that got triggered during testing
      (this corrects an incorrect fix for MySQL Bug#58933).
      629b8229
  8. 01 May, 2014 1 commit
  9. 25 Apr, 2014 1 commit
    • unknown's avatar
      MDEV-6156: Parallel replication incorrectly caches charset between worker threads · 64923bb6
      unknown authored
      The previous patch for this bug was unfortunately completely wrong.
      
      The purpose of cached_charset is to remember which character set we
      have installed currently in the THD, so that in the common case where
      charset does not change between queries, we do not need to update it
      in the THD. Thus, it is important that the cached_charset field is
      tightly coupled to the THD for which it handles caching.
      
      Thus the right place to put cached_charset seems to be in the THD.
      This patch introduces a field THD:system_thread_info where such info
      in general can be placed without further inflating the THD with unused
      data for other threads (THD is already far too big as it is). It then
      moves the cached_charset into this slot for the SQL driver thread and
      for the parallel replication worker threads.
      
      The THD::rpl_filter field is also moved inside system_thread_info, to
      keep the size of THD unchanged. Moving further fields in to reduce the
      size of THD is a separate task, filed as MDEV-6164.
      64923bb6
  10. 23 Apr, 2014 1 commit
  11. 26 Mar, 2014 1 commit
  12. 19 Mar, 2014 1 commit
  13. 14 Mar, 2014 1 commit
    • Michael Widenius's avatar
      MDEV-5829: STOP SLAVE resets global status variables · dd13db6f
      Michael Widenius authored
      Reason for the bug was an optimization for higher connect speed where we moved when global status was updated,
      but forgot to update states when slave thread dies.
      Fixed by adding thd->add_status_to_global() before deleting slave thread's thd.
      
      
      mysys/my_delete.c:
        Added missing newline
      sql/mysqld.cc:
        Use add_status_to_global()
      sql/slave.cc:
        Added missing add_status_to_global()
      sql/sql_class.cc:
        Use add_status_to_global()
      sql/sql_class.h:
        Simplify adding local status to global by adding add_status_to_global()
      dd13db6f
  14. 12 Mar, 2014 1 commit
    • Michael Widenius's avatar
      MDEV-5619: CREATE OR REPLACE does not release MDL_EXCLUSIVE upon failure · f320b12c
      Michael Widenius authored
      mysql-test/r/create_or_replace.result:
        Added test of releasing of metadata locks
      mysql-test/t/create_or_replace.test:
        Added test of releasing of metadata locks
      sql/handler.h:
        Added marker if table was deleted as part of CREATE OR REPLACE
      sql/sql_base.cc:
        Added Locked_tables_list::unlock_locked_table()
      sql/sql_class.h:
        New prototypes
      sql/sql_insert.cc:
        Unlock metadata locks for deleted table in case of error. Also do unlock tables if this was the only locked table.
      sql/sql_table.cc:
        Unlock metadata locks for deleted table in case of error. Also do unlock tables if this was the only locked table.
      f320b12c
  15. 07 Mar, 2014 1 commit
  16. 15 Apr, 2014 1 commit
    • Alexey Botchkov's avatar
      MDEV-4856 SQL_ERROR_LOG shows 1146 errors which didnt appear in mysql client. · 142c20ed
      Alexey Botchkov authored
          The fill_schema_table() function used to call get_table_share() for a table name in WHERE
          then clear the error list. That way plugins receive the superfluous error notification if it
          happens in it. Also the problem was that error handler didn't prevent the suppressed
          error message from logging anyway as the logging happens in THD::raise_condition
          before the handler call.
          Trigger_error_handler is remade into Warnings_only_error_handler, so it stores the error
          message in all cases in the thd->stmt_da.
          Then later the stored error is raised.
      142c20ed
  17. 26 Feb, 2014 1 commit
    • unknown's avatar
      MDEV-5657: Parallel replication. · e90f68c0
      unknown authored
      Clean up and improve the parallel implementation code, mainly related to
      scheduling of work to threads and handling of stop and errors.
      
      Fix a lot of bugs in various corner cases that could lead to crashes or
      corruption.
      
      Fix that a single replication domain could easily grab all worker threads and
      stall all other domains; now a configuration variable
      --slave-domain-parallel-threads allows to limit the number of
      workers.
      
      Allow next event group to start as soon as previous group begins the commit
      phase (as opposed to when it ends it); this allows multiple event groups on
      the slave to participate in group commit, even when no other opportunities for
      parallelism are available.
      
      Various fixes:
      
       - Fix some races in the rpl.rpl_parallel test case.
      
       - Fix an old incorrect assertion in Log_event iocache read.
      
       - Fix repeated malloc/free of wait_for_commit and rpl_group_info objects.
      
       - Simplify wait_for_commit wakeup logic.
      
       - Fix one case in queue_for_group_commit() where killing one thread would
         fail to correctly signal the error to the next, causing loss of the
         transaction after slave restart.
      
       - Fix leaking of pthreads (and their allocated stack) due to missing
         PTHREAD_CREATE_DETACHED attribute.
      
       - Fix how one batch of group-committed transactions wait for the previous
         batch before starting to execute themselves. The old code had a very
         complex scheduling where the first transaction was handled differently,
         with subtle bugs in corner cases. Now each event group is always scheduled
         for a new worker (in a round-robin fashion amongst available workers).
         Keep a count of how many transactions have started to commit, and wait for
         that counter to reach the appropriate value.
      
       - Fix slave stop to wait for all workers to actually complete processing;
         before, the wait was for update of last_committed_sub_id, which happens a
         bit earlier, and could leave worker threads potentially accessing bits of
         the replication state that is no longer valid after slave stop.
      
       - Fix a couple of places where the test suite would kill a thread waiting
         inside enter_cond() in connection with debug_sync; debug_sync + kill can
         crash in rare cases due to a race with mysys_var_current_mutex in this
         case.
      
       - Fix some corner cases where we had enter_cond() but no exit_cond().
      
       - Fix that we could get failure in wait_for_prior_commit() but forget to flag
         the error with my_error().
      
       - Fix slave stop (both for normal stop and stop due to error). Now, at stop
         we pick a specific safe point (in terms of event groups executed) and make
         sure that all event groups before that point are executed to completion,
         and that no event group after start executing; this ensures a safe place to
         restart replication, even for non-transactional stuff/DDL. In error stop,
         make sure that all prior event groups are allowed to execute to completion,
         and that any later event groups that have started are rolled back, if
         possible. The old code could leave eg. T1 and T3 committed but T2 not, or
         it could even leave half a transaction not rolled back in some random
         worker, which would cause big problems when that worker was later reused
         after slave restart.
      
       - Fix the accounting of amount of events queued for one worker. Before, the
         amount was reduced immediately as soon as the events were dequeued (which
         happens all at once); this allowed twice the amount of events to be queued
         in memory for each single worker, which is not what users would expect.
      
       - Fix that an error set during execution of one event was sometimes not
         cleared before executing the next, causing problems with the error
         reporting.
      
       - Fix incorrect handling of thd->killed in worker threads.
      e90f68c0
  18. 19 Feb, 2014 1 commit
    • Sergey Vojtovich's avatar
      MDEV-5314 - Compiling fails on OSX using clang · d12c7adf
      Sergey Vojtovich authored
      This is port of fix for MySQL BUG#17647863.
      
      revno: 5572
      revision-id: jon.hauglid@oracle.com-20131030232243-b0pw98oy72uka2sj
      committer: Jon Olav Hauglid <jon.hauglid@oracle.com>
      timestamp: Thu 2013-10-31 00:22:43 +0100
      message:
        Bug#17647863: MYSQL DOES NOT COMPILE ON OSX 10.9 GM
      
        Rename test() macro to MY_TEST() to avoid conflict with libc++.
      d12c7adf
  19. 07 Feb, 2014 1 commit
    • 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
  20. 05 Feb, 2014 1 commit
    • 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
  21. 29 Jan, 2014 1 commit
    • Michael Widenius's avatar
      Implementation of MDEV-5491: CREATE OR REPLACE TABLE · 7ffc9da0
      Michael Widenius authored
      Using CREATE OR REPLACE TABLE is be identical to
      
      DROP TABLE IF EXISTS table_name;
      CREATE TABLE ...;
      
      Except that:
      
      * CREATE OR REPLACE is be atomic (now one can create the same table between drop and create).
      * Temporary tables will not shadow the table name for the DROP as the CREATE TABLE tells us already if we are using a temporary table or not.
      * If the table was locked with LOCK TABLES, the new table will be locked with the same lock after it's created.
      
      Implementation details:
      - We don't anymore open the to-be-created table during CREATE TABLE, which the original code did.
        - There is no need to open a table we are planning to create. It's enough to check if the table exists or not.
      - Removed some of duplicated code for CREATE IF NOT EXISTS.
      - Give an error when using CREATE OR REPLACE with IF NOT EXISTS (conflicting options).
      - As a side effect of the code changes, we don't anymore have to internally re-prepare prepared statements with CREATE TABLE if the table exists.
      - Made one code path for all testing if log table are in use.
      - Better error message if one tries to create/drop/alter a log table in use
      - Added back disabled rpl_row_create_table test as it now seams to work and includes a lot of interesting tests.
      - Added HA_LEX_CREATE_REPLACE to mark if we are using CREATE OR REPLACE
      - Aligned CREATE OR REPLACE parsing code in sql_yacc.yy for TABLE and VIEW
      - Changed interface for drop_temporary_table() to make it more reusable
      - Changed Locked_tables_list::init_locked_tables() to work on the table object instead of the table list object. Before this it used a mix of both, which was not good.
      - Locked_tables_list::unlock_locked_tables(THD *thd) now requires a valid thd argument. Old usage of calling this with 0 i changed to instead call Locked_tables_list::reset()
      - Added functions Locked_tables_list:restore_lock() and Locked_tables_list::add_back_last_deleted_lock() to be able to easily add back a locked table to the lock list.
      - Added restart_trans_for_tables() to be able to restart a transaction.
      - DROP_ACL is required if one uses CREATE TABLE OR REPLACE.
      - Added drop of normal and temporary tables in create_table_imp() if CREATE OR REPLACE was used.
      - Added reacquiring of table locks in mysql_create_table() and mysql_create_like_table()
      
      
      
      
      mysql-test/include/commit.inc:
        With new code we get fewer status increments
      mysql-test/r/commit_1innodb.result:
        With new code we get fewer status increments
      mysql-test/r/create.result:
        Added testing of create or replace with timeout
      mysql-test/r/create_or_replace.result:
        Basic testing of CREATE OR REPLACE TABLE
      mysql-test/r/partition_exchange.result:
        New error message
      mysql-test/r/ps_ddl.result:
        Fewer reprepares with new code
      mysql-test/suite/archive/discover.result:
        Don't rediscover archive tables if the .frm file exists
        (Sergei will look at this if there is a better way...)
      mysql-test/suite/archive/discover.test:
        Don't rediscover archive tables if the .frm file exists
        (Sergei will look at this if there is a better way...)
      mysql-test/suite/funcs_1/r/innodb_views.result:
        New error message
      mysql-test/suite/funcs_1/r/memory_views.result:
        New error message
      mysql-test/suite/rpl/disabled.def:
        rpl_row_create_table should now be safe to use
      mysql-test/suite/rpl/r/rpl_row_create_table.result:
        Updated results after adding back disabled test
      mysql-test/suite/rpl/t/rpl_create_if_not_exists.test:
        Added comment
      mysql-test/suite/rpl/t/rpl_row_create_table.test:
        Added CREATE OR REPLACE TABLE test
      mysql-test/t/create.test:
        Added CREATE OR REPLACE TABLE test
      mysql-test/t/create_or_replace-master.opt:
        Create logs
      mysql-test/t/create_or_replace.test:
        Basic testing of CREATE OR REPLACE TABLE
      mysql-test/t/partition_exchange.test:
        Error number changed as we are now using same code for all log table change issues
      mysql-test/t/ps_ddl.test:
        Fewer reprepares with new code
      sql/handler.h:
        Moved things around a bit in a structure to get better alignment.
        Added HA_LEX_CREATE_REPLACE to mark if we are using CREATE OR REPLACE
        Added 3 elements to end of HA_CREATE_INFO to be able to store state to add backs locks in case of LOCK TABLES.
      sql/log.cc:
        Reimplemented check_if_log_table():
        - Simpler and faster usage
        - Can give error messages
        
        This gives us one code path for allmost all error messages if log tables are in use
      sql/log.h:
        New interface for check_if_log_table()
      sql/slave.cc:
        More logging
      sql/sql_alter.cc:
        New interface for check_if_log_table()
      sql/sql_base.cc:
        More documentation
        Changed interface for drop_temporary_table() to make it more reusable
        Changed Locked_tables_list::init_locked_tables() to work on the table object instead of the table list object. Before this it used a mix of both, which was not good.
        Locked_tables_list::unlock_locked_tables(THD *thd) now requires a valid thd argument.  Old usage of calling this with 0 i changed to instead call Locked_tables_list::reset()
        Added functions Locked_tables_list:restore_lock() and Locked_tables_list::add_back_last_deleted_lock() to be able to easily add back a locked table to the lock list.
        Check for command number instead of open_strategy of CREATE TABLE was used.
        Added restart_trans_for_tables() to be able to restart a transaction.  This was needed in "create or replace ... select" between the drop table and the select.
      sql/sql_base.h:
        Added and updated function prototypes
      sql/sql_class.h:
        Added new prototypes to Locked_tables_list class
        Added extra argument to select_create to avoid double call to eof() or send_error()
        - I needed this in some edge case where the table was not created against expections.
      sql/sql_db.cc:
        New interface for check_if_log_table()
      sql/sql_insert.cc:
        Remember position to lock information so that we can reaquire table lock for LOCK TABLES + CREATE OR REPLACE TABLE SELECT. Later add back the lock by calling restore_lock().
        Removed one not needed indentation level in create_table_from_items()
        Ensure we don't call send_eof() or abort_result_set() twice.
      sql/sql_lex.h:
        Removed variable that I temporarly added in an earlier changeset
      sql/sql_parse.cc:
        Removed old test code (marked with QQ)
        Ensure that we have open_strategy set as TABLE_LIST::OPEN_STUB in CREATE TABLE
        Removed some IF NOT EXISTS code as this is now handled in create_table_table_impl().
        Set OPTION_KEEP_LOGS later. This code had to be moved as the test for IF EXISTS has changed place.
        DROP_ACL is required if one uses CREATE TABLE OR REPLACE.
      sql/sql_partition_admin.cc:
        New interface for check_if_log_table()
      sql/sql_rename.cc:
        New interface for check_if_log_table()
      sql/sql_table.cc:
        New interface for check_if_log_table()
        Moved some code in mysql_rm_table() under a common test.
        - Safe as temporary tables doesn't have statistics.
        - !is_temporary_table(table) test was moved out from drop_temporary_table() and merged with upper level code.
        - Added drop of normal and temporary tables in create_table_imp() if CREATE OR REPLACE was used.
        - Added reacquiring of table locks in mysql_create_table() and mysql_create_like_table()
        - In mysql_create_like_table(), restore table->open_strategy() if it was changed.
        - Re-test if table was a view after opening it.
      sql/sql_table.h:
        New prototype for mysql_create_table_no_lock()
      sql/sql_yacc.yy:
        Added syntax for CREATE OR REPLACE TABLE
        Reuse new code for CREATE OR REPLACE VIEW
      sql/table.h:
        Added name for enum type
      sql/table_cache.cc:
        More DBUG
      7ffc9da0
  22. 26 Jan, 2014 1 commit
    • Michael Widenius's avatar
      Fix for MDEV-5168: MariaDB returns warnings for INSERT IGNORE · 68028887
      Michael Widenius authored
      Added variable "OLD_MODE" that can be used to turn off the new behavior
      
      mysql-test/r/insert.result:
        Added test case
      mysql-test/r/mysqld--help.result:
        Added old_mode
      mysql-test/suite/sys_vars/r/old_mode_basic.result:
        Added testing of new variable
      mysql-test/suite/sys_vars/t/old_mode_basic.test:
        Added testing of new variable
      mysql-test/t/insert.test:
        Added test case
      sql/sql_class.h:
        Added bit flags for OLD_MODE
      sql/sql_insert.cc:
        Disable duplicate key warnings for INSERT IGNORE of OLD_MODE NO_DUP_KEY_WARNINGS_WITH_IGNORE is used
      sql/sql_show.cc:
        Don't show progress reporting on SHOW PROCESSLIST if OLD_MODE NO_PROGRESS_INFO is used
      sql/sys_vars.cc:
        Added OLD_MODE
      68028887
  23. 13 Jan, 2014 1 commit
    • Thayumanavar's avatar
      BUG#18054998 - BACKPORT FIX FOR BUG#11765785 to 5.5 · 819eb3e0
      Thayumanavar authored
      This is a backport of the patch of bug#11765785. Commit message
      by Prabakaran Thirumalai from bug#11765785 is reproduced below:
      Description:
      ------------
      Global Query ID (global_query_id ) is not incremented for PING and 
      statistics command. These two query types are filtered before 
      incrementing the global query id. This causes race condition and 
      results in duplicate query id for different queries originating from 
      different connections.
            
      Analysis:
      ---------
      sqlparse.cc::dispath_command() is the only place in code which sets 
      thd->query_ id to global_query_id and then increments it based on the 
      query type. In all other places it is incremented first and then 
      assigned to thd->query_id.
            
      This is done such that global_query_id is not incremented for PING 
      and statistics commands in dispatch_command() function.
            
      Fix:
      ----
      As per suggestion from Serg, "There is no reason to skip query_id for 
      the PING and STATISTICS command.", removing the check which filters 
      PING and statistics commands.
            
      Instead of using get_query_id() and next_query_id() which can still 
      cause race condition if context switch happens soon after executing 
      get_query_id(), changing the code to use next_query_id() instead of 
      get_query_id() as it is done in other parts of code which deals with 
      global_query_id.
            
      Removed get_query_id() function and forced next_query_id() caller 
      to use the return value by specifying warn_unused_result attribute.
      819eb3e0
  24. 13 Dec, 2013 1 commit
    • unknown's avatar
      MDEV-5363: Make parallel replication waits killable · dbfe5f47
      unknown authored
      Add a test case for killing a waiting query in parallel replication.
      
      Fix several bugs found:
      
       - We should not wakeup_subsequent_commits() in ha_rollback_trans(), since we
         do not know the right wakeup_error() to give.
      
       - When a wait_for_prior_commit() is killed, we must unregister from the
         waitee so we do not race and get an extra (non-kill) wakeup.
      
       - We need to deal with error propagation correctly in queue_for_group_commit
         when one thread is killed.
      
       - Fix one locking issue in queue_for_group_commit(), we could unlock the
         waitee lock too early and this end up processing wakeup() with insufficient
         locking.
      
       - Fix Xid_log_event::do_apply_event; if commit fails it must not update the
         in-memory @@gtid_slave_pos state.
      
       - Fix and cleanup some things in the rpl_parallel.cc error handling.
      
       - Add a missing check for killed in the slave sql driver thread, to avoid a
         race.
      dbfe5f47
  25. 05 Dec, 2013 1 commit
  26. 26 Nov, 2013 3 commits
  27. 11 Nov, 2013 1 commit
    • Sergei Golubchik's avatar
      MDEV-4824 userstats - wrong user statistics · f486f49e
      Sergei Golubchik authored
      (and valgrind warnings)
      
      * move thd userstat initialization to the same function
        that was adding thd userstat to global counters.
      * initialize thd->start_bytes_received in THD::init
        (when thd->userstat_running is set)
      f486f49e
  28. 01 Nov, 2013 1 commit
  29. 18 Oct, 2013 1 commit
  30. 17 Oct, 2013 1 commit
  31. 15 Oct, 2013 1 commit
    • Sergey Petrunya's avatar
      MDEV-3798: EXPLAIN UPDATE/DELETE · a06170c8
      Sergey Petrunya authored
      - Fix a problem with EXPLAIN multi_table UPDATE: 
        = Do use multi_update object, because multi_update::prepare() does
          various setup, e.g. it disables index-only for the tables to be updated.
        = Protect multi_update::prepare() from being invoked multiple times. 
          If the query has subqueries, they may try to invoke it, for some reason.
      
      a06170c8
  32. 14 Oct, 2013 1 commit
    • unknown's avatar
      MDEV-4506: Parallel replication: error handling. · 2842f6b5
      unknown authored
      Add an error code to the wait_for_commit facility.
      
      Now, when a transaction fails, it can signal the error to
      any subsequent transaction that is waiting for it to commit.
      The waiting transactions then receive the error code back from
      wait_for_prior_commit() and can handle the error appropriately.
      
      Also fix one race that could cause crash if @@slave_parallel_threads
      were changed several times quickly in succession.
      2842f6b5
  33. 13 Oct, 2013 1 commit
    • Michael Widenius's avatar
      Fixes for parallel slave: · 2e100cc5
      Michael Widenius authored
      - Made slaves temporary table multi-thread slave safe by adding mutex around save_temporary_table usage.
        - rli->save_temporary_tables is the active list of all used temporary tables
        - This is copied to THD->temporary_tables when temporary tables are opened and updated when temporary tables are closed
        - Added THD->lock_temporary_tables() and THD->unlock_temporary_tables() to simplify this.
      - Relay_log_info->sql_thd renamed to Relay_log_info->sql_driver_thd to avoid wrong usage for merged code.
      - Added is_part_of_group() to mark functions that are part of the next function. This replaces setting IN_STMT when events are executed.
      - Added is_begin(), is_commit() and is_rollback() functions to Query_log_event to simplify code.
      - If slave_skip_counter is set run things in single threaded mode. This simplifies code for skipping events.
      - Updating state of relay log (IN_STMT and IN_TRANSACTION) is moved to one single function: update_state_of_relay_log()
        We can't use OPTION_BEGIN to check for the state anymore as the sql_driver and sql execution threads may be different.
        Clear IN_STMT and IN_TRANSACTION in init_relay_log_pos() and Relay_log_info::cleanup_context() to ensure the flags doesn't survive slave restarts
        is_in_group() is now independent of state of executed transaction.
      - Reset thd->transaction.all.modified_non_trans_table() if we did set it for single table row events.
        This was mainly for keeping the flag as documented.
      - Changed slave_open_temp_tables to uint32 to be able to use atomic operators on it.
      - Relay_log_info::sleep_lock -> rpl_group_info::sleep_lock
      - Relay_log_info::sleep_cond -> rpl_group_info::sleep_cond
      - Changed some functions to take rpl_group_info instead of Relay_log_info to make them multi-slave safe and to simplify usage
        - do_shall_skip()
        - continue_group()
        - sql_slave_killed()
        - next_event()
      - Simplifed arguments to io_salve_killed(), check_io_slave_killed() and sql_slave_killed(); No reason to supply THD as this is part of the given structure.
      - set_thd_in_use_temporary_tables() removed as in_use is set on usage
      - Added information to thd_proc_info() which thread is waiting for slave mutex to exit.
      - In open_table() reuse code from find_temporary_table()
      
      Other things:
      - More DBUG statements
      - Fixed the rpl_incident.test can be run with --debug
      - More comments
      - Disabled not used function rpl_connect_master()
      
      mysql-test/suite/perfschema/r/all_instances.result:
        Moved sleep_lock and sleep_cond to rpl_group_info
      mysql-test/suite/rpl/r/rpl_incident.result:
        Updated result
      mysql-test/suite/rpl/t/rpl_incident-master.opt:
        Not needed anymore
      mysql-test/suite/rpl/t/rpl_incident.test:
        Fixed that test can be run with --debug
      sql/handler.cc:
        More DBUG_PRINT
      sql/log.cc:
        More comments
      sql/log_event.cc:
        Added DBUG statements
        do_shall_skip(), continue_group() now takes rpl_group_info param
        Use is_begin(), is_commit() and is_rollback() functions instead of inspecting query string
        We don't have set slaves temporary tables 'in_use' as this is now done when tables are opened.
        Removed IN_STMT flag setting. This is now done in update_state_of_relay_log()
        Use IN_TRANSACTION flag to test state of relay log.
        In rows_event_stmt_cleanup() reset thd->transaction.all.modified_non_trans_table if we had set this before.
      sql/log_event.h:
        do_shall_skip(), continue_group() now takes rpl_group_info param
        Added is_part_of_group() to mark events that are part of the next event. This replaces setting IN_STMT when events are executed.
        Added is_begin(), is_commit() and is_rollback() functions to Query_log_event to simplify code.
      sql/log_event_old.cc:
        Removed IN_STMT flag setting. This is now done in update_state_of_relay_log()
        do_shall_skip(), continue_group() now takes rpl_group_info param
      sql/log_event_old.h:
        Added is_part_of_group() to mark events that are part of the next event.
        do_shall_skip(), continue_group() now takes rpl_group_info param
      sql/mysqld.cc:
        Changed slave_open_temp_tables to uint32 to be able to use atomic operators on it.
        Relay_log_info::sleep_lock -> Rpl_group_info::sleep_lock
        Relay_log_info::sleep_cond -> Rpl_group_info::sleep_cond
      sql/mysqld.h:
        Updated types and names
      sql/rpl_gtid.cc:
        More DBUG
      sql/rpl_parallel.cc:
        Updated TODO section
        Set thd for event that is execution
        Use new  is_begin(), is_commit() and is_rollback() functions.
        More comments
      sql/rpl_rli.cc:
        sql_thd -> sql_driver_thd
        Relay_log_info::sleep_lock -> rpl_group_info::sleep_lock
        Relay_log_info::sleep_cond -> rpl_group_info::sleep_cond
        Clear IN_STMT and IN_TRANSACTION in init_relay_log_pos() and Relay_log_info::cleanup_context() to ensure the flags doesn't survive slave restarts.
        Reset table->in_use for temporary tables as the table may have been used by another THD.
        Use IN_TRANSACTION instead of OPTION_BEGIN to check state of relay log.
        Removed IN_STMT flag setting. This is now done in update_state_of_relay_log()
      sql/rpl_rli.h:
        Changed relay log state flags to bit masks instead of bit positions (most other code we have uses bit masks)
        Added IN_TRANSACTION to mark if we are in a BEGIN ... COMMIT section.
        save_temporary_tables is now thread safe
        Relay_log_info::sleep_lock -> rpl_group_info::sleep_lock
        Relay_log_info::sleep_cond -> rpl_group_info::sleep_cond
        Relay_log_info->sql_thd renamed to Relay_log_info->sql_driver_thd to avoid wrong usage for merged code
        is_in_group() is now independent of state of executed transaction.
      sql/slave.cc:
        Simplifed arguments to io_salve_killed(), sql_slave_killed() and check_io_slave_killed(); No reason to supply THD as this is part of the given structure.
        set_thd_in_use_temporary_tables() removed as in_use is set on usage in sql_base.cc
        sql_thd -> sql_driver_thd
        More DBUG
        Added update_state_of_relay_log() which will calculate the IN_STMT and IN_TRANSACTION state of the relay log after the current element is executed.
        If slave_skip_counter is set run things in single threaded mode.
        Simplifed arguments to io_salve_killed(), check_io_slave_killed() and sql_slave_killed(); No reason to supply THD as this is part of the given structure.
        Added information to thd_proc_info() which thread is waiting for slave mutex to exit.
        Disabled not used function rpl_connect_master()
        Updated argument to next_event()
      sql/sql_base.cc:
        Added mutex around usage of slave's temporary tables. The active list is always kept up to date in sql->rgi_slave->save_temporary_tables.
        Clear thd->temporary_tables after query (safety)
        More DBUG
        When using temporary table, set table->in_use to current thd as the THD may be different for slave threads.
        Some code is ifdef:ed with REMOVE_AFTER_MERGE_WITH_10 as the given code in 10.0 is not yet in this tree.
        In open_table() reuse code from find_temporary_table()
      sql/sql_binlog.cc:
        rli->sql_thd -> rli->sql_driver_thd
        Remove duplicate setting of rgi->rli
      sql/sql_class.cc:
        Added helper functions rgi_lock_temporary_tables() and rgi_unlock_temporary_tables()
        Would have been nicer to have these inline, but there was no easy way to do that
      sql/sql_class.h:
        Added functions to protect slaves temporary tables
      sql/sql_parse.cc:
        Added DBUG_PRINT
      sql/transaction.cc:
        Added comment
      2e100cc5
  34. 02 Oct, 2013 1 commit
  35. 19 Sep, 2013 1 commit
  36. 13 Sep, 2013 2 commits
    • Sergey Vojtovich's avatar
      MDEV-4911 - add KILL query id, and add query id information to processlist · 1a2a9d74
      Sergey Vojtovich authored
      It is now possible to kill query by query id. KILL syntax was extended to:
      KILL [HARD | SOFT] [CONNECTION | QUERY [ID query_id]] [thread_id | USER user_name]
      
      Added QUERY_ID column to INFORMATION_SCHEMA.PROCESSLIST.
      
      Fixed tests affected by this change:
      - added PROCESSLIST.QUERY_ID column
      - ID is now keyword and is quoted in SHOW CREATE TABLE output
      - PFS statement digest is calculated basing on token id
        (not token text). Token id has shifted for keywords residing
        after ID in keywords array.
      1a2a9d74
    • unknown's avatar
      MDEV-4506, parallel replication. · d107bdaa
      unknown authored
      Some after-review fixes.
      d107bdaa