diff options
author | unknown <dlenev@mysql.com> | 2003-09-14 01:57:09 +0400 |
---|---|---|
committer | unknown <dlenev@mysql.com> | 2003-09-14 01:57:09 +0400 |
commit | 1f82a0de6c841fc2b58cd45caf3ebeafce47d861 (patch) | |
tree | 9b95250006febf53e90b41329026267482bcd75e /sql/slave.h | |
parent | df8b036d029a049ba40ba404142bbee3fd8cf13d (diff) | |
parent | 2f8f0a7e4d4d86489fc208dba00f37c74e1a0293 (diff) | |
download | mariadb-git-1f82a0de6c841fc2b58cd45caf3ebeafce47d861.tar.gz |
Manual merge after commiting START SLAVE UNTIL
sql/lex.h:
Auto merged
sql/log.cc:
Auto merged
sql/log_event.cc:
Auto merged
sql/repl_failsafe.cc:
Auto merged
include/mysqld_error.h:
Manual merge
mysql-test/r/rpl000015.result:
Manual merge
mysql-test/r/rpl_empty_master_crash.result:
Manual merge
mysql-test/r/rpl_flush_log_loop.result:
Manual merge
mysql-test/r/rpl_log.result:
Manual merge
mysql-test/r/rpl_log_pos.result:
Manual merge
mysql-test/r/rpl_redirect.result:
Manual merge
mysql-test/r/rpl_replicate_do.result:
Manual merge
mysql-test/r/rpl_rotate_logs.result:
Manual merge
sql/share/czech/errmsg.txt:
Manual merge
sql/share/danish/errmsg.txt:
Manual merge
sql/share/dutch/errmsg.txt:
Manual merge
sql/share/english/errmsg.txt:
Manual merge
sql/share/estonian/errmsg.txt:
Manual merge
sql/share/french/errmsg.txt:
Manual merge
sql/share/german/errmsg.txt:
Manual merge
sql/share/greek/errmsg.txt:
Manual merge
sql/share/hungarian/errmsg.txt:
Manual merge
sql/share/italian/errmsg.txt:
Manual merge
sql/share/japanese/errmsg.txt:
Manual merge
sql/share/korean/errmsg.txt:
Manual merge
sql/share/norwegian-ny/errmsg.txt:
Manual merge
sql/share/norwegian/errmsg.txt:
Manual merge
sql/share/polish/errmsg.txt:
Manual merge
sql/share/portuguese/errmsg.txt:
Manual merge
sql/share/romanian/errmsg.txt:
Manual merge
sql/share/russian/errmsg.txt:
Manual merge
sql/share/serbian/errmsg.txt:
Manual merge
sql/share/slovak/errmsg.txt:
Manual merge
sql/share/spanish/errmsg.txt:
Manual merge
sql/share/swedish/errmsg.txt:
Manual merge
sql/share/ukrainian/errmsg.txt:
Manual merge
sql/slave.cc:
Manual merge
sql/slave.h:
Manual merge
sql/sql_repl.cc:
Manual merge
sql/sql_yacc.yy:
Manual merge
Diffstat (limited to 'sql/slave.h')
-rw-r--r-- | sql/slave.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/sql/slave.h b/sql/slave.h index 7dc33ffcefe..b52648005d3 100644 --- a/sql/slave.h +++ b/sql/slave.h @@ -233,9 +233,55 @@ typedef struct st_relay_log_info bool inited; volatile bool abort_slave, slave_running; + /* + Condition and its parameters from START SLAVE UNTIL clause. + + UNTIL condition is tested with is_until_satisfied() method that is + called by exec_relay_log_event(). is_until_satisfied() caches the result + of the comparison of log names because log names don't change very often; + this cache is invalidated by parts of code which change log names with + notify_*_log_name_updated() methods. (They need to be called only if SQL + thread is running). + */ + + enum {UNTIL_NONE= 0, UNTIL_MASTER_POS, UNTIL_RELAY_POS} until_condition; + char until_log_name[FN_REFLEN]; + ulonglong until_log_pos; + /* extension extracted from log_name and converted to int */ + ulong until_log_name_extension; + /* + Cached result of comparison of until_log_name and current log name + -2 means unitialised, -1,0,1 are comarison results + */ + enum + { + UNTIL_LOG_NAMES_CMP_UNKNOWN= -2, UNTIL_LOG_NAMES_CMP_LESS= -1, + UNTIL_LOG_NAMES_CMP_EQUAL= 0, UNTIL_LOG_NAMES_CMP_GREATER= 1 + } until_log_names_cmp_result; + st_relay_log_info(); ~st_relay_log_info(); + /* + Invalidate cached until_log_name and group_relay_log_name comparison + result. Should be called after any update of group_realy_log_name if + there chances that sql_thread is running. + */ + inline void notify_group_relay_log_name_update() + { + if (until_condition==UNTIL_RELAY_POS) + until_log_names_cmp_result= UNTIL_LOG_NAMES_CMP_UNKNOWN; + } + + /* + The same as previous but for group_master_log_name. + */ + inline void notify_group_master_log_name_update() + { + if (until_condition==UNTIL_MASTER_POS) + until_log_names_cmp_result= UNTIL_LOG_NAMES_CMP_UNKNOWN; + } + inline void inc_event_relay_log_pos(ulonglong val) { event_relay_log_pos+= val; @@ -249,6 +295,9 @@ typedef struct st_relay_log_info group_relay_log_pos= event_relay_log_pos; strmake(group_relay_log_name,event_relay_log_name, sizeof(group_relay_log_name)-1); + + notify_group_relay_log_name_update(); + /* If the slave does not support transactions and replicates a transaction, users should not trust group_master_log_pos (which they can display with @@ -268,6 +317,10 @@ typedef struct st_relay_log_info int wait_for_pos(THD* thd, String* log_name, longlong log_pos, longlong timeout); + + /* Check if UNTIL condition is satisfied. See slave.cc for more. */ + bool is_until_satisfied(); + } RELAY_LOG_INFO; @@ -457,6 +510,7 @@ void slave_print_error(RELAY_LOG_INFO* rli, int err_code, const char* msg, ...); void end_slave(); /* clean up */ void init_master_info_with_options(MASTER_INFO* mi); +void clear_until_condition(RELAY_LOG_INFO* rli); void clear_last_slave_error(RELAY_LOG_INFO* rli); int init_master_info(MASTER_INFO* mi, const char* master_info_fname, const char* slave_info_fname, |