summaryrefslogtreecommitdiff
path: root/sql/mini_client.cc
diff options
context:
space:
mode:
authorunknown <monty@hundin.mysql.fi>2002-08-21 22:04:22 +0300
committerunknown <monty@hundin.mysql.fi>2002-08-21 22:04:22 +0300
commit87f9ad3724a8644de4ba10f6247fe194a3d08457 (patch)
tree75f29bea26c7fd21a45f22fd906c7a1545aaee91 /sql/mini_client.cc
parent457172d99256e68a93ab69eecbef23a3db7ef1c4 (diff)
downloadmariadb-git-87f9ad3724a8644de4ba10f6247fe194a3d08457.tar.gz
Use our version of RWLOCKS on UNIXWARE 7
More DBUG info for replication Better error messages from replication Fixed bug in replication code when connecting to 'localhost' (time was not released properly) Block ALARM signal on Linux for signal handler thread (Fixes problem with running mysqld with --debug) Removed warning when setting an AUTO_INCREMENT field to NULL Build-tools/Do-compile: Always run test with --warnings during build Docs/manual.texi: Changelog configure.in: Use our version of RWLOCKS on UNIXWARE 7 include/my_pthread.h: Use our version of RWLOCKS on UNIXWARE 7 include/mysql_version.h.in: Fixed warning when compiling embedded server include/mysqld_error.h: New error messages libmysql/libmysql.c: Give connect error message on reconnect if it fails. Fixed possible buffer overflow in expand_error() Added error messages for some error conditions. mysql-test/mysql-test-run.sh: Portability fixes: - Search after 'time' in path. - Search after mysqld in libexec - Remove end / when doing rm -r (fix for BSD) Clean up skip_test handling. mysql-test/r/rpl_empty_master_crash.result: New results mysql-test/t/rpl_empty_master_crash.test: Extended test mysys/mf_iocache.c: Remember file position on failed read. mysys/mf_iocache2.c: Fixed bug in filelength() call. mysys/thr_alarm.c: Made alarm handling more threadsafe when use with DBUG. mysys/thr_mutex.c: More debug info sql/log_event.cc: More DBUG_PRINT statements. sql/mini_client.cc: Better error reporting on failures. Return connect error on reconnect failure (instead of SERVER_GONE_ERROR) Fixed critical bug in alarm handling on connect (could leave an alarm event on indefinitely) sql/mysql_priv.h: Fixed arguments to mysql_binlog_send() sql/mysqld.cc: Block ALARM signal on Linux for signal handler thread (Fixes problem with running mysqld with --debug) sql/net_pkg.cc: Removed dead code sql/net_serv.cc: Ensure that last_errno is set in net_real_write() sql/repl_failsafe.cc: Code cleanup. Better error handling. sql/share/czech/errmsg.txt: New error messages. sql/share/danish/errmsg.txt: New error messages. sql/share/dutch/errmsg.txt: New error messages. sql/share/english/errmsg.txt: New error messages. sql/share/estonian/errmsg.txt: New error messages. sql/share/french/errmsg.txt: New error messages. sql/share/german/errmsg.txt: New error messages. sql/share/greek/errmsg.txt: New error messages. sql/share/hungarian/errmsg.txt: New error messages. sql/share/italian/errmsg.txt: New error messages. sql/share/japanese/errmsg.txt: New error messages. sql/share/korean/errmsg.txt: New error messages. sql/share/norwegian-ny/errmsg.txt: New error messages. sql/share/norwegian/errmsg.txt: New error messages. sql/share/polish/errmsg.txt: New error messages. sql/share/portuguese/errmsg.txt: New error messages. mysql-test/r/rpl_log_pos.result: Updated results mysql-test/t/rpl_log_pos.test: Added 'sleep' commands to make tests repeatable. sql/share/romanian/errmsg.txt: New error messages. sql/share/russian/errmsg.txt: New error messages. sql/share/slovak/errmsg.txt: New error messages. sql/share/spanish/errmsg.txt: New error messages. sql/share/swedish/errmsg.txt: New error messages. sql/share/ukrainian/errmsg.txt: New error messages. sql/slave.cc: Code optimization and cleanup. More DBUG statements. Better cleanup if start slave fails. Better error messages from 'fetch_master_table' Thread safer handling of 'wait_for_pos' sql/slave.h: Better handling of wait_for_pos sql/sql_load.cc: Removed warning when setting an AUTO_INCREMENT field to NULL sql/sql_parse.cc: Fixed calling of function that has changed. sql/sql_repl.cc: More DBUG statements Give a proper error number from mysql_binlog_send() so that we know when we have to abort slaves.
Diffstat (limited to 'sql/mini_client.cc')
-rw-r--r--sql/mini_client.cc55
1 files changed, 32 insertions, 23 deletions
diff --git a/sql/mini_client.cc b/sql/mini_client.cc
index cf5747b8160..e1a209ec0ec 100644
--- a/sql/mini_client.cc
+++ b/sql/mini_client.cc
@@ -407,20 +407,23 @@ my_bool mc_mysql_reconnect(MYSQL *mysql)
DBUG_ENTER("mc_mysql_reconnect");
if (!mysql->reconnect)
+ {
+ mysql->net.last_errno=CR_SERVER_GONE_ERROR;
+ strmov(mysql->net.last_error, ER(mysql->net.last_errno));
DBUG_RETURN(1);
-
+ }
mc_mysql_init(&tmp_mysql);
tmp_mysql.options=mysql->options;
if (!mc_mysql_connect(&tmp_mysql,mysql->host,mysql->user,mysql->passwd,
mysql->db, mysql->port, mysql->unix_socket,
mysql->client_flag, mysql->net.read_timeout))
- {
- tmp_mysql.reconnect=0;
- mc_mysql_close(&tmp_mysql);
- mysql->net.last_errno=CR_SERVER_GONE_ERROR;
- strmov(mysql->net.last_error,ER(mysql->net.last_errno));
- DBUG_RETURN(1);
- }
+ {
+#ifdef NOT_USED
+ mysql->net.last_errno=CR_RECONNECT_FAILED;
+ strmov(mysql->net.last_error, ER(mysql->net.last_errno));
+#endif
+ DBUG_RETURN(1);
+ }
tmp_mysql.free_me=mysql->free_me;
mysql->free_me=0;
bzero((char*) &mysql->options,sizeof(&mysql->options));
@@ -443,11 +446,7 @@ mc_simple_command(MYSQL *mysql,enum enum_server_command command,
if (mysql->net.vio == 0)
{ /* Do reconnect if possible */
if (mc_mysql_reconnect(mysql))
- {
- net->last_errno=CR_SERVER_GONE_ERROR;
- strmov(net->last_error,ER(net->last_errno));
goto end;
- }
}
if (mysql->status != MYSQL_STATUS_READY)
{
@@ -468,8 +467,9 @@ mc_simple_command(MYSQL *mysql,enum enum_server_command command,
{
DBUG_PRINT("error",("Can't send command to server. Error: %d",socket_errno));
mc_end_server(mysql);
- if (mc_mysql_reconnect(mysql) ||
- net_write_command(net,(uchar) command,arg,
+ if (mc_mysql_reconnect(mysql))
+ goto end;
+ if (net_write_command(net,(uchar) command,arg,
length ? length :(uint) strlen(arg)))
{
net->last_errno=CR_SERVER_GONE_ERROR;
@@ -515,8 +515,6 @@ mc_mysql_connect(MYSQL *mysql,const char *host, const char *user,
user ? user : "(Null)",
net_read_timeout,
(uint) slave_net_timeout));
- thr_alarm_init(&alarmed);
- thr_alarm(&alarmed, net_read_timeout, &alarm_buff);
net->vio = 0; /* If something goes wrong */
mysql->charset=default_charset_info; /* Set character set */
@@ -527,6 +525,8 @@ mc_mysql_connect(MYSQL *mysql,const char *host, const char *user,
mysql->reconnect=1; /* Reconnect as default */
mysql->server_status=SERVER_STATUS_AUTOCOMMIT;
+ if (!mysql->options.connect_timeout)
+ mysql->options.connect_timeout= net_read_timeout;
/*
** Grab a socket and connect it to the server
@@ -598,7 +598,11 @@ mc_mysql_connect(MYSQL *mysql,const char *host, const char *user,
host=LOCAL_HOST;
sprintf(host_info=buff,ER(CR_TCP_CONNECTION),host);
DBUG_PRINT("info",("Server name: '%s'. TCP sock: %d", host,port));
- if ((sock = (my_socket) socket(AF_INET,SOCK_STREAM,0)) == SOCKET_ERROR)
+ thr_alarm_init(&alarmed);
+ thr_alarm(&alarmed, net_read_timeout, &alarm_buff);
+ sock = (my_socket) socket(AF_INET,SOCK_STREAM,0);
+ thr_end_alarm(&alarmed);
+ if (sock == SOCKET_ERROR)
{
net->last_errno=CR_IPSOCK_ERROR;
sprintf(net->last_error,ER(net->last_errno),socket_errno);
@@ -641,12 +645,8 @@ mc_mysql_connect(MYSQL *mysql,const char *host, const char *user,
socket_errno,host));
net->last_errno= CR_CONN_HOST_ERROR;
sprintf(net->last_error ,ER(CR_CONN_HOST_ERROR), host, socket_errno);
- if (thr_alarm_in_use(&alarmed))
- thr_end_alarm(&alarmed);
goto error;
}
- if (thr_alarm_in_use(&alarmed))
- thr_end_alarm(&alarmed);
}
if (!net->vio || my_net_init(net, net->vio))
@@ -778,7 +778,11 @@ mc_mysql_connect(MYSQL *mysql,const char *host, const char *user,
if (client_flag & CLIENT_SSL)
{
if (my_net_write(net,buff,(uint) (2)) || net_flush(net))
+ {
+ net->last_errno= CR_SERVER_LOST;
+ strmov(net->last_error,ER(net->last_errno));
goto error;
+ }
/* Do the SSL layering. */
DBUG_PRINT("info", ("IO layer change in progress..."));
DBUG_PRINT("info", ("IO context %p",((struct st_VioSSLConnectorFd*)mysql->connector_fd)->ssl_context_));
@@ -808,8 +812,13 @@ mc_mysql_connect(MYSQL *mysql,const char *host, const char *user,
mysql->db=my_strdup(db,MYF(MY_WME));
db=0;
}
- if (my_net_write(net,buff,(ulong) (end-buff)) || net_flush(net) ||
- mc_net_safe_read(mysql) == packet_error)
+ if (my_net_write(net,buff,(ulong) (end-buff)) || net_flush(net))
+ {
+ net->last_errno= CR_SERVER_LOST;
+ strmov(net->last_error,ER(net->last_errno));
+ goto error;
+ }
+ if (mc_net_safe_read(mysql) == packet_error)
goto error;
if (client_flag & CLIENT_COMPRESS) /* We will use compression */
net->compress=1;