From 7e5dc4f074b7d1cee4721e6fa49d6e5628ef793f Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 26 Jun 2013 12:10:35 +0200 Subject: MDEV-4506: Parallel replication. Intermediate commit. Implement facility for the commit in one thread to wait for the commit of another to complete first. The wait is done in a way that does not hinder that a waiter and a waitee can group commit together with a single fsync() in both binlog and InnoDB. The wait is done efficiently with respect to locking. The patch was originally made to support TaoBao parallel replication with in-order commit; now it will be adapted to also be used for parallel replication of group-committed transactions. A waiter THD registers itself with a prior waitee THD. The waiter will then complete its commit at the earliest in the same group commit of the waitee (when using binlog). The wait can also be done explicitly by the waitee. --- include/mysql/plugin_ftparser.h.pp | 1 + 1 file changed, 1 insertion(+) (limited to 'include/mysql/plugin_ftparser.h.pp') diff --git a/include/mysql/plugin_ftparser.h.pp b/include/mysql/plugin_ftparser.h.pp index ab15c9d176d..0cc51e259dc 100644 --- a/include/mysql/plugin_ftparser.h.pp +++ b/include/mysql/plugin_ftparser.h.pp @@ -189,6 +189,7 @@ void mysql_query_cache_invalidate4(void* thd, void *thd_get_ha_data(const void* thd, const struct handlerton *hton); void thd_set_ha_data(void* thd, const struct handlerton *hton, const void *ha_data); +void thd_wakeup_subsequent_commits(void* thd); enum enum_ftparser_mode { MYSQL_FTPARSER_SIMPLE_MODE= 0, -- cgit v1.2.1 From 2842f6b5dc254c82aa3dc976cd5bd3645dc82a60 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 14 Oct 2013 15:28:16 +0200 Subject: MDEV-4506: Parallel replication: error handling. 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. --- include/mysql/plugin_ftparser.h.pp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'include/mysql/plugin_ftparser.h.pp') diff --git a/include/mysql/plugin_ftparser.h.pp b/include/mysql/plugin_ftparser.h.pp index 0cc51e259dc..b4aa962c51c 100644 --- a/include/mysql/plugin_ftparser.h.pp +++ b/include/mysql/plugin_ftparser.h.pp @@ -189,7 +189,7 @@ void mysql_query_cache_invalidate4(void* thd, void *thd_get_ha_data(const void* thd, const struct handlerton *hton); void thd_set_ha_data(void* thd, const struct handlerton *hton, const void *ha_data); -void thd_wakeup_subsequent_commits(void* thd); +void thd_wakeup_subsequent_commits(void* thd, int wakeup_error); enum enum_ftparser_mode { MYSQL_FTPARSER_SIMPLE_MODE= 0, -- cgit v1.2.1