diff options
author | unknown <monty@hundin.mysql.fi> | 2001-12-15 05:12:21 +0200 |
---|---|---|
committer | unknown <monty@hundin.mysql.fi> | 2001-12-15 05:12:21 +0200 |
commit | 63e4dec2446382bf0331d2c483daee665064b925 (patch) | |
tree | 5b07ad850f8dba78d186135337dd5a151d18a2b8 /sql | |
parent | 6a5f89c9b190b0f26fc0cb12595126cba2659f32 (diff) | |
parent | f8b4629cf728072b230159718994f585145b4ce2 (diff) | |
download | mariadb-git-63e4dec2446382bf0331d2c483daee665064b925.tar.gz |
Merge with 3.23.47
extra/resolve_stack_dump.c:
Auto merged
include/my_bitmap.h:
Auto merged
innobase/buf/buf0buf.c:
Auto merged
innobase/dict/dict0crea.c:
Auto merged
mysql-test/t/rpl_get_lock.test:
Auto merged
Diffstat (limited to 'sql')
-rw-r--r-- | sql/mysqld.cc | 11 | ||||
-rw-r--r-- | sql/slave.cc | 39 | ||||
-rw-r--r-- | sql/slave.h | 5 |
3 files changed, 52 insertions, 3 deletions
diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 5437db767a3..1294f379d2b 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -735,6 +735,8 @@ void clean_up(bool print_message) DBUG_PRINT("exit",("clean_up")); if (cleanup_done++) return; /* purecov: inspected */ + if (use_slave_mask) + bitmap_free(&slave_error_mask); acl_free(1); grant_free(); query_cache.resize(0); @@ -1801,7 +1803,7 @@ int main(int argc, char **argv) #endif select_thread=pthread_self(); select_thread_in_use=1; - if (use_temp_pool && bitmap_init(&temp_pool,1024)) + if (use_temp_pool && bitmap_init(&temp_pool,1024,1)) unireg_abort(1); /* @@ -2674,7 +2676,7 @@ enum options { OPT_SHOW_SLAVE_AUTH_INFO, OPT_OLD_RPL_COMPAT, OPT_SLAVE_LOAD_TMPDIR, OPT_NO_MIX_TYPE, OPT_RPL_RECOVERY_RANK,OPT_INIT_RPL_ROLE, - OPT_DES_KEY_FILE + OPT_DES_KEY_FILE, OPT_SLAVE_SKIP_ERRORS }; static struct option long_options[] = { @@ -2824,6 +2826,8 @@ static struct option long_options[] = { {"skip-symlink", no_argument, 0, (int) OPT_SKIP_SYMLINKS}, {"skip-thread-priority", no_argument, 0, (int) OPT_SKIP_PRIOR}, {"slave-load-tmpdir", required_argument, 0, (int) OPT_SLAVE_LOAD_TMPDIR}, + {"slave-skip-errors", required_argument, 0, + (int) OPT_SLAVE_SKIP_ERRORS}, {"socket", required_argument, 0, (int) OPT_SOCKET}, {"sql-bin-update-same", no_argument, 0, (int) OPT_SQL_BIN_UPDATE_SAME}, {"sql-mode", required_argument, 0, (int) OPT_SQL_MODE}, @@ -3586,6 +3590,9 @@ static void get_options(int argc,char **argv) case 'P': mysql_port= (unsigned int) atoi(optarg); break; + case OPT_SLAVE_SKIP_ERRORS: + init_slave_skip_errors(optarg); + break; case OPT_SAFEMALLOC_MEM_LIMIT: #if !defined(DBUG_OFF) && defined(SAFEMALLOC) safemalloc_mem_limit = atoi(optarg); diff --git a/sql/slave.cc b/sql/slave.cc index 7a603ec0827..3272344e478 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -29,6 +29,8 @@ volatile bool slave_running = 0; char* slave_load_tmpdir = 0; pthread_t slave_real_id; MASTER_INFO glob_mi; +MY_BITMAP slave_error_mask; +bool use_slave_mask = 0; HASH replicate_do_table, replicate_ignore_table; DYNAMIC_ARRAY replicate_wild_do_table, replicate_wild_ignore_table; bool do_table_inited = 0, ignore_table_inited = 0; @@ -81,6 +83,37 @@ static byte* get_table_key(TABLE_RULE_ENT* e, uint* len, } +/* called from get_options() in mysqld.cc on start-up */ +void init_slave_skip_errors(char* arg) +{ + char* p; + my_bool last_was_digit = 0; + if (bitmap_init(&slave_error_mask,MAX_SLAVE_ERROR,0)) + { + fprintf(stderr, "Badly out of memory, please check your system status\n"); + exit(1); + } + use_slave_mask = 1; + for (;isspace(*arg);++arg) + /* empty */; + if (!my_casecmp(arg,"all",3)) + { + bitmap_set_all(&slave_error_mask); + return; + } + for (p= arg ; *p; ) + { + long err_code; + if (!(p= str2int(p, 10, 0, LONG_MAX, &err_code))) + break; + if (err_code < MAX_SLAVE_ERROR) + bitmap_set_bit(&slave_error_mask,(uint)err_code); + while (!isdigit(*p) && *p) + p++; + } +} + + void init_table_rule_hash(HASH* h, bool* h_inited) { hash_init(h, TABLE_RULE_HASH_SIZE,0,0, @@ -1004,6 +1037,12 @@ point. If you are sure that your master is ok, run this query manually on the\ } } +inline int ignored_error_code(int err_code) +{ + return use_slave_mask && bitmap_is_set(&slave_error_mask, err_code); +} + + static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len) { const char *error_msg; diff --git a/sql/slave.h b/sql/slave.h index 705572bd7a8..887236b885f 100644 --- a/sql/slave.h +++ b/sql/slave.h @@ -3,8 +3,11 @@ #include "mysql.h" #define SLAVE_NET_TIMEOUT 3600 +#define MAX_SLAVE_ERROR 2000 extern ulong slave_net_timeout, master_retry_count; +extern MY_BITMAP slave_error_mask; +extern bool use_slave_mask; extern char* slave_load_tmpdir; typedef struct st_master_info @@ -104,11 +107,11 @@ int add_table_rule(HASH* h, const char* table_spec); int add_wild_table_rule(DYNAMIC_ARRAY* a, const char* table_spec); void init_table_rule_hash(HASH* h, bool* h_inited); void init_table_rule_array(DYNAMIC_ARRAY* a, bool* a_inited); +void init_slave_skip_errors(char* arg); char* rewrite_db(char* db); int check_expected_error(THD* thd, int error_code); void skip_load_data_infile(NET* net); void slave_print_error(int err_code, const char* msg, ...); - void end_slave(); // clean up int init_master_info(MASTER_INFO* mi); void end_master_info(MASTER_INFO* mi); |