summaryrefslogtreecommitdiff
path: root/sql/slave.h
diff options
context:
space:
mode:
authorunknown <dlenev@mysql.com>2003-09-14 01:57:09 +0400
committerunknown <dlenev@mysql.com>2003-09-14 01:57:09 +0400
commit1f82a0de6c841fc2b58cd45caf3ebeafce47d861 (patch)
tree9b95250006febf53e90b41329026267482bcd75e /sql/slave.h
parentdf8b036d029a049ba40ba404142bbee3fd8cf13d (diff)
parent2f8f0a7e4d4d86489fc208dba00f37c74e1a0293 (diff)
downloadmariadb-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.h54
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,