Merge branch '2.3' into 2.4

This commit is contained in:
Markus Mäkelä 2020-08-28 14:24:16 +03:00
commit caedf79464
No known key found for this signature in database
GPG Key ID: 5CE746D557ACC499
5 changed files with 44 additions and 1 deletions

View File

@ -771,6 +771,19 @@ long-running sessions might cause MariaDB MaxScale to consume a growing amount
of memory unless the sessions are closed. This can be solved by adjusting the
value of `max_sescmd_history`.
### Routing to previous target
In the following cases, a query is routed to the same server where the previous
query was executed. If no previous target is found, the query is routed to the
current master.
* If a query uses the `FOUND_ROWS()` function, it will be routed to the server
where the last query was executed. This is done with the assumption that a
query with `SQL_CALC_FOUND_ROWS` was previously executed.
* COM_STMT_FETCH_ROWS will always be routed to the same server where the
COM_STMT_EXECUTE was routed.
## Limitations
Read queries are routed to the master server in the following situations:

View File

@ -208,6 +208,11 @@ const session_fields = [
path: 'attributes.idle',
description: 'How long the session has been idle, in seconds'
},
{
name: 'Client TLS Cipher',
path: 'attributes.client.cipher',
description: 'Client TLS cipher'
},
{
name: 'Connections',
path: 'attributes.connections[].server',

View File

@ -3256,7 +3256,16 @@ json_t* dcb_to_json(DCB* dcb)
char buf[25];
snprintf(buf, sizeof(buf), "%p", dcb);
json_object_set_new(obj, "id", json_string(buf));
json_object_set_new(obj, "server", json_string(dcb->server->name()));
if (dcb->server)
{
json_object_set_new(obj, "server", json_string(dcb->server->name()));
}
if (dcb->ssl)
{
json_object_set_new(obj, "cipher", json_string(SSL_get_cipher_name(dcb->ssl)));
}
if (dcb->func.diagnostics_json)
{

View File

@ -1108,6 +1108,21 @@ QueryClassifier::RouteInfo QueryClassifier::update_route_info(
process_routing_hints(pBuffer->hint, &route_target);
if (route_target == TARGET_SLAVE)
{
const QC_FUNCTION_INFO* infos = nullptr;
size_t n_infos = 0;
qc_get_function_info(pBuffer, &infos, &n_infos);
for (size_t i = 0; i < n_infos; ++i)
{
if (strcasecmp(infos[i].name, "FOUND_ROWS") == 0)
{
route_target = TARGET_LAST_USED;
}
}
}
if (session_trx_is_ending(m_pSession)
|| qc_query_is_type(type_mask, QUERY_TYPE_BEGIN_TRX))
{

View File

@ -770,6 +770,7 @@ json_t* session_json_data(const Session* session, const char* host, bool rdns)
}
json_object_set_new(attr, "connections", dcb_arr);
json_object_set_new(attr, "client", dcb_to_json(session->client_dcb));
json_t* queries = session->queries_as_json();
json_object_set_new(attr, "queries", queries);