diff options
author | unknown <sasha@mysql.sashanet.com> | 2001-10-12 09:37:25 -0600 |
---|---|---|
committer | unknown <sasha@mysql.sashanet.com> | 2001-10-12 09:37:25 -0600 |
commit | a6c58676835f9424a5167a522497f1a20a5f03ee (patch) | |
tree | d203061bcdc7881db97565091caac83f2ac56fd4 /sql | |
parent | d34950e8d2db7a28c92c5129edc63a11bba0792d (diff) | |
download | mariadb-git-a6c58676835f9424a5167a522497f1a20a5f03ee.tar.gz |
changed manager to use my_net_*
fixed bug in master - unregister slaves when they disconnect
client/mysqlmanagerc.c:
changed default port
include/mysql.h:
use my_net_*
libmysql/manager.c:
use my_net_*
mysql-test/mysql-test-run.sh:
added support for client strace
sql/sql_parse.cc:
unregister slaves on disconnect
sql/sql_repl.cc:
unregister slaves on disconnect
sql/sql_repl.h:
unregister slaves on disconnect
tools/mysqlmanager.c:
changed to use my_net_*
Diffstat (limited to 'sql')
-rw-r--r-- | sql/sql_parse.cc | 2 | ||||
-rw-r--r-- | sql/sql_repl.cc | 25 | ||||
-rw-r--r-- | sql/sql_repl.h | 2 |
3 files changed, 23 insertions, 6 deletions
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index b83a50aec16..e10214bc895 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -938,10 +938,12 @@ bool dispatch_command(enum enum_server_command command, THD *thd, pos = uint4korr(packet); flags = uint2korr(packet + 4); pthread_mutex_lock(&LOCK_server_id); + thd->server_id=0; /* avoid suicide */ kill_zombie_dump_threads(slave_server_id = uint4korr(packet+6)); thd->server_id = slave_server_id; pthread_mutex_unlock(&LOCK_server_id); mysql_binlog_send(thd, thd->strdup(packet + 10), pos, flags); + unregister_slave(thd,1,1); // fake COM_QUIT -- if we get here, the thread needs to terminate error = TRUE; net->error = 0; diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index 6123ecfea91..e05b17bedef 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -106,10 +106,25 @@ static int fake_rotate_event(NET* net, String* packet, char* log_file_name, p+= len; \ }\ +void unregister_slave(THD* thd, bool only_mine, bool need_mutex) +{ + if (need_mutex) + pthread_mutex_lock(&LOCK_slave_list); + if (thd->server_id) + { + SLAVE_INFO* old_si; + if ((old_si = (SLAVE_INFO*)hash_search(&slave_list, + (byte*)&thd->server_id, 4)) && + (!only_mine || old_si->thd == thd)) + hash_delete(&slave_list, (byte*)old_si); + } + if (need_mutex) + pthread_mutex_unlock(&LOCK_slave_list); +} int register_slave(THD* thd, uchar* packet, uint packet_length) { - SLAVE_INFO *si, *old_si; + SLAVE_INFO *si; int res = 1; uchar* p = packet, *p_end = packet + packet_length; @@ -119,18 +134,16 @@ int register_slave(THD* thd, uchar* packet, uint packet_length) if (!(si = (SLAVE_INFO*)my_malloc(sizeof(SLAVE_INFO), MYF(MY_WME)))) goto err; - si->server_id = uint4korr(p); + thd->server_id = si->server_id = uint4korr(p); p += 4; get_object(p,si->host); get_object(p,si->user); get_object(p,si->password); si->port = uint2korr(p); + si->thd = thd; pthread_mutex_lock(&LOCK_slave_list); - if ((old_si = (SLAVE_INFO*)hash_search(&slave_list, - (byte*)&si->server_id, 4))) - hash_delete(&slave_list, (byte*)old_si); - + unregister_slave(thd,0,0); res = hash_insert(&slave_list, (byte*) si); pthread_mutex_unlock(&LOCK_slave_list); return res; diff --git a/sql/sql_repl.h b/sql/sql_repl.h index 3445cd67b42..d6fafd31f21 100644 --- a/sql/sql_repl.h +++ b/sql/sql_repl.h @@ -10,6 +10,7 @@ typedef struct st_slave_info char user[USERNAME_LENGTH+1]; char password[HASH_PASSWORD_LENGTH+1]; uint16 port; + THD* thd; } SLAVE_INFO; extern bool opt_show_slave_auth_info, opt_old_rpl_compat; @@ -44,6 +45,7 @@ void reset_master(); void init_slave_list(); void end_slave_list(); int register_slave(THD* thd, uchar* packet, uint packet_length); +void unregister_slave(THD* thd, bool only_mine, bool need_mutex); int purge_master_logs(THD* thd, const char* to_log); bool log_in_use(const char* log_name); void adjust_linfo_offsets(my_off_t purge_offset); |