diff options
Diffstat (limited to 'sql/slave.h')
-rw-r--r-- | sql/slave.h | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/sql/slave.h b/sql/slave.h new file mode 100644 index 00000000000..67036b4120c --- /dev/null +++ b/sql/slave.h @@ -0,0 +1,95 @@ +#ifndef SLAVE_H +#define SLAVE_H + +typedef struct st_master_info +{ + char log_file_name[FN_REFLEN]; + ulonglong pos,pending; + FILE* file; // we keep the file open, so we need to remember the file pointer + + // the variables below are needed because we can change masters on the fly + char host[HOSTNAME_LENGTH+1]; + char user[USERNAME_LENGTH+1]; + char password[HASH_PASSWORD_LENGTH+1]; + uint port; + uint connect_retry; + pthread_mutex_t lock; + bool inited; + + st_master_info():pending(0),inited(0) + { + host[0] = 0; user[0] = 0; password[0] = 0; + pthread_mutex_init(&lock, NULL); + } + + ~st_master_info() + { + pthread_mutex_destroy(&lock); + } + + inline void inc_pending(ulonglong val) + { + pending += val; + } + inline void inc_pos(ulonglong val) + { + pthread_mutex_lock(&lock); + pos += val + pending; + pending = 0; + pthread_mutex_unlock(&lock); + } + // thread safe read of position - not needed if we are in the slave thread, + // but required otherwise + inline void read_pos(ulonglong& var) + { + pthread_mutex_lock(&lock); + var = pos; + pthread_mutex_unlock(&lock); + } +} MASTER_INFO; + +typedef struct st_table_rule_ent +{ + char* db; + char* tbl_name; + uint key_len; +} TABLE_RULE_ENT; + +#define TABLE_RULE_HASH_SIZE 16 + +int flush_master_info(MASTER_INFO* mi); + +int mysql_table_dump(THD* thd, char* db, char* tbl_name, int fd = -1); +// if fd is -1, dump to NET +int fetch_nx_table(THD* thd, MASTER_INFO* mi); +// retrieve non-exitent table from master +// the caller must set thd->last_nx_table and thd->last_nx_db first +int show_master_info(THD* thd); +int show_binlog_info(THD* thd); + +int db_ok(const char* db, I_List<i_string> &do_list, + I_List<i_string> &ignore_list ); +// check to see if the database is ok to operate on with respect to the +// do and ignore lists - used in replication + + +int init_master_info(MASTER_INFO* mi); +extern bool opt_log_slave_updates ; +pthread_handler_decl(handle_slave,arg); +extern bool volatile abort_loop, abort_slave; +extern bool slave_running; +extern pthread_t slave_real_id; +extern MASTER_INFO glob_mi; +extern HASH replicate_do_table, replicate_ignore_table; +extern bool do_table_inited, ignore_table_inited; + +// the master variables are defaults read from my.cnf or command line +extern uint master_port, master_connect_retry; +extern my_string master_user, master_password, master_host, + master_info_file; + +extern I_List<i_string> replicate_do_db, replicate_ignore_db; +extern I_List<i_string_pair> replicate_rewrite_db; +extern I_List<THD> threads; + +#endif |