Merge branch 'v1.3.0' into v1.3.1-dev

v1.3.1-dev-mem
René Cannaò 10 years ago
commit c0f4394a7d

@ -10,8 +10,6 @@
#define EXPMARIA
#define BUFLEN 256
extern const CHARSET_INFO * proxysql_find_charset_name(const char * const name);
extern MySQL_Authentication *GloMyAuth;
@ -1116,6 +1114,14 @@ bool MySQL_Session::handler_again___status_CONNECTING_SERVER(int *_rc) {
//wrong_pass=true;
if (myds->connect_retries_on_failure >0 ) {
myds->connect_retries_on_failure--;
int myerr=mysql_errno(myconn->mysql);
switch (myerr) {
case 1226: // ER_USER_LIMIT_REACHED , User '%s' has exceeded the '%s' resource (current value: %ld)
goto __exit_handler_again___status_CONNECTING_SERVER_with_err;
break;
default:
break;
}
//myds->destroy_MySQL_Connection();
if (mirror) {
PROXY_TRACE();
@ -1123,6 +1129,7 @@ bool MySQL_Session::handler_again___status_CONNECTING_SERVER(int *_rc) {
myds->destroy_MySQL_Connection_From_Pool(false);
NEXT_IMMEDIATE_NEW(CONNECTING_SERVER);
} else {
__exit_handler_again___status_CONNECTING_SERVER_with_err:
int myerr=mysql_errno(myconn->mysql);
if (myerr) {
char sqlstate[10];
@ -1778,16 +1785,16 @@ __get_pkts_from_client:
default:
proxy_debug(PROXY_DEBUG_MYSQL_CONNECTION, 5, "Statuses: WAITING_CLIENT_DATA - STATE_UNKNOWN\n");
{
char buf[BUFLEN];
char buf[INET6_ADDRSTRLEN];
switch (client_myds->client_addr->sa_family) {
case AF_INET: {
struct sockaddr_in *ipv4 = (struct sockaddr_in *)client_myds->client_addr;
inet_ntop(client_myds->client_addr->sa_family, &ipv4->sin_addr, buf, BUFLEN);
inet_ntop(client_myds->client_addr->sa_family, &ipv4->sin_addr, buf, INET_ADDRSTRLEN);
break;
}
case AF_INET6: {
struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)client_myds->client_addr;
inet_ntop(client_myds->client_addr->sa_family, &ipv6->sin6_addr, buf, BUFLEN);
inet_ntop(client_myds->client_addr->sa_family, &ipv6->sin6_addr, buf, INET6_ADDRSTRLEN);
break;
}
default:

@ -10,7 +10,6 @@ MySQL_Session *sess_stopat;
#define PROXYSQL_LISTEN_LEN 1024
#define MIN_THREADS_FOR_MAINTENANCE 8
#define BUFLEN 256
extern Query_Processor *GloQPro;
extern MySQL_Authentication *GloMyAuth;
@ -2886,9 +2885,13 @@ void MySQL_Thread::unregister_session_connection_handler(int idx, bool _new) {
void MySQL_Thread::listener_handle_new_connection(MySQL_Data_Stream *myds, unsigned int n) {
int c;
struct sockaddr *addr=(struct sockaddr *)malloc(sizeof(struct sockaddr));
socklen_t addrlen=sizeof(struct sockaddr);
memset(addr, 0, sizeof(struct sockaddr));
union {
struct sockaddr_in in;
struct sockaddr_in6 in6;
} custom_sockaddr;
struct sockaddr *addr=(struct sockaddr *)malloc(sizeof(custom_sockaddr));
socklen_t addrlen=sizeof(custom_sockaddr);
memset(addr, 0, sizeof(custom_sockaddr));
if (GloMTH->num_threads > 1) {
// there are more than 1 thread . We pause for a little bit to avoid all connections to be handled by the same thread
#ifdef SO_REUSEPORT
@ -2916,18 +2919,18 @@ void MySQL_Thread::listener_handle_new_connection(MySQL_Data_Stream *myds, unsig
switch (sess->client_myds->client_addr->sa_family) {
case AF_INET: {
struct sockaddr_in *ipv4 = (struct sockaddr_in *)sess->client_myds->client_addr;
char buf[BUFLEN];
inet_ntop(sess->client_myds->client_addr->sa_family, &ipv4->sin_addr, buf, BUFLEN);
sess->client_myds->addr.addr = strdup(buf);
sess->client_myds->addr.port = htons(ipv4->sin_port);
char buf[INET_ADDRSTRLEN];
inet_ntop(sess->client_myds->client_addr->sa_family, &ipv4->sin_addr, buf, INET_ADDRSTRLEN);
sess->client_myds->addr.addr = strdup(buf);
sess->client_myds->addr.port = htons(ipv4->sin_port);
break;
}
case AF_INET6: {
struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)sess->client_myds->client_addr;
char buf[BUFLEN];
inet_ntop(sess->client_myds->client_addr->sa_family, &ipv6->sin6_addr, buf, BUFLEN);
sess->client_myds->addr.addr = strdup(buf);
sess->client_myds->addr.port = htons(ipv6->sin6_port);
char buf[INET6_ADDRSTRLEN];
inet_ntop(sess->client_myds->client_addr->sa_family, &ipv6->sin6_addr, buf, INET6_ADDRSTRLEN);
sess->client_myds->addr.addr = strdup(buf);
sess->client_myds->addr.port = htons(ipv6->sin6_port);
break;
}
default:
@ -3261,7 +3264,7 @@ SQLite3_result * MySQL_Threads_Handler::SQL3_Processlist() {
switch (sess->client_myds->client_addr->sa_family) {
case AF_INET: {
struct sockaddr_in *ipv4 = (struct sockaddr_in *)sess->client_myds->client_addr;
inet_ntop(sess->client_myds->client_addr->sa_family, &ipv4->sin_addr, buf, BUFLEN);
inet_ntop(sess->client_myds->client_addr->sa_family, &ipv4->sin_addr, buf, INET_ADDRSTRLEN);
pta[4] = strdup(buf);
sprintf(port, "%d", ntohs(ipv4->sin_port));
pta[5] = strdup(port);
@ -3269,7 +3272,7 @@ SQLite3_result * MySQL_Threads_Handler::SQL3_Processlist() {
}
case AF_INET6: {
struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)sess->client_myds->client_addr;
inet_ntop(sess->client_myds->client_addr->sa_family, &ipv6->sin6_addr, buf, BUFLEN);
inet_ntop(sess->client_myds->client_addr->sa_family, &ipv6->sin6_addr, buf, INET6_ADDRSTRLEN);
pta[4] = strdup(buf);
sprintf(port, "%d", ntohs(ipv6->sin6_port));
pta[5] = strdup(port);
@ -3296,7 +3299,7 @@ SQLite3_result * MySQL_Threads_Handler::SQL3_Processlist() {
switch (addr.sa_family) {
case AF_INET: {
struct sockaddr_in *ipv4 = (struct sockaddr_in *)&addr;
inet_ntop(addr.sa_family, &ipv4->sin_addr, buf, BUFLEN);
inet_ntop(addr.sa_family, &ipv4->sin_addr, buf, INET_ADDRSTRLEN);
pta[7] = strdup(buf);
sprintf(port, "%d", ntohs(ipv4->sin_port));
pta[8] = strdup(port);
@ -3304,7 +3307,7 @@ SQLite3_result * MySQL_Threads_Handler::SQL3_Processlist() {
}
case AF_INET6: {
struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)&addr;
inet_ntop(addr.sa_family, &ipv6->sin6_addr, buf, BUFLEN);
inet_ntop(addr.sa_family, &ipv6->sin6_addr, buf, INET6_ADDRSTRLEN);
pta[7] = strdup(buf);
sprintf(port, "%d", ntohs(ipv6->sin6_port));
pta[8] = strdup(port);

@ -603,7 +603,8 @@ handler_again:
parent->connect_error(mysql_errno(mysql));
break;
case ASYNC_CONNECT_TIMEOUT:
proxy_error("Connect timeout on %s:%d : %llu - %llu = %llu\n", parent->address, parent->port, myds->sess->thread->curtime , myds->wait_until, myds->sess->thread->curtime - myds->wait_until);
//proxy_error("Connect timeout on %s:%d : %llu - %llu = %llu\n", parent->address, parent->port, myds->sess->thread->curtime , myds->wait_until, myds->sess->thread->curtime - myds->wait_until);
proxy_error("Connect timeout on %s:%d : exceeded by %lluus\n", myds->sess->thread->curtime - myds->wait_until);
parent->connect_error(mysql_errno(mysql));
break;
case ASYNC_CHANGE_USER_START:
@ -1389,7 +1390,9 @@ void MySQL_Connection::async_free_result() {
query.stmt_result=NULL;
}
if (query.stmt) {
mysql_stmt_free_result(query.stmt);
if (query.stmt->mysql) {
mysql_stmt_free_result(query.stmt);
}
}
if (mysql_result) {
mysql_free_result(mysql_result);

Loading…
Cancel
Save