mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
Added nety_retry_count as a changeable variable
Make safe_mysqld a symlink to mysqld_safe in binary distribution Fixed problem with CTRL-C when using mysqld --bootstrap Docs/manual.texi: Added nety_retry_count as a changeable variables include/mysql_com.h: Added nety_retry_count as a changeable variables libmysql/libmysql.c: Added nety_retry_count as a changeable variables mysql-test/r/olap.result: Fixed wrong error message mysql-test/r/variables.result: Update for freebsd mysql-test/t/variables.test: Update for freebsd scripts/make_binary_distribution.sh: Make safe_mysqld a symlink to mysqld_safe in binary distribution. sql/item_func.cc: Cleaned up tmp_table_field() handling. sql/item_func.h: Cleaned up tmp_table_field() handling. sql/item_strfunc.h: Cleaned up tmp_table_field() handling. sql/item_timefunc.h: Cleaned up tmp_table_field() handling. sql/mysql_priv.h: Added nety_retry_count as a changeable variables sql/mysqld.cc: Added nety_retry_count as a changeable variables Allow one to specify a defaults file to be read when installing MySQL as a service. sql/net_pkg.cc: Added nety_retry_count as a changeable variables sql/net_serv.cc: Added nety_retry_count as a changeable variables sql/set_var.cc: Added nety_retry_count as a changeable variables sql/share/czech/errmsg.txt: Fixed wrong error message sql/share/danish/errmsg.txt: Fixed wrong error message sql/share/english/errmsg.txt: Fixed wrong error message sql/share/estonian/errmsg.txt: Fixed wrong error message sql/share/french/errmsg.txt: Fixed wrong error message sql/share/german/errmsg.txt: Fixed wrong error message sql/share/greek/errmsg.txt: Fixed wrong error message sql/share/hungarian/errmsg.txt: Fixed wrong error message sql/share/italian/errmsg.txt: Fixed wrong error message sql/share/japanese/errmsg.txt: Fixed wrong error message sql/share/korean/errmsg.txt: Fixed wrong error message sql/share/norwegian-ny/errmsg.txt: Fixed wrong error message sql/share/norwegian/errmsg.txt: Fixed wrong error message sql/share/polish/errmsg.txt: Fixed wrong error message sql/share/portuguese/errmsg.txt: Fixed wrong error message sql/share/romanian/errmsg.txt: Fixed wrong error message sql/share/russian/errmsg.txt: Fixed wrong error message sql/share/slovak/errmsg.txt: Fixed wrong error message sql/share/spanish/errmsg.txt: Fixed wrong error message sql/share/swedish/errmsg.txt: Fixed wrong error message sql/share/ukrainian/errmsg.txt: Fixed wrong error message sql/sql_class.cc: Indentaion cleanup sql/sql_class.h: Fixed wrong error message sql/sql_parse.cc: Fixed problem with CTRL-C when using mysqld --bootstrap sql/sql_select.cc: Ensure that select terminates if create_myisam_from_heap() fails. sql/sql_yacc.yy: Portability fix
This commit is contained in:
@ -8220,7 +8220,9 @@ In 3.23, @code{INSERT INTO ... SELECT} always had @code{IGNORE} enabled.
|
||||
In 4.0.1, MySQL will stop (and possibly roll back) in case of an error if you
|
||||
don't specify @code{IGNORE}.
|
||||
@item
|
||||
@file{safe_mysqld} is renamed to @file{mysqld_safe}.
|
||||
@file{safe_mysqld} is renamed to @file{mysqld_safe}. For some time we
|
||||
will in our binary distributions include @code{safe_mysqld} as a symlink to
|
||||
@code{mysqld_safe}.
|
||||
@item
|
||||
The old C API functions @code{mysql_drop_db}, @code{mysql_create_db}, and
|
||||
@code{mysql_connect} are not supported anymore, unless you compile
|
||||
@ -28663,6 +28665,7 @@ and if you can use @code{GLOBAL} or @code{SESSION} with them.
|
||||
@item myisam_sort_buffer_size @tab num @tab GLOBAL | SESSION
|
||||
@item net_buffer_length @tab num @tab GLOBAL | SESSION
|
||||
@item net_read_timeout @tab num @tab GLOBAL | SESSION
|
||||
@item net_retry_count @tab num @tab GLOBAL | SESSION
|
||||
@item net_write_timeout @tab num @tab GLOBAL | SESSION
|
||||
@item query_cache_limit @tab num @tab GLOBAL
|
||||
@item query_cache_size @tab num @tab GLOBAL
|
||||
@ -50222,6 +50225,8 @@ each individual 4.0.x release.
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
Made @code{safe_mysqld} a symlink to @code{mysqld_safe} in binary distribution.
|
||||
@item
|
||||
mysqld now has the option @code{--temp-pool} enabled by default as this
|
||||
gives better performance with some OS.
|
||||
@item
|
||||
|
@ -116,7 +116,7 @@ typedef struct st_net {
|
||||
my_socket fd; /* For Perl DBI/dbd */
|
||||
unsigned long max_packet,max_packet_size;
|
||||
unsigned int last_errno,pkt_nr,compress_pkt_nr;
|
||||
unsigned int write_timeout,read_timeout;
|
||||
unsigned int write_timeout, read_timeout, retry_count;
|
||||
int fcntl;
|
||||
char last_error[MYSQL_ERRMSG_SIZE];
|
||||
unsigned char error;
|
||||
|
@ -2902,6 +2902,7 @@ void my_net_local_init(NET *net)
|
||||
net->max_packet= (uint) net_buffer_length;
|
||||
net->read_timeout= (uint) net_read_timeout;
|
||||
net->write_timeout=(uint) net_write_timeout;
|
||||
net->retry_count= 1;
|
||||
net->max_packet_size= max(net_buffer_length, max_allowed_packet);
|
||||
}
|
||||
|
||||
|
@ -15,13 +15,13 @@ insert into sales values ( 'Computer', 'India',2000, 1200),
|
||||
( 'Computer', 'United States', 2000,1500),
|
||||
( 'Calculator', 'United States', 2000,75);
|
||||
select product, country , year, sum(profit) from sales group by product, country, year with cube;
|
||||
This version of MySQL doesn't yet support 'CUBE',
|
||||
This version of MySQL doesn't yet support 'CUBE'
|
||||
explain select product, country , year, sum(profit) from sales group by product, country, year with cube;
|
||||
This version of MySQL doesn't yet support 'CUBE',
|
||||
This version of MySQL doesn't yet support 'CUBE'
|
||||
select product, country , year, sum(profit) from sales group by product, country, year with rollup;
|
||||
This version of MySQL doesn't yet support 'ROLLUP',
|
||||
This version of MySQL doesn't yet support 'ROLLUP'
|
||||
explain select product, country , year, sum(profit) from sales group by product, country, year with rollup;
|
||||
This version of MySQL doesn't yet support 'ROLLUP',
|
||||
This version of MySQL doesn't yet support 'ROLLUP'
|
||||
select product, country , year, sum(profit) from sales group by product, country, year with cube union all select product, country , year, sum(profit) from sales group by product, country, year with rollup;
|
||||
This version of MySQL doesn't yet support 'CUBE',
|
||||
This version of MySQL doesn't yet support 'CUBE'
|
||||
drop table sales;
|
||||
|
@ -120,6 +120,7 @@ set myisam_max_sort_file_size=default;
|
||||
show variables like 'myisam_max_sort_file_size';
|
||||
Variable_name Value
|
||||
myisam_max_sort_file_size 20000
|
||||
set global net_retry_count=10, session net_retry_count=10;
|
||||
set global net_buffer_length=1024, net_write_timeout=200, net_read_timeout=300;
|
||||
set session net_buffer_length=2048, net_write_timeout=500, net_read_timeout=600;
|
||||
show global variables like 'net_%';
|
||||
|
@ -73,6 +73,7 @@ show global variables like 'myisam_max_sort_file_size';
|
||||
set myisam_max_sort_file_size=default;
|
||||
show variables like 'myisam_max_sort_file_size';
|
||||
|
||||
set global net_retry_count=10, session net_retry_count=10;
|
||||
set global net_buffer_length=1024, net_write_timeout=200, net_read_timeout=300;
|
||||
set session net_buffer_length=2048, net_write_timeout=500, net_read_timeout=600;
|
||||
show global variables like 'net_%';
|
||||
|
@ -123,6 +123,10 @@ $BASE/bin/replace \@localstatedir\@ ./data \@bindir\@ ./bin \@scriptdir\@ ./bin
|
||||
$BASE/bin/replace \@prefix\@ /usr/local/mysql \@bindir\@ ./bin \@MYSQLD_USER\@ root \@localstatedir\@ /usr/local/mysql/data < $SOURCE/support-files/mysql.server.sh > $BASE/support-files/mysql.server
|
||||
$BASE/bin/replace /my/gnu/bin/hostname /bin/hostname -- $BASE/bin/mysqld_safe
|
||||
|
||||
# Make safe_mysqld a symlink to mysqld_safe for backwards portability
|
||||
# To be removed in MySQL 4.1
|
||||
(cd $BASE/bin ; ln -s mysqld_safe safe_mysqld )
|
||||
|
||||
mv $BASE/support-files/binary-configure $BASE/configure
|
||||
chmod a+x $BASE/bin/* $BASE/scripts/* $BASE/support-files/mysql-* $BASE/configure
|
||||
$CP -r sql-bench/* $BASE/sql-bench
|
||||
|
@ -166,6 +166,36 @@ bool Item_func::eq(const Item *item, bool binary_cmp) const
|
||||
}
|
||||
|
||||
|
||||
Field *Item_func::tmp_table_field(TABLE *t_arg)
|
||||
{
|
||||
Field *res;
|
||||
LINT_INIT(res);
|
||||
|
||||
if (!t_arg)
|
||||
return result_field;
|
||||
switch (args[0]->result_type()) {
|
||||
case INT_RESULT:
|
||||
if (max_length > 11)
|
||||
res= new Field_longlong(max_length, maybe_null, name, t_arg,
|
||||
unsigned_flag);
|
||||
else
|
||||
res= new Field_long(max_length, maybe_null, name, t_arg,
|
||||
unsigned_flag);
|
||||
break;
|
||||
case REAL_RESULT:
|
||||
res= new Field_double(max_length, maybe_null, name, t_arg, decimals);
|
||||
break;
|
||||
case STRING_RESULT:
|
||||
if (max_length > 255)
|
||||
res= new Field_blob(max_length, maybe_null, name, t_arg, binary);
|
||||
else
|
||||
res= new Field_string(max_length, maybe_null, name, t_arg, binary);
|
||||
break;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
String *Item_real_func::val_str(String *str)
|
||||
{
|
||||
double nr=val();
|
||||
|
@ -122,6 +122,7 @@ public:
|
||||
bool is_null() { (void) val_int(); return null_value; }
|
||||
friend class udf_handler;
|
||||
unsigned int size_of() { return sizeof(*this);}
|
||||
Field *tmp_table_field(TABLE *t_arg);
|
||||
};
|
||||
|
||||
|
||||
@ -136,14 +137,10 @@ public:
|
||||
longlong val_int() { return (longlong) val(); }
|
||||
enum Item_result result_type () const { return REAL_RESULT; }
|
||||
void fix_length_and_dec() { decimals=NOT_FIXED_DEC; max_length=float_length(decimals); }
|
||||
Field *tmp_table_field(TABLE *t_arg)
|
||||
{
|
||||
if (!t_arg) return result_field;
|
||||
return new Field_double(max_length, maybe_null, name,t_arg,decimals);
|
||||
}
|
||||
unsigned int size_of() { return sizeof(*this);}
|
||||
};
|
||||
|
||||
|
||||
class Item_num_func :public Item_func
|
||||
{
|
||||
protected:
|
||||
@ -172,24 +169,6 @@ class Item_num_op :public Item_func
|
||||
void fix_length_and_dec() { fix_num_length_and_dec(); find_num_type(); }
|
||||
void find_num_type(void);
|
||||
bool is_null() { (void) val(); return null_value; }
|
||||
Field *tmp_table_field(TABLE *t_arg)
|
||||
{
|
||||
Field *res;
|
||||
if (!t_arg)
|
||||
return result_field;
|
||||
if (args[0]->result_type() == INT_RESULT)
|
||||
{
|
||||
if (max_length > 11)
|
||||
res= new Field_longlong(max_length, maybe_null, name, t_arg,
|
||||
unsigned_flag);
|
||||
else
|
||||
res= new Field_long(max_length, maybe_null, name, t_arg,
|
||||
unsigned_flag);
|
||||
}
|
||||
else
|
||||
res= new Field_double(max_length, maybe_null, name, t_arg, decimals);
|
||||
return res;
|
||||
}
|
||||
unsigned int size_of() { return sizeof(*this);}
|
||||
};
|
||||
|
||||
@ -206,18 +185,9 @@ public:
|
||||
String *val_str(String*str);
|
||||
enum Item_result result_type () const { return INT_RESULT; }
|
||||
void fix_length_and_dec() {}
|
||||
Field *tmp_table_field(TABLE *t_arg)
|
||||
{
|
||||
if (!t_arg)
|
||||
return result_field;
|
||||
return ((max_length > 11) ?
|
||||
(Field *)new Field_longlong(max_length, maybe_null, name, t_arg,
|
||||
unsigned_flag) :
|
||||
(Field *)new Field_long(max_length, maybe_null, name, t_arg,
|
||||
unsigned_flag));
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class Item_func_signed :public Item_int_func
|
||||
{
|
||||
public:
|
||||
@ -228,6 +198,7 @@ public:
|
||||
{ max_length=args[0]->max_length; unsigned_flag=0; }
|
||||
};
|
||||
|
||||
|
||||
class Item_func_unsigned :public Item_int_func
|
||||
{
|
||||
public:
|
||||
|
@ -35,16 +35,6 @@ public:
|
||||
double val();
|
||||
enum Item_result result_type () const { return STRING_RESULT; }
|
||||
void left_right_max_length();
|
||||
Field *tmp_table_field(TABLE *t_arg)
|
||||
{
|
||||
if (!t_arg)
|
||||
return result_field;
|
||||
return ((max_length > 255) ?
|
||||
(Field *) new Field_blob(max_length, maybe_null, name, t_arg,
|
||||
binary) :
|
||||
(Field *) new Field_string(max_length, maybe_null, name, t_arg,
|
||||
binary));
|
||||
}
|
||||
unsigned int size_of() { return sizeof(*this);}
|
||||
};
|
||||
|
||||
@ -60,6 +50,7 @@ public:
|
||||
unsigned int size_of() { return sizeof(*this);}
|
||||
};
|
||||
|
||||
|
||||
class Item_func_sha :public Item_str_func
|
||||
{
|
||||
public:
|
||||
|
@ -71,13 +71,9 @@ public:
|
||||
const char *func_name() const { return "month"; }
|
||||
enum Item_result result_type () const { return INT_RESULT; }
|
||||
void fix_length_and_dec() { decimals=0; max_length=2; maybe_null=1; }
|
||||
Field *tmp_table_field(TABLE *t_arg)
|
||||
{
|
||||
if (!t_arg) return result_field;
|
||||
return (Field *) new Field_string(max_length,maybe_null, name,t_arg, binary);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class Item_func_monthname :public Item_func_month
|
||||
{
|
||||
public:
|
||||
|
@ -622,7 +622,7 @@ extern ulong ha_read_count, ha_write_count, ha_delete_count, ha_update_count;
|
||||
extern ulong ha_read_key_count, ha_read_next_count, ha_read_prev_count;
|
||||
extern ulong ha_read_first_count, ha_read_last_count;
|
||||
extern ulong ha_read_rnd_count, ha_read_rnd_next_count;
|
||||
extern ulong ha_commit_count, ha_rollback_count, mysqld_net_retry_count;
|
||||
extern ulong ha_commit_count, ha_rollback_count;
|
||||
extern ulong keybuff_size,table_cache_size;
|
||||
extern ulong max_connections,max_connect_errors, connect_timeout;
|
||||
extern ulong max_insert_delayed_threads, max_user_connections;
|
||||
|
127
sql/mysqld.cc
127
sql/mysqld.cc
@ -184,7 +184,9 @@ static uint handler_count;
|
||||
static bool opt_enable_named_pipe = 0;
|
||||
#endif
|
||||
#ifdef __WIN__
|
||||
static bool opt_console=0,start_mode=0;
|
||||
static bool opt_console=0, start_mode=0, use_opt_args;
|
||||
static int opt_argc;
|
||||
static char **opt_argv;
|
||||
#endif
|
||||
|
||||
/* Set prefix for windows binary */
|
||||
@ -316,7 +318,7 @@ struct system_variables max_system_variables;
|
||||
ulong keybuff_size,table_cache_size,
|
||||
thread_stack,
|
||||
thread_stack_min,what_to_log= ~ (1L << (uint) COM_TIME),
|
||||
query_buff_size, mysqld_net_retry_count,
|
||||
query_buff_size,
|
||||
slow_launch_time = 2L,
|
||||
slave_open_temp_tables=0,
|
||||
open_files_limit=0, max_binlog_size;
|
||||
@ -1151,7 +1153,7 @@ sig_handler end_thread_signal(int sig __attribute__((unused)))
|
||||
{
|
||||
THD *thd=current_thd;
|
||||
DBUG_ENTER("end_thread_signal");
|
||||
if (thd)
|
||||
if (thd && ! thd->bootstrap)
|
||||
end_thread(thd,0);
|
||||
DBUG_VOID_RETURN; /* purecov: deadcode */
|
||||
}
|
||||
@ -2218,10 +2220,52 @@ The server will not act as a slave.");
|
||||
#if defined(__WIN__) && !defined(EMBEDDED_LIBRARY)
|
||||
int mysql_service(void *p)
|
||||
{
|
||||
win_main(Service.my_argc, Service.my_argv);
|
||||
if (use_opt_args)
|
||||
win_main(opt_argc, opt_argv);
|
||||
else
|
||||
win_main(Service.my_argc, Service.my_argv);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
Handle basic handling of services, like installation and removal
|
||||
|
||||
SYNOPSIS
|
||||
default_service_handling()
|
||||
argv Pointer to argument list
|
||||
servicename Internal name of service
|
||||
displayname Display name of service (in taskbar ?)
|
||||
file_path Path to this program
|
||||
|
||||
RETURN VALUES
|
||||
0 option handled
|
||||
1 Could not handle option
|
||||
*/
|
||||
|
||||
bool default_service_handling(char **argv,
|
||||
const char *servicename,
|
||||
const char *displayname,
|
||||
const char *file_path)
|
||||
{
|
||||
if (Service.got_service_option(argv, "install"))
|
||||
{
|
||||
Service.Install(1, servicename, displayname, file_path);
|
||||
return 0;
|
||||
}
|
||||
if (Service.got_service_option(argv, "install-manual"))
|
||||
{
|
||||
Service.Install(0, servicename, displayname, file_path);
|
||||
return 0;
|
||||
}
|
||||
if (Service.got_service_option(argv, "remove"))
|
||||
{
|
||||
Service.Remove(servicename);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
if (Service.GetOS()) /* true NT family */
|
||||
@ -2232,52 +2276,51 @@ int main(int argc, char **argv)
|
||||
|
||||
if (argc == 2)
|
||||
{
|
||||
if (Service.got_service_option(argv, "install"))
|
||||
{
|
||||
Service.Install(1, MYSQL_SERVICENAME, MYSQL_SERVICENAME, file_path);
|
||||
return 0;
|
||||
}
|
||||
else if (Service.got_service_option(argv, "install-manual"))
|
||||
{
|
||||
Service.Install(0, MYSQL_SERVICENAME, MYSQL_SERVICENAME, file_path);
|
||||
return 0;
|
||||
}
|
||||
else if (Service.got_service_option(argv, "remove"))
|
||||
{
|
||||
Service.Remove(MYSQL_SERVICENAME);
|
||||
return 0;
|
||||
}
|
||||
else if (Service.IsService(argv[1]))
|
||||
if (!default_service_handling(argv,MYSQL_SERVICENAME, MYSQL_SERVICENAME,
|
||||
file_path))
|
||||
return 0;
|
||||
if (Service.IsService(argv[1]))
|
||||
{
|
||||
/* start an optional service */
|
||||
load_default_groups[0]= argv[1];
|
||||
event_name= argv[1];
|
||||
event_name = load_default_groups[0]= argv[1];
|
||||
start_mode= 1;
|
||||
Service.Init(event_name, mysql_service );
|
||||
Service.Init(event_name, mysql_service);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if (argc == 3) /* install or remove any optional service */
|
||||
{
|
||||
/* Add service name after filename */
|
||||
uint length=strlen(file_path);
|
||||
file_path[sizeof(file_path)-1]=0;
|
||||
strxnmov(file_path + length, sizeof(file_path)-2, " ", argv[2], NullS);
|
||||
if (Service.got_service_option(argv, "install"))
|
||||
strxnmov(file_path + length, sizeof(file_path)-length-2, " ",
|
||||
argv[2], NullS)= '\0';
|
||||
|
||||
if (!default_service_handling(argv, argv[2], argv[2], file_path))
|
||||
return 0;
|
||||
if (Service.IsService(argv[2]))
|
||||
{
|
||||
Service.Install(1, argv[2], argv[2], file_path);
|
||||
return 0;
|
||||
}
|
||||
else if (Service.got_service_option(argv, "install-manual"))
|
||||
{
|
||||
Service.Install(0, argv[2], argv[2], file_path);
|
||||
return 0;
|
||||
}
|
||||
else if (Service.got_service_option(argv, "remove"))
|
||||
{
|
||||
Service.Remove(argv[2]);
|
||||
return 0;
|
||||
/* start an optional service */
|
||||
use_opt_args=1;
|
||||
opt_argc=argc;
|
||||
opt_argv=argv;
|
||||
event_name= argv[2];
|
||||
start_mode= 1;
|
||||
Service.Init(event_name, mysql_service);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if (argc == 4)
|
||||
{
|
||||
/*
|
||||
Install an optional service with optional config file
|
||||
mysqld --install-manual mysqldopt --defaults-file=c:\miguel\my.ini
|
||||
*/
|
||||
uint length=strlen(file_path);
|
||||
strxnmov(file_path + length, sizeof(file_path)-length-2, " ",
|
||||
argv[3], " ", argv[2], NullS)= '\0';
|
||||
if (!default_service_handling(argv, argv[2], argv[2], file_path))
|
||||
return 0;
|
||||
}
|
||||
else if (argc == 1 && Service.IsService(MYSQL_SERVICENAME))
|
||||
{
|
||||
/* start the default service */
|
||||
@ -2305,6 +2348,7 @@ static int bootstrap(FILE *file)
|
||||
{
|
||||
THD *thd= new THD;
|
||||
int error;
|
||||
DBUG_ENTER("bootstrap");
|
||||
|
||||
thd->bootstrap=1;
|
||||
thd->client_capabilities=0;
|
||||
@ -2319,7 +2363,7 @@ static int bootstrap(FILE *file)
|
||||
(void*) thd))
|
||||
{
|
||||
sql_print_error("Warning: Can't create thread to handle bootstrap");
|
||||
return -1;
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
/* Wait for thread to die */
|
||||
(void) pthread_mutex_lock(&LOCK_thread_count);
|
||||
@ -2333,7 +2377,7 @@ static int bootstrap(FILE *file)
|
||||
net_end(&thd->net);
|
||||
thd->cleanup();
|
||||
delete thd;
|
||||
return error;
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
|
||||
static bool read_init_file(char *file_name)
|
||||
@ -3511,7 +3555,8 @@ struct my_option my_long_options[] =
|
||||
REQUIRED_ARG, 16384, 1024, 1024*1024L, 0, 1024, 0},
|
||||
{"net_retry_count", OPT_NET_RETRY_COUNT,
|
||||
"If a read on a communication port is interrupted, retry this many times before giving up.",
|
||||
(gptr*) &mysqld_net_retry_count, (gptr*) &mysqld_net_retry_count, 0,
|
||||
(gptr*) &global_system_variables.net_retry_count,
|
||||
(gptr*) &max_system_variables.net_retry_count,0,
|
||||
GET_ULONG, REQUIRED_ARG, MYSQLD_NET_RETRY_COUNT, 1, ~0L, 0, 1, 0},
|
||||
{"net_read_timeout", OPT_NET_READ_TIMEOUT,
|
||||
"Number of seconds to wait for more data from a connection before aborting the read.",
|
||||
|
@ -381,6 +381,7 @@ void my_net_local_init(NET *net)
|
||||
net->max_packet= (uint) global_system_variables.net_buffer_length;
|
||||
net->read_timeout= (uint) global_system_variables.net_read_timeout;
|
||||
net->write_timeout=(uint) global_system_variables.net_write_timeout;
|
||||
net->retry_count= (uint) global_system_variables.net_retry_count;
|
||||
net->max_packet_size= max(global_system_variables.net_buffer_length,
|
||||
global_system_variables.max_allowed_packet);
|
||||
}
|
||||
|
@ -62,15 +62,12 @@ extern void query_cache_insert(NET *net, const char *packet, ulong length);
|
||||
#ifndef NO_ALARM
|
||||
#include "my_pthread.h"
|
||||
void sql_print_error(const char *format,...);
|
||||
#define RETRY_COUNT mysqld_net_retry_count
|
||||
extern ulong mysqld_net_retry_count;
|
||||
extern ulong bytes_sent, bytes_received;
|
||||
extern pthread_mutex_t LOCK_bytes_sent , LOCK_bytes_received;
|
||||
#else
|
||||
#undef statistic_add
|
||||
#define statistic_add(A,B,C)
|
||||
#define DONT_USE_THR_ALARM
|
||||
#define RETRY_COUNT 1
|
||||
#endif /* NO_ALARM */
|
||||
|
||||
#include "thr_alarm.h"
|
||||
@ -85,11 +82,12 @@ static int net_write_buff(NET *net,const char *packet,ulong len);
|
||||
|
||||
int my_net_init(NET *net, Vio* vio)
|
||||
{
|
||||
DBUG_ENTER("my_net_init");
|
||||
my_net_local_init(net); /* Set some limits */
|
||||
if (!(net->buff=(uchar*) my_malloc((uint32) net->max_packet+
|
||||
NET_HEADER_SIZE + COMP_HEADER_SIZE,
|
||||
MYF(MY_WME))))
|
||||
return 1;
|
||||
DBUG_RETURN(1);
|
||||
net->buff_end=net->buff+net->max_packet;
|
||||
net->vio = vio;
|
||||
net->no_send_ok = 0;
|
||||
@ -114,14 +112,16 @@ int my_net_init(NET *net, Vio* vio)
|
||||
#endif
|
||||
vio_fastsend(vio);
|
||||
}
|
||||
return 0;
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
|
||||
void net_end(NET *net)
|
||||
{
|
||||
DBUG_ENTER("net_end");
|
||||
my_free((gptr) net->buff,MYF(MY_ALLOW_ZERO_PTR));
|
||||
net->buff=0;
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
||||
@ -385,7 +385,7 @@ net_real_write(NET *net,const char *packet,ulong len)
|
||||
my_bool old_mode;
|
||||
while (vio_blocking(net->vio, TRUE, &old_mode) < 0)
|
||||
{
|
||||
if (vio_should_retry(net->vio) && retry_count++ < RETRY_COUNT)
|
||||
if (vio_should_retry(net->vio) && retry_count++ < net->retry_count)
|
||||
continue;
|
||||
#ifdef EXTRA_DEBUG
|
||||
fprintf(stderr,
|
||||
@ -404,7 +404,7 @@ net_real_write(NET *net,const char *packet,ulong len)
|
||||
if (thr_alarm_in_use(&alarmed) && !thr_got_alarm(&alarmed) &&
|
||||
interrupted)
|
||||
{
|
||||
if (retry_count++ < RETRY_COUNT)
|
||||
if (retry_count++ < net->retry_count)
|
||||
continue;
|
||||
#ifdef EXTRA_DEBUG
|
||||
fprintf(stderr, "%s: write looped, aborting thread\n",
|
||||
@ -476,7 +476,7 @@ static void my_net_skip_rest(NET *net, uint32 remain, thr_alarm_t *alarmed)
|
||||
my_bool interrupted = vio_should_retry(net->vio);
|
||||
if (!thr_got_alarm(&alarmed) && interrupted)
|
||||
{ /* Probably in MIT threads */
|
||||
if (retry_count++ < RETRY_COUNT)
|
||||
if (retry_count++ < net->retry_count)
|
||||
continue;
|
||||
}
|
||||
return;
|
||||
@ -543,7 +543,7 @@ my_real_read(NET *net, ulong *complen)
|
||||
while (vio_blocking(net->vio, TRUE, &old_mode) < 0)
|
||||
{
|
||||
if (vio_should_retry(net->vio) &&
|
||||
retry_count++ < RETRY_COUNT)
|
||||
retry_count++ < net->retry_count)
|
||||
continue;
|
||||
DBUG_PRINT("error",
|
||||
("fcntl returned error %d, aborting thread",
|
||||
@ -568,7 +568,7 @@ my_real_read(NET *net, ulong *complen)
|
||||
if (thr_alarm_in_use(&alarmed) && !thr_got_alarm(&alarmed) &&
|
||||
interrupted)
|
||||
{ /* Probably in MIT threads */
|
||||
if (retry_count++ < RETRY_COUNT)
|
||||
if (retry_count++ < net->retry_count)
|
||||
continue;
|
||||
#ifdef EXTRA_DEBUG
|
||||
fprintf(stderr, "%s: read looped with error %d, aborting thread\n",
|
||||
|
@ -72,6 +72,7 @@ static void fix_low_priority_updates(THD *thd, enum_var_type type);
|
||||
static void fix_tx_isolation(THD *thd, enum_var_type type);
|
||||
static void fix_net_read_timeout(THD *thd, enum_var_type type);
|
||||
static void fix_net_write_timeout(THD *thd, enum_var_type type);
|
||||
static void fix_net_retry_count(THD *thd, enum_var_type type);
|
||||
static void fix_max_join_size(THD *thd, enum_var_type type);
|
||||
static void fix_query_cache_size(THD *thd, enum_var_type type);
|
||||
static void fix_key_buffer_size(THD *thd, enum_var_type type);
|
||||
@ -167,6 +168,9 @@ sys_var_thd_ulong sys_net_read_timeout("net_read_timeout",
|
||||
sys_var_thd_ulong sys_net_write_timeout("net_write_timeout",
|
||||
&SV::net_write_timeout,
|
||||
fix_net_write_timeout);
|
||||
sys_var_thd_ulong sys_net_retry_count("net_retry_count",
|
||||
&SV::net_retry_count,
|
||||
fix_net_retry_count);
|
||||
sys_var_thd_ulong sys_read_buff_size("read_buffer_size",
|
||||
&SV::read_buff_size);
|
||||
sys_var_thd_ulong sys_read_rnd_buff_size("read_rnd_buffer_size",
|
||||
@ -332,6 +336,7 @@ sys_var *sys_variables[]=
|
||||
&sys_myisam_sort_buffer_size,
|
||||
&sys_net_buffer_length,
|
||||
&sys_net_read_timeout,
|
||||
&sys_net_retry_count,
|
||||
&sys_net_wait_timeout,
|
||||
&sys_net_write_timeout,
|
||||
&sys_query_cache_size,
|
||||
@ -472,7 +477,7 @@ struct show_var_st init_vars[]= {
|
||||
#endif
|
||||
{sys_net_buffer_length.name,(char*) &sys_net_buffer_length, SHOW_SYS},
|
||||
{sys_net_read_timeout.name, (char*) &sys_net_read_timeout, SHOW_SYS},
|
||||
{"net_retry_count", (char*) &mysqld_net_retry_count, SHOW_LONG},
|
||||
{sys_net_retry_count.name, (char*) &sys_net_retry_count, SHOW_SYS},
|
||||
{sys_net_write_timeout.name,(char*) &sys_net_write_timeout, SHOW_SYS},
|
||||
{"open_files_limit", (char*) &open_files_limit, SHOW_LONG},
|
||||
{"pid_file", (char*) pidfile_name, SHOW_CHAR},
|
||||
@ -599,6 +604,12 @@ static void fix_net_write_timeout(THD *thd, enum_var_type type)
|
||||
thd->net.write_timeout=thd->variables.net_write_timeout;
|
||||
}
|
||||
|
||||
static void fix_net_retry_count(THD *thd, enum_var_type type)
|
||||
{
|
||||
if (type != OPT_GLOBAL)
|
||||
thd->net.retry_count=thd->variables.net_retry_count;
|
||||
}
|
||||
|
||||
|
||||
static void fix_query_cache_size(THD *thd, enum_var_type type)
|
||||
{
|
||||
|
@ -245,4 +245,4 @@
|
||||
"Wrong argument type to variable '%-.64s'",
|
||||
"Variable '%-.64s' can only be set, not read",
|
||||
"Wrong usage/placement of '%s'",
|
||||
"This version of MySQL doesn't yet support '%s',"
|
||||
"This version of MySQL doesn't yet support '%s'",
|
||||
|
@ -239,4 +239,4 @@
|
||||
"Wrong argument type to variable '%-.64s'",
|
||||
"Variable '%-.64s' can only be set, not read",
|
||||
"Wrong usage/placement of '%s'",
|
||||
"This version of MySQL doesn't yet support '%s',"
|
||||
"This version of MySQL doesn't yet support '%s'",
|
||||
|
@ -236,4 +236,4 @@
|
||||
"Wrong argument type to variable '%-.64s'",
|
||||
"Variable '%-.64s' can only be set, not read",
|
||||
"Wrong usage/placement of '%s'",
|
||||
"This version of MySQL doesn't yet support '%s',"
|
||||
"This version of MySQL doesn't yet support '%s'",
|
||||
|
@ -241,4 +241,4 @@
|
||||
"Wrong argument type to variable '%-.64s'",
|
||||
"Variable '%-.64s' can only be set, not read",
|
||||
"Wrong usage/placement of '%s'",
|
||||
"This version of MySQL doesn't yet support '%s',"
|
||||
"This version of MySQL doesn't yet support '%s'",
|
||||
|
@ -236,4 +236,4 @@
|
||||
"Wrong argument type to variable '%-.64s'",
|
||||
"Variable '%-.64s' can only be set, not read",
|
||||
"Wrong usage/placement of '%s'",
|
||||
"This version of MySQL doesn't yet support '%s',"
|
||||
"This version of MySQL doesn't yet support '%s'",
|
||||
|
@ -239,4 +239,4 @@
|
||||
"Wrong argument type to variable '%-.64s'",
|
||||
"Variable '%-.64s' can only be set, not read",
|
||||
"Wrong usage/placement of '%s'",
|
||||
"This version of MySQL doesn't yet support '%s',"
|
||||
"This version of MySQL doesn't yet support '%s'",
|
||||
|
@ -236,4 +236,4 @@
|
||||
"Wrong argument type to variable '%-.64s'",
|
||||
"Variable '%-.64s' can only be set, not read",
|
||||
"Wrong usage/placement of '%s'",
|
||||
"This version of MySQL doesn't yet support '%s',"
|
||||
"This version of MySQL doesn't yet support '%s'",
|
||||
|
@ -238,4 +238,4 @@
|
||||
"Wrong argument type to variable '%-.64s'",
|
||||
"Variable '%-.64s' can only be set, not read",
|
||||
"Wrong usage/placement of '%s'",
|
||||
"This version of MySQL doesn't yet support '%s',"
|
||||
"This version of MySQL doesn't yet support '%s'",
|
||||
|
@ -236,4 +236,4 @@
|
||||
"Wrong argument type to variable '%-.64s'",
|
||||
"Variable '%-.64s' can only be set, not read",
|
||||
"Wrong usage/placement of '%s'",
|
||||
"This version of MySQL doesn't yet support '%s',"
|
||||
"This version of MySQL doesn't yet support '%s'",
|
||||
|
@ -238,4 +238,4 @@
|
||||
"Wrong argument type to variable '%-.64s'",
|
||||
"Variable '%-.64s' can only be set, not read",
|
||||
"Wrong usage/placement of '%s'",
|
||||
"This version of MySQL doesn't yet support '%s',"
|
||||
"This version of MySQL doesn't yet support '%s'",
|
||||
|
@ -236,4 +236,4 @@
|
||||
"Wrong argument type to variable '%-.64s'",
|
||||
"Variable '%-.64s' can only be set, not read",
|
||||
"Wrong usage/placement of '%s'",
|
||||
"This version of MySQL doesn't yet support '%s',"
|
||||
"This version of MySQL doesn't yet support '%s'",
|
||||
|
@ -238,4 +238,4 @@
|
||||
"Wrong argument type to variable '%-.64s'",
|
||||
"Variable '%-.64s' can only be set, not read",
|
||||
"Wrong usage/placement of '%s'",
|
||||
"This version of MySQL doesn't yet support '%s',"
|
||||
"This version of MySQL doesn't yet support '%s'",
|
||||
|
@ -238,4 +238,4 @@
|
||||
"Wrong argument type to variable '%-.64s'",
|
||||
"Variable '%-.64s' can only be set, not read",
|
||||
"Wrong usage/placement of '%s'",
|
||||
"This version of MySQL doesn't yet support '%s',"
|
||||
"This version of MySQL doesn't yet support '%s'",
|
||||
|
@ -240,4 +240,4 @@
|
||||
"Wrong argument type to variable '%-.64s'",
|
||||
"Variable '%-.64s' can only be set, not read",
|
||||
"Wrong usage/placement of '%s'",
|
||||
"This version of MySQL doesn't yet support '%s',"
|
||||
"This version of MySQL doesn't yet support '%s'",
|
||||
|
@ -236,4 +236,4 @@
|
||||
"Wrong argument type to variable '%-.64s'",
|
||||
"Variable '%-.64s' can only be set, not read",
|
||||
"Wrong usage/placement of '%s'",
|
||||
"This version of MySQL doesn't yet support '%s',"
|
||||
"This version of MySQL doesn't yet support '%s'",
|
||||
|
@ -240,4 +240,4 @@
|
||||
"Wrong argument type to variable '%-.64s'",
|
||||
"Variable '%-.64s' can only be set, not read",
|
||||
"Wrong usage/placement of '%s'",
|
||||
"This version of MySQL doesn't yet support '%s',"
|
||||
"This version of MySQL doesn't yet support '%s'",
|
||||
|
@ -239,4 +239,4 @@
|
||||
"Wrong argument type to variable '%-.64s'",
|
||||
"Variable '%-.64s' can only be set, not read",
|
||||
"Wrong usage/placement of '%s'",
|
||||
"This version of MySQL doesn't yet support '%s',"
|
||||
"This version of MySQL doesn't yet support '%s'",
|
||||
|
@ -244,4 +244,4 @@
|
||||
"Wrong argument type to variable '%-.64s'",
|
||||
"Variable '%-.64s' can only be set, not read",
|
||||
"Wrong usage/placement of '%s'",
|
||||
"This version of MySQL doesn't yet support '%s',"
|
||||
"This version of MySQL doesn't yet support '%s'",
|
||||
|
@ -237,4 +237,4 @@
|
||||
"Wrong argument type to variable '%-.64s'",
|
||||
"Variable '%-.64s' can only be set, not read",
|
||||
"Wrong usage/placement of '%s'",
|
||||
"This version of MySQL doesn't yet support '%s',"
|
||||
"This version of MySQL doesn't yet support '%s'",
|
||||
|
@ -236,4 +236,4 @@
|
||||
"Wrong argument type to variable '%-.64s'",
|
||||
"Variable '%-.64s' can only be set, not read",
|
||||
"Wrong usage/placement of '%s'",
|
||||
"This version of MySQL doesn't yet support '%s',"
|
||||
"This version of MySQL doesn't yet support '%s'",
|
||||
|
@ -241,4 +241,4 @@
|
||||
"Wrong argument type to variable '%-.64s'",
|
||||
"Variable '%-.64s' can only be set, not read",
|
||||
"Wrong usage/placement of '%s'",
|
||||
"This version of MySQL doesn't yet support '%s',"
|
||||
"This version of MySQL doesn't yet support '%s'",
|
||||
|
@ -208,7 +208,6 @@ THD::~THD()
|
||||
hash_free(&user_vars);
|
||||
|
||||
DBUG_PRINT("info", ("freeing host"));
|
||||
|
||||
if (host != localhost) // If not pointer to constant
|
||||
safeFree(host);
|
||||
if (user != delayed_user)
|
||||
|
@ -296,6 +296,7 @@ struct system_variables
|
||||
ulong net_read_timeout;
|
||||
ulong net_wait_timeout;
|
||||
ulong net_write_timeout;
|
||||
ulong net_retry_count;
|
||||
ulong query_cache_type;
|
||||
ulong read_buff_size;
|
||||
ulong read_rnd_buff_size;
|
||||
|
@ -721,7 +721,7 @@ pthread_handler_decl(handle_bootstrap,arg)
|
||||
|
||||
thd->proc_info=0;
|
||||
thd->version=refresh_version;
|
||||
thd->priv_user=thd->user=(char*)"boot";
|
||||
thd->priv_user=thd->user=(char*) my_strdup("boot", MYF(MY_WME));
|
||||
|
||||
buff= (char*) thd->net.buff;
|
||||
init_sql_alloc(&thd->mem_root, MEM_ROOT_BLOCK_SIZE, MEM_ROOT_PREALLOC);
|
||||
@ -752,7 +752,6 @@ pthread_handler_decl(handle_bootstrap,arg)
|
||||
free_root(&thd->mem_root,MYF(MY_KEEP_PREALLOC));
|
||||
free_root(&thd->transaction.mem_root,MYF(MY_KEEP_PREALLOC));
|
||||
}
|
||||
thd->priv_user=thd->user=0;
|
||||
|
||||
/* thd->fatal_error should be set in case something went wrong */
|
||||
end:
|
||||
|
@ -5086,7 +5086,7 @@ end_write(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)),
|
||||
error == HA_ERR_FOUND_DUPP_UNIQUE)
|
||||
goto end;
|
||||
if (create_myisam_from_heap(table, &join->tmp_table_param, error,1))
|
||||
DBUG_RETURN(1); // Not a table_is_full error
|
||||
DBUG_RETURN(-1); // Not a table_is_full error
|
||||
table->uniques=0; // To ensure rows are the same
|
||||
}
|
||||
if (++join->send_records >= join->tmp_table_param.end_write_records &&
|
||||
@ -5258,7 +5258,7 @@ end_write_group(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)),
|
||||
{
|
||||
if (create_myisam_from_heap(table, &join->tmp_table_param,
|
||||
error, 0))
|
||||
DBUG_RETURN(1); // Not a table_is_full error
|
||||
DBUG_RETURN(-1); // Not a table_is_full error
|
||||
}
|
||||
else
|
||||
join->send_records++;
|
||||
|
@ -3449,7 +3449,7 @@ revoke:
|
||||
lex->columns.empty();
|
||||
lex->grant= lex->grant_tot_col=0;
|
||||
lex->select->db=0;
|
||||
bzero(&(lex->mqh),sizeof(lex->mqh));
|
||||
bzero((char*) &lex->mqh, sizeof(lex->mqh));
|
||||
}
|
||||
grant_privileges ON opt_table FROM user_list;
|
||||
|
||||
|
Reference in New Issue
Block a user