Commit ceb1f65b authored by unknown's avatar unknown

API change: mysql_shutdown() now requires a 2nd argument, the shutdown level.

mysqld >=4.1.3 will however understand shutdown requests sent by clients <4.1.3.
And mysqld <4.1.3 will understand shutdown requests sent by clients >=4.1.3
(it will ignore the level). Those shutdown level are just PLACEHOLDERS now.
So this change is just to make the 4.1 API suitable before it is frozen. Later
we will actually implement the shutdown levels.


VC++Files/winmysqladmin/main.cpp:
  2nd argument to mysql_shutdown()
VC++Files/winmysqladmin/mysql.h:
  2nd argument to mysql_shutdown()
VC++Files/winmysqladmin/mysql_com.h:
  Several types of shutdown now.
include/mysql_com.h:
  SHUTDOWN_DEFAULT is now 0 instead of 255, this saves one test in sql_parse.cc
libmysql/libmysql.c:
  correcting mistake (how come that my tests still all worked with this? - should recheck, for curiosity).
sql/sql_parse.cc:
  with SHUTDOWN_DEFAULT==0, no need for testing packet_length.
parent e1d65bf9
......@@ -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 = "";
}
......
......@@ -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);
......
......@@ -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;
......
......@@ -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 */
};
......
......@@ -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));
}
......
......@@ -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__
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment