Merge branch '2.3' into 2.4

This commit is contained in:
Markus Mäkelä
2020-08-28 14:24:16 +03:00
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 of memory unless the sessions are closed. This can be solved by adjusting the
value of `max_sescmd_history`. 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 ## Limitations
Read queries are routed to the master server in the following situations: Read queries are routed to the master server in the following situations:

View File

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

View File

@ -3256,7 +3256,16 @@ json_t* dcb_to_json(DCB* dcb)
char buf[25]; char buf[25];
snprintf(buf, sizeof(buf), "%p", dcb); snprintf(buf, sizeof(buf), "%p", dcb);
json_object_set_new(obj, "id", json_string(buf)); 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) if (dcb->func.diagnostics_json)
{ {

View File

@ -1108,6 +1108,21 @@ QueryClassifier::RouteInfo QueryClassifier::update_route_info(
process_routing_hints(pBuffer->hint, &route_target); 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) if (session_trx_is_ending(m_pSession)
|| qc_query_is_type(type_mask, QUERY_TYPE_BEGIN_TRX)) || 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, "connections", dcb_arr);
json_object_set_new(attr, "client", dcb_to_json(session->client_dcb));
json_t* queries = session->queries_as_json(); json_t* queries = session->queries_as_json();
json_object_set_new(attr, "queries", queries); json_object_set_new(attr, "queries", queries);