summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--VC++Files/winmysqladmin/main.cpp2
-rw-r--r--VC++Files/winmysqladmin/mysql.h4
-rw-r--r--VC++Files/winmysqladmin/mysql_com.h21
-rw-r--r--include/mysql_com.h4
-rw-r--r--libmysql/libmysql.c3
-rw-r--r--sql/sql_parse.cc17
6 files changed, 38 insertions, 13 deletions
diff --git a/VC++Files/winmysqladmin/main.cpp b/VC++Files/winmysqladmin/main.cpp
index 6ca29659255..dfb2004a780 100644
--- a/VC++Files/winmysqladmin/main.cpp
+++ b/VC++Files/winmysqladmin/main.cpp
@@ -1196,7 +1196,7 @@ bool __fastcall TForm1::Shutd()
if (IsConnect)
{
mysql_kill(MySQL,mysql_thread_id(MySQL));
- mysql_shutdown(MySQL);
+ mysql_shutdown(MySQL, SHUTDOWN_DEFAULT);
StatusLine->SimpleText = "";
}
diff --git a/VC++Files/winmysqladmin/mysql.h b/VC++Files/winmysqladmin/mysql.h
index e83babb8fa8..f01b55f5d3f 100644
--- a/VC++Files/winmysqladmin/mysql.h
+++ b/VC++Files/winmysqladmin/mysql.h
@@ -229,7 +229,9 @@ int STDCALL mysql_real_query(MYSQL *mysql, const char *q,
unsigned int length);
int STDCALL mysql_create_db(MYSQL *mysql, const char *DB);
int STDCALL mysql_drop_db(MYSQL *mysql, const char *DB);
-int STDCALL mysql_shutdown(MYSQL *mysql);
+int STDCALL mysql_shutdown(MYSQL *mysql,
+ enum enum_shutdown_level
+ shutdown_level);
int STDCALL mysql_dump_debug_info(MYSQL *mysql);
int STDCALL mysql_refresh(MYSQL *mysql,
unsigned int refresh_options);
diff --git a/VC++Files/winmysqladmin/mysql_com.h b/VC++Files/winmysqladmin/mysql_com.h
index 2a1471f735d..7d7d77898c3 100644
--- a/VC++Files/winmysqladmin/mysql_com.h
+++ b/VC++Files/winmysqladmin/mysql_com.h
@@ -155,6 +155,27 @@ enum enum_field_types { FIELD_TYPE_DECIMAL, FIELD_TYPE_TINY,
#define FIELD_TYPE_CHAR FIELD_TYPE_TINY /* For compability */
#define FIELD_TYPE_INTERVAL FIELD_TYPE_ENUM /* For compability */
+enum enum_shutdown_level {
+ /*
+ We want levels to be in growing order of gracefulness. So we leave room
+ for future intermediate levels. For now, escalating one level is += 10;
+ later if we insert new levels in between we will need a function
+ next_shutdown_level(level). Note that DEFAULT does not respect the
+ growing property.
+ */
+ SHUTDOWN_DEFAULT= 0, /* mapped to WAIT_ALL_BUFFERS for now */
+ /*
+ Here is the list in growing order (the next does the previous plus
+ something). WAIT_ALL_BUFFERS is what we have now. Others are "this MySQL
+ server does not support this shutdown level yet".
+ */
+ SHUTDOWN_WAIT_CRITICAL_BUFFERS= 10, /* flush MyISAM buffs (no corruption) */
+ SHUTDOWN_WAIT_ALL_BUFFERS= 20, /* flush InnoDB buffers */
+ SHUTDOWN_WAIT_STATEMENTS= 30, /* wait for existing updating stmts to finish */
+ SHUTDOWN_WAIT_TRANSACTIONS= 40, /* wait for existing trans to finish */
+ SHUTDOWN_WAIT_CONNECTIONS= 50 /* wait for existing connections to finish */
+};
+
extern unsigned long max_allowed_packet;
extern unsigned long net_buffer_length;
diff --git a/include/mysql_com.h b/include/mysql_com.h
index ef84ad4dea2..90859b467c6 100644
--- a/include/mysql_com.h
+++ b/include/mysql_com.h
@@ -231,7 +231,7 @@ enum enum_shutdown_level {
next_shutdown_level(level). Note that DEFAULT does not respect the
growing property.
*/
- SHUTDOWN_DEFAULT= 255, /* mapped to WAIT_ALL_BUFFERS for now */
+ SHUTDOWN_DEFAULT= 0, /* mapped to WAIT_ALL_BUFFERS for now */
/*
Here is the list in growing order (the next does the previous plus
something). WAIT_ALL_BUFFERS is what we have now. Others are "this MySQL
@@ -239,7 +239,7 @@ enum enum_shutdown_level {
*/
SHUTDOWN_WAIT_CRITICAL_BUFFERS= 10, /* flush MyISAM buffs (no corruption) */
SHUTDOWN_WAIT_ALL_BUFFERS= 20, /* flush InnoDB buffers */
- SHUTDOWN_WAIT_STATEMENTS= 30,
+ SHUTDOWN_WAIT_STATEMENTS= 30, /* wait for existing updating stmts to finish */
SHUTDOWN_WAIT_TRANSACTIONS= 40, /* wait for existing trans to finish */
SHUTDOWN_WAIT_CONNECTIONS= 50 /* wait for existing connections to finish */
};
diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c
index 1e8244e670b..7135488aade 100644
--- a/libmysql/libmysql.c
+++ b/libmysql/libmysql.c
@@ -1290,8 +1290,7 @@ mysql_shutdown(MYSQL *mysql, enum enum_shutdown_level shutdown_level)
uchar level[1];
level[0]= (uchar) shutdown_level;
DBUG_ENTER("mysql_shutdown");
- DBUG_RETURN(simple_command(mysql, COM_SHUTDOWN,
- &level, 1, 0));
+ DBUG_RETURN(simple_command(mysql, COM_SHUTDOWN, (char *)level, 1, 0));
}
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index b0d476c695f..cfb04c96d8d 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -1308,7 +1308,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
if (command != COM_STATISTICS && command != COM_PING)
query_id++;
thread_running++;
- /* TODO: set thd->lex->sql_command to SQLCOM_PARSE here */
+ /* TODO: set thd->lex->sql_command to SQLCOM_END here */
VOID(pthread_mutex_unlock(&LOCK_thread_count));
thd->server_status&=
@@ -1479,7 +1479,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
thd->query_length= length;
thd->query= packet;
thd->query_id= query_id++;
- /* TODO: set thd->lex->sql_command to SQLCOM_PARSE here */
+ /* TODO: set thd->lex->sql_command to SQLCOM_END here */
VOID(pthread_mutex_unlock(&LOCK_thread_count));
#ifndef EMBEDDED_LIBRARY
mysql_parse(thd, packet, length);
@@ -1637,13 +1637,15 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
statistic_increment(com_other,&LOCK_status);
if (check_global_access(thd,SHUTDOWN_ACL))
break; /* purecov: inspected */
- enum enum_shutdown_level level= (packet_length >= 2) ?
- (enum enum_shutdown_level) (uchar) packet[0] : SHUTDOWN_DEFAULT;
- DBUG_PRINT("quit",("Got shutdown command for level %u", level));
/*
- Accept old mysql_shutdown (with no argument). For now we do nothing of
- the argument.
+ If the client is < 4.1.3, it is going to send us no argument; then
+ packet_length is 1, packet[0] is the end 0 of the packet. Note that
+ SHUTDOWN_DEFAULT is 0. If client is >= 4.1.3, the shutdown level is in
+ packet[0].
*/
+ enum enum_shutdown_level level=
+ (enum enum_shutdown_level) (uchar) packet[0];
+ DBUG_PRINT("quit",("Got shutdown command for level %u", level));
if (level == SHUTDOWN_DEFAULT)
level= SHUTDOWN_WAIT_ALL_BUFFERS; // soon default will be configurable
else if (level != SHUTDOWN_WAIT_ALL_BUFFERS)
@@ -1652,6 +1654,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
send_error(thd);
break;
}
+ DBUG_PRINT("quit",("Got shutdown command for level %u", level));
mysql_log.write(thd,command,NullS);
send_eof(thd);
#ifdef __WIN__