summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <monty@hundin.mysql.fi>2001-12-15 05:12:21 +0200
committerunknown <monty@hundin.mysql.fi>2001-12-15 05:12:21 +0200
commit63e4dec2446382bf0331d2c483daee665064b925 (patch)
tree5b07ad850f8dba78d186135337dd5a151d18a2b8 /sql
parent6a5f89c9b190b0f26fc0cb12595126cba2659f32 (diff)
parentf8b4629cf728072b230159718994f585145b4ce2 (diff)
downloadmariadb-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.cc11
-rw-r--r--sql/slave.cc39
-rw-r--r--sql/slave.h5
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);