Commit 40c2a887 authored by unknown's avatar unknown

Changing the default of libmysqlclient : it's now NO reconnection.

All our programs which use mysql_real_connect() and mysql_connect() are updated accordingly, though I have deliberately
made mysqlimport not reconnect anymore (already true for mysqldump >= 4.1.8).
All Connector devs have been warned about the change I'm doing here - which was agreed with Monty,
and fixes BUG#2555.


VC++Files/libmysqltest/mytest.c:
  explicit mention of reconnect (no behaviour change)
VC++Files/mysqlmanager/mysqlmanagerview.cpp:
  explicit mention of reconnect (no behaviour change)
VC++Files/test1/mysql_thr.c:
  explicit mention of reconnect (no behaviour change)
VC++Files/winmysqladmin/main.cpp:
  explicit mention of reconnect (no behaviour change)
client/mysql.cc:
  explicit mention of reconnect if embedded (no behaviour change)
client/mysqladmin.cc:
  explicit mention of reconnect (no behaviour change)
client/mysqlbinlog.cc:
  explicit mention of reconnect (no behaviour change)
client/mysqlcheck.c:
  explicit mention of reconnect (no behaviour change)
client/mysqlimport.c:
  explicit mention of NO reconnect (behaviour change). As most time is passed in LOAD DATA INFILE,
  and as it does not make sense to reconnect after a partly failed LOAD... And as mysqlimport sometimes
  does LOCK TABLES where we mustn't reconnect...
client/mysqlshow.c:
  explicit mention of reconnect (no behaviour change)
client/mysqltest.c:
  explicit mention of reconnect (no behaviour change).
  Normally we should not reconnect (it's not good to have silent reconnection in the middle of a test),
  but 5.0 is too touchy to change it now. I'm marking it TODO.
libmysql/libmysql.c:
  explicit mention of reconnect (no behaviour change)
libmysqld/examples/builder-sample/emb_samples.cpp:
  explicit mention of reconnect (no behaviour change)
ndb/test/ndbapi/flex_bench_mysql.cpp:
  explicit mention of reconnect (no behaviour change)
ndb/tools/restore/consumer_restorem.cpp:
  explicit mention of reconnect (no behaviour change)
sql-common/client.c:
  Changing the default of libmysqlclient : it's now NO reconnection.
sql/repl_failsafe.cc:
  explicit mention of reconnect (no behaviour change)
sql/slave.cc:
  explicit mention of reconnect (no behaviour change)
tests/client_test.c:
  explicit mention of reconnect (no behaviour change)
tests/connect_test.c:
  explicit mention of reconnect (no behaviour change)
tests/deadlock_test.c:
  explicit mention of reconnect (no behaviour change)
tests/insert_test.c:
  explicit mention of reconnect (no behaviour change)
tests/list_test.c:
  explicit mention of reconnect (no behaviour change)
tests/select_test.c:
  explicit mention of reconnect (no behaviour change)
tests/showdb_test.c:
  explicit mention of reconnect (no behaviour change)
tests/ssl_test.c:
  explicit mention of reconnect (no behaviour change)
tests/thread_test.c:
  explicit mention of reconnect (no behaviour change)
tools/mysqlmanager.c:
  explicit mention of reconnect (no behaviour change)
parent 3a5f7eab
......@@ -91,6 +91,7 @@ main( int argc, char * argv[] )
mysql_real_connect( myData, NULL, NULL, NULL, NULL, MYSQL_PORT,
NULL, 0 ) )
{
myData->reconnect= 1;
if ( mysql_select_db( myData, szDB ) < 0 ) {
printf( "Can't select the %s database !\n", szDB ) ;
mysql_close( myData ) ;
......
......@@ -551,6 +551,7 @@ void CMySqlManagerView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult)
PostMessage(WM_COMMAND,IDM_TOOLS_SERVER_PROPERTIES);
return;
}
mysql.reconnect= 1;
if (!(result=mysql_list_processes(&mysql)))
{
return;
......@@ -576,6 +577,7 @@ void CMySqlManagerView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult)
);
return;
}
mysql.reconnect= 1;
if (!(result=mysql_list_dbs(&mysql,0)))
{
}
......@@ -603,6 +605,7 @@ void CMySqlManagerView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult)
);
return;
}
mysql.reconnect= 1;
CResourceDatabase* pRes = (CResourceDatabase*) pResource;
CString strDB = pResource->GetDisplayName();
strDB.TrimRight();
......@@ -641,6 +644,7 @@ void CMySqlManagerView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult)
);
return;
}
mysql.reconnect= 1;
HTREEITEM hParent = m_pTree->GetParentItem(hItem);
memset( &item, 0, sizeof(TV_ITEM) );
item.hItem = hParent;
......@@ -714,6 +718,7 @@ void CMySqlManagerView::OnRefresh()
{
return;
}
mysql.reconnect= 1;
memset( &item, 0, sizeof(TV_ITEM) );
item.hItem = hParent;
item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
......
......@@ -167,6 +167,7 @@ pthread_handler_decl(test_thread,arg)
perror("");
goto end;
}
mysql.reconnect= 1;
if (mysql_query(&mysql,"select 1") < 0)
{
fprintf(stderr,"Query failed (%s)\n",mysql_error(&mysql));
......
......@@ -1337,6 +1337,7 @@ void __fastcall TForm1::IsMySQLInit(void)
}
}
MySQL->reconnect= 1;
}
......@@ -1348,6 +1349,7 @@ void __fastcall TForm1::IsMySQLInit(void)
MySQL = mysql_init(MySQL);
if(mysql_real_connect(MySQL,host,user,password , 0, 0, NULL, 0))
IsConnect = true;
MySQL->reconnect= 1;
}
}
}
......
......@@ -2792,6 +2792,8 @@ sql_real_connect(char *host,char *database,char *user,char *password,
connected=1;
#ifndef EMBEDDED_LIBRARY
mysql.reconnect=info_flag ? 1 : 0; // We want to know if this happens
#else
mysql.reconnect= 1;
#endif
#ifdef HAVE_READLINE
build_completion_hash(rehash, 1);
......
......@@ -425,6 +425,7 @@ static my_bool sql_connect(MYSQL *mysql, uint wait)
if (mysql_real_connect(mysql,host,user,opt_password,NullS,tcp_port,
unix_port, 0))
{
mysql->reconnect= 1;
if (info)
{
fputs("\n",stderr);
......
......@@ -753,6 +753,7 @@ static MYSQL* safe_connect()
mysql_options(local_mysql, MYSQL_OPT_PROTOCOL, (char*) &opt_protocol);
if (!mysql_real_connect(local_mysql, host, user, pass, 0, port, sock, 0))
die("failed on connect: %s", mysql_error(local_mysql));
local_mysql->reconnect= 1;
return local_mysql;
}
......
......@@ -628,6 +628,7 @@ static int dbConnect(char *host, char *user, char *passwd)
DBerror(&mysql_connection, "when trying to connect");
return 1;
}
mysql_connection.reconnect= 1;
return 0;
} /* dbConnect */
......
......@@ -388,6 +388,7 @@ static MYSQL *db_connect(char *host, char *database, char *user, char *passwd)
ignore_errors=0; /* NO RETURN FROM db_error */
db_error(&mysql_connection);
}
mysql_connection.reconnect= 0;
if (verbose)
fprintf(stdout, "Selecting database %s\n", database);
if (mysql_select_db(sock, database))
......
......@@ -125,6 +125,7 @@ int main(int argc, char **argv)
fprintf(stderr,"%s: %s\n",my_progname,mysql_error(&mysql));
exit(1);
}
mysql.reconnect= 1;
switch (argc)
{
......
......@@ -1627,6 +1627,7 @@ int safe_connect(MYSQL* con, const char* host, const char* user,
}
sleep(CON_RETRY_SLEEP);
}
con->reconnect= 1; /* TODO: change this to 0 in future versions */
return con_error;
}
......
......@@ -317,6 +317,7 @@ my_bool STDCALL mysql_master_send_query(MYSQL *mysql, const char *q,
DBUG_ENTER("mysql_master_send_query");
if (!master->net.vio && !mysql_real_connect(master,0,0,0,0,0,0,0))
DBUG_RETURN(1);
master->reconnect= 1;
mysql->last_used_con = master;
DBUG_RETURN(simple_command(master, COM_QUERY, q, length, 1));
}
......@@ -351,6 +352,7 @@ my_bool STDCALL mysql_slave_send_query(MYSQL *mysql, const char *q,
if (!slave_to_use->net.vio && !mysql_real_connect(slave_to_use, 0,0,0,
0,0,0,0))
DBUG_RETURN(1);
slave_to_use->reconnect= 1;
DBUG_RETURN(simple_command(slave_to_use, COM_QUERY, q, length, 1));
}
......@@ -448,6 +450,7 @@ static my_bool get_slaves_from_master(MYSQL* mysql)
expand_error(mysql, CR_PROBE_MASTER_CONNECT);
DBUG_RETURN(1);
}
mysql->reconnect= 1;
if (mysql_query(mysql, "SHOW SLAVE HOSTS") ||
!(res = mysql_store_result(mysql)))
......@@ -615,6 +618,7 @@ mysql_connect(MYSQL *mysql,const char *host,
if (mysql->free_me)
my_free((gptr) mysql,MYF(0));
}
mysql->reconnect= 1;
DBUG_RETURN(res);
}
}
......
......@@ -109,6 +109,7 @@ bool __fastcall TForm1::connect_server()
ret_value = true;
is_server_started = true;
}
MySQL->reconnect= 1;
return ret_value;
}
//---------------------------------------------------------------------------
......
......@@ -397,6 +397,7 @@ NDB_COMMAND(flexBench, "flexBench", "flexBench", "flexbench", 65535)
ndbout << "Connect failed" <<endl;
returnValue = NDBT_FAILED;
}
mysql.reconnect= 1;
}
if(returnValue == NDBT_OK){
mysql_set_server_option(&mysql, MYSQL_OPTION_MULTI_STATEMENTS_ON);
......@@ -712,6 +713,7 @@ static void* flexBenchThread(void* pArg)
ndbout << "failed" << endl;
NdbThread_Exit(0) ;
}
mysql.reconnect= 1;
ndbout << "ok" << endl;
int r;
......
......@@ -80,6 +80,7 @@ :: ga_socket,
ndbout_c("Connect failed: %s", mysql_error(&mysql));
returnValue = false;
}
mysql.reconnect= 1;
ndbout << "Connected to MySQL!!!" <<endl;
}
......
......@@ -1588,7 +1588,23 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
if (!unix_socket)
unix_socket=mysql->options.unix_socket;
mysql->reconnect=1; /* Reconnect as default */
/*
By default we don't reconnect because it could silently corrupt data (after
reconnection you potentially lose table locks, user variables, session
variables (transactions but they are specifically dealt with in
mysql_reconnect()).
This is a change: < 5.0.3 mysql->reconnect was set to 1 by default.
How this change impacts existing apps:
- existing apps which relyed on the default will see a behaviour change;
they will have to set reconnect=1 after mysql_real_connect().
- existing apps which explicitely asked for reconnection (the only way they
could do it was by setting mysql.reconnect to 1 after mysql_real_connect())
will not see a behaviour change.
- existing apps which explicitely asked for no reconnection
(mysql.reconnect=0) will not see a behaviour change.
*/
mysql->reconnect= 0;
mysql->server_status=SERVER_STATUS_AUTOCOMMIT;
/*
......@@ -2161,6 +2177,7 @@ my_bool mysql_reconnect(MYSQL *mysql)
strmov(mysql->net.sqlstate, tmp_mysql.net.sqlstate);
DBUG_RETURN(1);
}
tmp_mysql.reconnect= 1;
tmp_mysql.free_me= mysql->free_me;
/* Don't free options as these are now used in tmp_mysql */
bzero((char*) &mysql->options,sizeof(mysql->options));
......
......@@ -709,6 +709,7 @@ int connect_to_master(THD *thd, MYSQL* mysql, MASTER_INFO* mi)
if (!mysql_real_connect(mysql, mi->host, mi->user, mi->password, 0,
mi->port, 0, 0))
DBUG_RETURN(1);
mysql->reconnect= 1;
DBUG_RETURN(0);
}
......
......@@ -4394,6 +4394,7 @@ replication resumed in log '%s' at position %s", mi->user,
thd->set_active_vio(mysql->net.vio);
#endif
}
mysql->reconnect= 1;
DBUG_PRINT("exit",("slave_was_killed: %d", slave_was_killed));
DBUG_RETURN(slave_was_killed);
}
......
......@@ -243,6 +243,7 @@ static void client_connect()
fprintf(stdout, "\n Check the connection options using --help or -?\n");
exit(1);
}
mysql->reconnect= 1;
if (!opt_silent)
fprintf(stdout, " OK");
......@@ -1050,6 +1051,7 @@ static my_bool thread_query(char *query)
error= 1;
goto end;
}
l_mysql->reconnect= 1;
if (mysql_query(l_mysql, (char *)query))
{
fprintf(stderr, "Query failed (%s)\n", mysql_error(l_mysql));
......@@ -4474,6 +4476,7 @@ static void test_stmt_close()
myerror("connection failed");
exit(1);
}
lmysql->reconnect= 1;
if (!opt_silent)
fprintf(stdout, " OK");
......@@ -5365,6 +5368,7 @@ DROP TABLE IF EXISTS test_multi_tab";
fprintf(stdout, "\n connection failed(%s)", mysql_error(mysql_local));
exit(1);
}
mysql_local->reconnect= 1;
rc= mysql_query(mysql_local, query);
myquery(rc);
......@@ -5473,6 +5477,7 @@ static void test_prepare_multi_statements()
fprintf(stderr, "\n connection failed(%s)", mysql_error(mysql_local));
exit(1);
}
mysql_local->reconnect= 1;
strmov(query, "select 1; select 'another value'");
stmt= mysql_simple_prepare(mysql_local, query);
check_stmt_r(stmt);
......@@ -7004,6 +7009,7 @@ static void test_prepare_grant()
mysql_close(lmysql);
exit(1);
}
lmysql->reconnect= 1;
if (!opt_silent)
fprintf(stdout, " OK");
......@@ -7439,6 +7445,7 @@ static void test_drop_temp()
mysql_close(lmysql);
exit(1);
}
lmysql->reconnect= 1;
if (!opt_silent)
fprintf(stdout, " OK");
......
......@@ -46,6 +46,7 @@ int main(int argc, char **argv)
perror("");
exit(1);
}
sock->reconnect= 1;
if (mysql_select_db(sock,"test"))
{
......
......@@ -227,6 +227,7 @@ int main()
!mysql_real_connect(&sel, host, user, pass, db, 0,0,0 ) ||
!mysql_real_connect(&del_ins, host, user, pass, db, 0,0,0 ))
die("Error in mysql_real_connect(): %s", mysql_error(&lock));
lock.reconnect= sel.reconnect= del_ins.reconnect= 1;
permute(order, num_queries);
printf("count = %d\n", count);
......
......@@ -40,6 +40,7 @@ int main(int argc, char **argv)
perror("");
exit(1);
}
mysql.reconnect= 1;
num = atoi(argv[2]);
count = 0;
......
......@@ -43,6 +43,7 @@ int main(int argc, char **argv)
perror("");
exit(1);
}
mysql.reconnect= 1;
if (mysql_select_db(sock,argv[1]) < 0)
{
......
......@@ -44,6 +44,7 @@ int main(int argc, char **argv)
perror("");
exit(1);
}
mysql.reconnect= 1;
count = 0;
num = atoi(argv[2]);
......
......@@ -45,6 +45,7 @@ int main(int argc, char **argv)
perror("");
exit(1);
}
mysql.reconnect= 1;
count = 0;
num = atoi(argv[2]);
......
......@@ -51,6 +51,7 @@ int main(int argc, char **argv)
perror("");
exit(1);
}
mysql.reconnect= 1;
count = 0;
num = atoi(argv[2]);
while (count < num)
......
......@@ -55,6 +55,7 @@ unsigned __stdcall test_thread(void *arg __attribute__((unused)))
perror("");
goto end;
}
mysql.reconnect= 1;
if (verbose) { putchar('*'); fflush(stdout); }
for (count=0 ; count < number_of_tests ; count++)
{
......
......@@ -877,7 +877,10 @@ static void manager_exec_connect(struct manager_exec* e)
{
if (mysql_real_connect(&e->mysql,e->con_host,e->con_user,e->con_pass,0,
e->con_port,e->con_sock,0))
{
e->mysql.reconnect= 1;
return;
}
sleep(1);
}
e->error="Could not connect to MySQL server withing the number of tries";
......
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