Fix to bug # 634, http://bugs.skysql.com/show_bug.cgi?id=634
COM_SHOW_SLAVE_STAT wasn't classified but it was treated as 'unknown' and thus routed to master.
This commit is contained in:
@ -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;
|
||||||
|
|
||||||
|
@ -1212,25 +1212,27 @@ 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,
|
||||||
&backend_ref[i],
|
&backend_ref[i],
|
||||||
rses->rses_config.rw_slave_select_criteria);
|
rses->rses_config.rw_slave_select_criteria);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOGIF(LT, (skygw_log_write(
|
LOGIF(LT, (skygw_log_write(
|
||||||
LOGFILE_TRACE,
|
LOGFILE_TRACE,
|
||||||
"Server %s:%d is too much behind the "
|
"Server %s:%d is too much behind the "
|
||||||
"master, %d s. and can't be chosen.",
|
"master, %d s. and can't be chosen.",
|
||||||
b->backend_server->name,
|
b->backend_server->name,
|
||||||
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 */
|
||||||
@ -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
|
||||||
@ -2204,7 +2206,7 @@ static int routeQuery(
|
|||||||
|
|
||||||
LOGIF(LT, (skygw_log_write(
|
LOGIF(LT, (skygw_log_write(
|
||||||
LOGFILE_TRACE,
|
LOGFILE_TRACE,
|
||||||
"Route query to %s\t%s:%d <",
|
"Route query to %s \t%s:%d <",
|
||||||
(SERVER_IS_MASTER(bref->bref_backend->backend_server) ?
|
(SERVER_IS_MASTER(bref->bref_backend->backend_server) ?
|
||||||
"master" : "slave"),
|
"master" : "slave"),
|
||||||
bref->bref_backend->backend_server->name,
|
bref->bref_backend->backend_server->name,
|
||||||
@ -3948,12 +3950,12 @@ static bool route_session_write(
|
|||||||
{
|
{
|
||||||
LOGIF(LT, (skygw_log_write(
|
LOGIF(LT, (skygw_log_write(
|
||||||
LOGFILE_TRACE,
|
LOGFILE_TRACE,
|
||||||
"Route query to %s\t%s:%d%s",
|
"Route query to %s \t%s:%d%s",
|
||||||
(SERVER_IS_MASTER(backend_ref[i].bref_backend->backend_server) ?
|
(SERVER_IS_MASTER(backend_ref[i].bref_backend->backend_server) ?
|
||||||
"master" : "slave"),
|
"master" : "slave"),
|
||||||
backend_ref[i].bref_backend->backend_server->name,
|
backend_ref[i].bref_backend->backend_server->name,
|
||||||
backend_ref[i].bref_backend->backend_server->port,
|
backend_ref[i].bref_backend->backend_server->port,
|
||||||
(i+1==router_cli_ses->rses_nbackends ? " <" : ""))));
|
(i+1==router_cli_ses->rses_nbackends ? " <" : " "))));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (BREF_IS_IN_USE((&backend_ref[i])))
|
if (BREF_IS_IN_USE((&backend_ref[i])))
|
||||||
@ -4003,12 +4005,12 @@ static bool route_session_write(
|
|||||||
{
|
{
|
||||||
LOGIF(LT, (skygw_log_write(
|
LOGIF(LT, (skygw_log_write(
|
||||||
LOGFILE_TRACE,
|
LOGFILE_TRACE,
|
||||||
"Route query to %s\t%s:%d%s",
|
"Route query to %s \t%s:%d%s",
|
||||||
(SERVER_IS_MASTER(backend_ref[i].bref_backend->backend_server) ?
|
(SERVER_IS_MASTER(backend_ref[i].bref_backend->backend_server) ?
|
||||||
"master" : "slave"),
|
"master" : "slave"),
|
||||||
backend_ref[i].bref_backend->backend_server->name,
|
backend_ref[i].bref_backend->backend_server->name,
|
||||||
backend_ref[i].bref_backend->backend_server->port,
|
backend_ref[i].bref_backend->backend_server->port,
|
||||||
(i+1==router_cli_ses->rses_nbackends ? " <" : ""))));
|
(i+1==router_cli_ses->rses_nbackends ? " <" : " "))));
|
||||||
}
|
}
|
||||||
|
|
||||||
scur = backend_ref_get_sescmd_cursor(&backend_ref[i]);
|
scur = backend_ref_get_sescmd_cursor(&backend_ref[i]);
|
||||||
|
Reference in New Issue
Block a user