Merge pull request #1825 from sysown/v2.0.0-144-merge

V2.0.0 144 merge
pull/1838/head
René Cannaò 8 years ago committed by GitHub
commit 7d6afa8bf0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -26,10 +26,12 @@ class MyDS_real_query {
char *QueryPtr; // pointer to beginning of the query
unsigned int QuerySize; // size of the query
void init(PtrSize_t *_pkt) {
/*
assert(QueryPtr==NULL);
assert(QuerySize==0);
assert(pkt.ptr==NULL);
assert(pkt.size==0);
*/
pkt.ptr=_pkt->ptr;
pkt.size=_pkt->size;
QueryPtr=(char *)pkt.ptr+5;

@ -1343,6 +1343,24 @@ bool MySQL_Session::handler_again___verify_backend_autocommit() {
}
NEXT_IMMEDIATE_NEW(CHANGING_AUTOCOMMIT);
}
} else {
if (autocommit == false) { // also IsAutoCommit==false
if (mysql_thread___enforce_autocommit_on_reads == false) {
if (mybe->server_myds->myconn->IsActiveTransaction() == false) {
if (CurrentQuery.is_select_NOT_for_update()==true) {
// client wants autocommit=0
// enforce_autocommit_on_reads=false
// there is no transaction
// this seems to be the first query, and a SELECT not FOR UPDATE
// we will switch back to autcommit=1
if (status == PROCESSING_QUERY) {
previous_status.push(PROCESSING_QUERY);
NEXT_IMMEDIATE_NEW(CHANGING_AUTOCOMMIT);
}
}
}
}
}
}
return false;
}
@ -1404,6 +1422,7 @@ bool MySQL_Session::handler_again___status_SETTING_INIT_CONNECT(int *_rc) {
int rc=myconn->async_send_simple_command(myds->revents,myconn->options.init_connect,strlen(myconn->options.init_connect));
if (rc==0) {
myds->revents|=POLLOUT; // we also set again POLLOUT to send a query immediately!
myds->free_mysql_real_query();
st=previous_status.top();
previous_status.pop();
NEXT_IMMEDIATE_NEW(st);
@ -2019,7 +2038,28 @@ bool MySQL_Session::handler_again___status_CHANGING_AUTOCOMMIT(int *_rc) {
if (myds->mypolls==NULL) {
thread->mypolls.add(POLLIN|POLLOUT, mybe->server_myds->fd, mybe->server_myds, thread->curtime);
}
int rc=myconn->async_set_autocommit(myds->revents, autocommit);
bool ac = autocommit;
if (autocommit == false) { // also IsAutoCommit==false
if (mysql_thread___enforce_autocommit_on_reads == false) {
if (mybe->server_myds->myconn->IsAutoCommit() == false) {
if (mybe->server_myds->myconn->IsActiveTransaction() == false) {
if (CurrentQuery.is_select_NOT_for_update()==true) {
// client wants autocommit=0
// enforce_autocommit_on_reads=false
// there is no transaction
// this seems to be the first query, and a SELECT not FOR UPDATE
// we will switch back to autcommit=1
ac = true;
}
} else {
st=previous_status.top();
previous_status.pop();
NEXT_IMMEDIATE_NEW(st);
}
}
}
}
int rc=myconn->async_set_autocommit(myds->revents, ac);
if (rc==0) {
st=previous_status.top();
previous_status.pop();

@ -4225,33 +4225,7 @@ void MySQL_Threads_Handler::Get_Memory_Stats() {
#endif // IDLE_THREADS
}
pthread_mutex_lock(&thr->thread_mutex);
/*
}
for (i=0;i<j;i++) {
if (i<num_threads) {
thr=(MySQL_Thread *)mysql_threads[i].worker;
#ifdef IDLE_THREADS
} else {
if (GloVars.global.idle_threads) {
thr=(MySQL_Thread *)mysql_threads_idles[i-num_threads].worker;
}
#endif // IDLE_THREADS
}
*/
thr->Get_Memory_Stats();
/*
}
for (i=0;i<j;i++) {
if (i<num_threads) {
thr=(MySQL_Thread *)mysql_threads[i].worker;
#ifdef IDLE_THREADS
} else {
if (GloVars.global.idle_threads) {
thr=(MySQL_Thread *)mysql_threads_idles[i-num_threads].worker;
}
#endif // IDLE_THREADS
}
*/
pthread_mutex_unlock(&thr->thread_mutex);
}
}
@ -4260,7 +4234,7 @@ SQLite3_result * MySQL_Threads_Handler::SQL3_Processlist() {
const int colnum=14;
char port[NI_MAXSERV];
proxy_debug(PROXY_DEBUG_MYSQL_CONNECTION, 4, "Dumping MySQL Processlist\n");
SQLite3_result *result=new SQLite3_result(colnum);
SQLite3_result *result=new SQLite3_result(colnum);
result->add_column_definition(SQLITE_TEXT,"ThreadID");
result->add_column_definition(SQLITE_TEXT,"SessionID");
result->add_column_definition(SQLITE_TEXT,"user");
@ -4298,21 +4272,6 @@ SQLite3_result * MySQL_Threads_Handler::SQL3_Processlist() {
}
#endif // IDLE_THREADS
}
/*
}
#ifdef IDLE_THREADS
for (i=0;i < ( (mysql_thread___session_idle_show_processlist && GloVars.global.idle_threads ) ? num_threads*2 : num_threads); i++) {
#else
for (i=0;i < num_threads; i++) {
#endif // IDLE_THREADS
if (i<num_threads) {
thr=(MySQL_Thread *)mysql_threads[i].worker;
#ifdef IDLE_THREADS
} else {
thr=(MySQL_Thread *)mysql_threads_idles[i-num_threads].worker;
#endif // IDLE_THREADS
}
*/
unsigned int j;
for (j=0; j<thr->mysql_sessions->len; j++) {
MySQL_Session *sess=(MySQL_Session *)thr->mysql_sessions->pdata[j];
@ -4526,25 +4485,7 @@ SQLite3_result * MySQL_Threads_Handler::SQL3_Processlist() {
free(pta);
}
}
/*
}
#ifdef IDLE_THREADS
for (i=0;i < ( (mysql_thread___session_idle_show_processlist && GloVars.global.idle_threads ) ? num_threads*2 : num_threads); i++) {
#else
for (i=0;i < num_threads; i++) {
#endif // IDLE_THREADS
*/
if (i<num_threads) {
thr=(MySQL_Thread *)mysql_threads[i].worker;
pthread_mutex_unlock(&thr->thread_mutex);
#ifdef IDLE_THREADS
} else {
if (mysql_thread___session_idle_show_processlist) {
thr=(MySQL_Thread *)mysql_threads_idles[i-num_threads].worker;
pthread_mutex_unlock(&thr->thread_mutex);
}
#endif // IDLE_THREADS
}
pthread_mutex_unlock(&thr->thread_mutex);
}
return result;
}

Loading…
Cancel
Save