Merge branch 'release-1.0GA' of https://github.com/mariadb-corporation/MaxScale into release-1.0GA
This commit is contained in:
@ -1,3 +1,6 @@
|
|||||||
|
if(LOG_DEBUG)
|
||||||
|
add_definitions(-DSS_LOG_DEBUG)
|
||||||
|
endif()
|
||||||
add_library(log_manager SHARED log_manager.cc)
|
add_library(log_manager SHARED log_manager.cc)
|
||||||
target_link_libraries(log_manager pthread aio stdc++)
|
target_link_libraries(log_manager pthread aio stdc++)
|
||||||
install(TARGETS log_manager DESTINATION lib)
|
install(TARGETS log_manager DESTINATION lib)
|
||||||
|
|||||||
@ -1093,7 +1093,7 @@ static char* blockbuf_get_writepos(
|
|||||||
|
|
||||||
simple_mutex_unlock(&bb->bb_mutex);
|
simple_mutex_unlock(&bb->bb_mutex);
|
||||||
simple_mutex_lock(&bb_list->mlist_mutex, true);
|
simple_mutex_lock(&bb_list->mlist_mutex, true);
|
||||||
|
node = bb_list->mlist_first;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -3111,9 +3111,9 @@ static int find_last_seqno(
|
|||||||
{
|
{
|
||||||
if (snstr != NULL && i == seqnoidx)
|
if (snstr != NULL && i == seqnoidx)
|
||||||
{
|
{
|
||||||
strcat(filename, snstr); /*< add sequence number */
|
strncat(filename, snstr, NAME_MAX - 1); /*< add sequence number */
|
||||||
}
|
}
|
||||||
strcat(filename, p->sp_string);
|
strncat(filename, p->sp_string, NAME_MAX - 1);
|
||||||
|
|
||||||
if (p->sp_next == NULL)
|
if (p->sp_next == NULL)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -619,6 +619,7 @@ static skygw_query_type_t resolve_query_type(
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case SQLCOM_SELECT:
|
case SQLCOM_SELECT:
|
||||||
|
case SQLCOM_SHOW_SLAVE_STAT:
|
||||||
type |= QUERY_TYPE_READ;
|
type |= QUERY_TYPE_READ;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@ -293,7 +293,7 @@ GWBUF *modutil_create_mysql_err_msg(
|
|||||||
const char *msg)
|
const char *msg)
|
||||||
{
|
{
|
||||||
uint8_t *outbuf = NULL;
|
uint8_t *outbuf = NULL;
|
||||||
uint8_t mysql_payload_size = 0;
|
uint32_t mysql_payload_size = 0;
|
||||||
uint8_t mysql_packet_header[4];
|
uint8_t mysql_packet_header[4];
|
||||||
uint8_t *mysql_payload = NULL;
|
uint8_t *mysql_payload = NULL;
|
||||||
uint8_t field_count = 0;
|
uint8_t field_count = 0;
|
||||||
|
|||||||
@ -227,7 +227,8 @@ static int reported = 0;
|
|||||||
*/
|
*/
|
||||||
int secrets_writeKeys(char *secret_file)
|
int secrets_writeKeys(char *secret_file)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd,randfd;
|
||||||
|
unsigned int randval;
|
||||||
MAXKEYS key;
|
MAXKEYS key;
|
||||||
|
|
||||||
/* Open for writing | Create | Truncate the file for writing */
|
/* Open for writing | Create | Truncate the file for writing */
|
||||||
@ -243,7 +244,28 @@ MAXKEYS key;
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
srand(time(NULL));
|
/* Open for writing | Create | Truncate the file for writing */
|
||||||
|
if ((randfd = open("/dev/random", O_RDONLY)) < 0)
|
||||||
|
{
|
||||||
|
LOGIF(LE, (skygw_log_write_flush(
|
||||||
|
LOGFILE_ERROR,
|
||||||
|
"Error : failed opening /dev/random. Error %d, %s.",
|
||||||
|
errno,
|
||||||
|
strerror(errno))));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(read(randfd,(void*)&randval,sizeof(unsigned int)) < 1)
|
||||||
|
{
|
||||||
|
LOGIF(LE, (skygw_log_write_flush(
|
||||||
|
LOGFILE_ERROR,
|
||||||
|
"Error : failed to read /dev/random.")));
|
||||||
|
close(randfd);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
close(randfd);
|
||||||
|
srand(randval);
|
||||||
secrets_random_str(key.enckey, MAXSCALE_KEYLEN);
|
secrets_random_str(key.enckey, MAXSCALE_KEYLEN);
|
||||||
secrets_random_str(key.initvector, MAXSCALE_IV_LEN);
|
secrets_random_str(key.initvector, MAXSCALE_IV_LEN);
|
||||||
|
|
||||||
|
|||||||
@ -231,9 +231,9 @@ int set_and_get_mysql_users_wildcards(char *username, char *hostname, char *pass
|
|||||||
service->users = mysql_users;
|
service->users = mysql_users;
|
||||||
|
|
||||||
if (db_from != NULL)
|
if (db_from != NULL)
|
||||||
strcpy(data->db, db_from);
|
strncpy(data->db, db_from,MYSQL_DATABASE_MAXLEN);
|
||||||
else
|
else
|
||||||
strcpy(data->db, "");
|
strncpy(data->db, "",MYSQL_DATABASE_MAXLEN);
|
||||||
|
|
||||||
/* freed by dcb_free(dcb) */
|
/* freed by dcb_free(dcb) */
|
||||||
dcb->data = data;
|
dcb->data = data;
|
||||||
|
|||||||
@ -752,7 +752,7 @@ int log_no_master = 1;
|
|||||||
/* log master detection failure od first master becomes available after failure */
|
/* log master detection failure od first master becomes available after failure */
|
||||||
if (root_master && mon_status_changed(root_master) && !(root_master->server->status & SERVER_STALE_STATUS)) {
|
if (root_master && mon_status_changed(root_master) && !(root_master->server->status & SERVER_STALE_STATUS)) {
|
||||||
if (root_master->pending_status & (SERVER_MASTER)) {
|
if (root_master->pending_status & (SERVER_MASTER)) {
|
||||||
if (!(root_master->mon_prev_status & SERVER_STALE_STATUS)) {
|
if (!(root_master->mon_prev_status & SERVER_STALE_STATUS) && !(root_master->server->status & SERVER_MAINT)) {
|
||||||
LOGIF(LE, (skygw_log_write_flush(
|
LOGIF(LE, (skygw_log_write_flush(
|
||||||
LOGFILE_ERROR,
|
LOGFILE_ERROR,
|
||||||
"Info: A Master Server is now available: %s:%i",
|
"Info: A Master Server is now available: %s:%i",
|
||||||
|
|||||||
@ -177,7 +177,7 @@ HTTPD_session *client_data = NULL;
|
|||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!ISspace(buf[j]) && (i < sizeof(url) - 1) && (j < sizeof(buf) - 1)) {
|
while ((j < sizeof(buf) - 1) && !ISspace(buf[j]) && (i < sizeof(url) - 1)) {
|
||||||
url[i] = buf[j];
|
url[i] = buf[j];
|
||||||
i++; j++;
|
i++; j++;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -834,15 +834,19 @@ static int gw_error_backend_event(DCB *dcb)
|
|||||||
char buf[100];
|
char buf[100];
|
||||||
|
|
||||||
len = sizeof(error);
|
len = sizeof(error);
|
||||||
|
|
||||||
if (getsockopt(dcb->fd, SOL_SOCKET, SO_ERROR, &error, &len) == 0)
|
if (getsockopt(dcb->fd, SOL_SOCKET, SO_ERROR, &error, &len) == 0)
|
||||||
|
{
|
||||||
|
if (error != 0)
|
||||||
{
|
{
|
||||||
strerror_r(error, buf, 100);
|
strerror_r(error, buf, 100);
|
||||||
LOGIF(LE, (skygw_log_write_flush(
|
LOGIF(LE, (skygw_log_write_flush(
|
||||||
LOGFILE_ERROR,
|
LOGFILE_ERROR,
|
||||||
"DCB in state %s got error '%s'.",
|
"DCB in state %s got error '%s'.",
|
||||||
gw_dcb_state2string(dcb->state),
|
STRDCBSTATE(dcb->state),
|
||||||
buf)));
|
buf)));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
errbuf = mysql_create_custom_error(
|
errbuf = mysql_create_custom_error(
|
||||||
@ -874,6 +878,8 @@ static int gw_error_backend_event(DCB *dcb)
|
|||||||
|
|
||||||
len = sizeof(error);
|
len = sizeof(error);
|
||||||
if (getsockopt(dcb->fd, SOL_SOCKET, SO_ERROR, &error, &len) == 0)
|
if (getsockopt(dcb->fd, SOL_SOCKET, SO_ERROR, &error, &len) == 0)
|
||||||
|
{
|
||||||
|
if (error != 0)
|
||||||
{
|
{
|
||||||
strerror_r(error, buf, 100);
|
strerror_r(error, buf, 100);
|
||||||
LOGIF(LE, (skygw_log_write_flush(
|
LOGIF(LE, (skygw_log_write_flush(
|
||||||
@ -881,6 +887,7 @@ static int gw_error_backend_event(DCB *dcb)
|
|||||||
"Error '%s' in session that is not ready for routing.",
|
"Error '%s' in session that is not ready for routing.",
|
||||||
buf)));
|
buf)));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
gwbuf_free(errbuf);
|
gwbuf_free(errbuf);
|
||||||
goto retblock;
|
goto retblock;
|
||||||
}
|
}
|
||||||
@ -1322,7 +1329,7 @@ static int gw_change_user(
|
|||||||
|
|
||||||
/* now get the user, after 4 bytes header and 1 byte command */
|
/* now get the user, after 4 bytes header and 1 byte command */
|
||||||
client_auth_packet += 5;
|
client_auth_packet += 5;
|
||||||
strcpy(username, (char *)client_auth_packet);
|
strncpy(username, (char *)client_auth_packet,MYSQL_USER_MAXLEN);
|
||||||
client_auth_packet += strlen(username) + 1;
|
client_auth_packet += strlen(username) + 1;
|
||||||
|
|
||||||
/* get the auth token len */
|
/* get the auth token len */
|
||||||
@ -1343,7 +1350,7 @@ static int gw_change_user(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* get new database name */
|
/* get new database name */
|
||||||
strcpy(database, (char *)client_auth_packet);
|
strncpy(database, (char *)client_auth_packet,MYSQL_DATABASE_MAXLEN);
|
||||||
|
|
||||||
/* get character set */
|
/* get character set */
|
||||||
if (strlen(database)) {
|
if (strlen(database)) {
|
||||||
@ -1356,7 +1363,7 @@ static int gw_change_user(
|
|||||||
memcpy(&backend_protocol->charset, client_auth_packet, sizeof(int));
|
memcpy(&backend_protocol->charset, client_auth_packet, sizeof(int));
|
||||||
|
|
||||||
/* save current_database name */
|
/* save current_database name */
|
||||||
strcpy(current_database, current_session->db);
|
strncpy(current_database, current_session->db,MYSQL_DATABASE_MAXLEN);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Now clear database name in dcb as we don't do local authentication on db name for change user.
|
* Now clear database name in dcb as we don't do local authentication on db name for change user.
|
||||||
|
|||||||
@ -969,7 +969,7 @@ GWBUF* mysql_create_custom_error(
|
|||||||
const char* msg)
|
const char* msg)
|
||||||
{
|
{
|
||||||
uint8_t* outbuf = NULL;
|
uint8_t* outbuf = NULL;
|
||||||
uint8_t mysql_payload_size = 0;
|
uint32_t mysql_payload_size = 0;
|
||||||
uint8_t mysql_packet_header[4];
|
uint8_t mysql_packet_header[4];
|
||||||
uint8_t* mysql_payload = NULL;
|
uint8_t* mysql_payload = NULL;
|
||||||
uint8_t field_count = 0;
|
uint8_t field_count = 0;
|
||||||
@ -1579,7 +1579,7 @@ mysql_send_auth_error (
|
|||||||
const char *mysql_message)
|
const char *mysql_message)
|
||||||
{
|
{
|
||||||
uint8_t *outbuf = NULL;
|
uint8_t *outbuf = NULL;
|
||||||
uint8_t mysql_payload_size = 0;
|
uint32_t mysql_payload_size = 0;
|
||||||
uint8_t mysql_packet_header[4];
|
uint8_t mysql_packet_header[4];
|
||||||
uint8_t *mysql_payload = NULL;
|
uint8_t *mysql_payload = NULL;
|
||||||
uint8_t field_count = 0;
|
uint8_t field_count = 0;
|
||||||
|
|||||||
@ -1212,10 +1212,11 @@ static bool get_dcb(
|
|||||||
* backend and update assign it to new candidate if
|
* backend and update assign it to new candidate if
|
||||||
* necessary.
|
* necessary.
|
||||||
*/
|
*/
|
||||||
else if (SERVER_IS_SLAVE(b->backend_server) &&
|
else if (SERVER_IS_SLAVE(b->backend_server))
|
||||||
(max_rlag == MAX_RLAG_UNDEFINED ||
|
{
|
||||||
|
if (max_rlag == MAX_RLAG_UNDEFINED ||
|
||||||
(b->backend_server->rlag != MAX_RLAG_NOT_AVAILABLE &&
|
(b->backend_server->rlag != MAX_RLAG_NOT_AVAILABLE &&
|
||||||
b->backend_server->rlag <= max_rlag)))
|
b->backend_server->rlag <= max_rlag))
|
||||||
{
|
{
|
||||||
candidate_bref = check_candidate_bref(
|
candidate_bref = check_candidate_bref(
|
||||||
candidate_bref,
|
candidate_bref,
|
||||||
@ -1232,6 +1233,7 @@ static bool get_dcb(
|
|||||||
b->backend_server->port,
|
b->backend_server->port,
|
||||||
b->backend_server->rlag)));
|
b->backend_server->rlag)));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} /*< for */
|
} /*< for */
|
||||||
/** Assign selected DCB's pointer value */
|
/** Assign selected DCB's pointer value */
|
||||||
if (candidate_bref != NULL)
|
if (candidate_bref != NULL)
|
||||||
@ -1474,7 +1476,7 @@ static route_target_t get_route_target (
|
|||||||
QUERY_IS_TYPE(qtype, QUERY_TYPE_UNKNOWN)));
|
QUERY_IS_TYPE(qtype, QUERY_TYPE_UNKNOWN)));
|
||||||
target = TARGET_MASTER;
|
target = TARGET_MASTER;
|
||||||
}
|
}
|
||||||
#if defined(SS_DEBUG)
|
#if defined(SS_EXTRA_DEBUG)
|
||||||
LOGIF(LT, (skygw_log_write(
|
LOGIF(LT, (skygw_log_write(
|
||||||
LOGFILE_TRACE,
|
LOGFILE_TRACE,
|
||||||
"Selected target \"%s\"",
|
"Selected target \"%s\"",
|
||||||
@ -2132,14 +2134,14 @@ static int routeQuery(
|
|||||||
rlag_max);
|
rlag_max);
|
||||||
if (succp)
|
if (succp)
|
||||||
{
|
{
|
||||||
#if defined(SS_DEBUG)
|
#if defined(SS_EXTRA_DEBUG)
|
||||||
LOGIF(LT, (skygw_log_write(LOGFILE_TRACE,
|
LOGIF(LT, (skygw_log_write(LOGFILE_TRACE,
|
||||||
"Found DCB for slave.")));
|
"Found DCB for slave.")));
|
||||||
|
#endif
|
||||||
ss_dassert(get_bref_from_dcb(router_cli_ses, target_dcb) !=
|
ss_dassert(get_bref_from_dcb(router_cli_ses, target_dcb) !=
|
||||||
router_cli_ses->rses_master_ref);
|
router_cli_ses->rses_master_ref);
|
||||||
ss_dassert(get_root_master_bref(router_cli_ses) ==
|
ss_dassert(get_root_master_bref(router_cli_ses) ==
|
||||||
router_cli_ses->rses_master_ref);
|
router_cli_ses->rses_master_ref);
|
||||||
#endif
|
|
||||||
atomic_add(&inst->stats.n_slave, 1);
|
atomic_add(&inst->stats.n_slave, 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
#!/bin/sh
|
#!/bin/bash
|
||||||
NARGS=7
|
NARGS=7
|
||||||
TLOG=$1
|
TLOG=$1
|
||||||
THOST=$2
|
THOST=$2
|
||||||
|
|||||||
Reference in New Issue
Block a user