Merge branch '2.3' into develop
This commit is contained in:
@ -4659,6 +4659,10 @@ json_t* config_maxscale_to_json(const char* host)
|
||||
CN_QUERY_CLASSIFIER_CACHE_SIZE,
|
||||
json_integer(cnf->qc_cache_properties.max_size));
|
||||
|
||||
json_object_set_new(param, CN_RETAIN_LAST_STATEMENTS, json_integer(session_get_retain_last_statements()));
|
||||
json_object_set_new(param, CN_DUMP_LAST_STATEMENTS, json_string(session_get_dump_statements_str()));
|
||||
json_object_set_new(param, CN_LOAD_PERSISTED_CONFIGS, json_boolean(cnf->load_persisted_configs));
|
||||
|
||||
json_t* attr = json_object();
|
||||
time_t started = maxscale_started();
|
||||
time_t activated = started + MXS_CLOCK_TO_SEC(cnf->promoted_at);
|
||||
|
@ -99,7 +99,6 @@ static inline DCB* dcb_find_in_list(DCB* dcb);
|
||||
static void dcb_stop_polling_and_shutdown(DCB* dcb);
|
||||
static bool dcb_maybe_add_persistent(DCB*);
|
||||
static inline bool dcb_write_parameter_check(DCB* dcb, GWBUF* queue);
|
||||
static int dcb_bytes_readable(DCB* dcb);
|
||||
static int dcb_read_no_bytes_available(DCB* dcb, int nreadtotal);
|
||||
static int dcb_create_SSL(DCB* dcb, SSL_LISTENER* ssl);
|
||||
static int dcb_read_SSL(DCB* dcb, GWBUF** head);
|
||||
@ -586,9 +585,10 @@ int dcb_read(DCB* dcb,
|
||||
* Find the number of bytes available for the DCB's socket
|
||||
*
|
||||
* @param dcb The DCB to read from
|
||||
*
|
||||
* @return -1 on error, otherwise the total number of bytes available
|
||||
*/
|
||||
static int dcb_bytes_readable(DCB* dcb)
|
||||
int dcb_bytes_readable(DCB* dcb)
|
||||
{
|
||||
int bytesavailable;
|
||||
|
||||
|
@ -1458,9 +1458,16 @@ std::string get_canonical(GWBUF* querybuf)
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (is_space(*it) && (i == 0 || is_space(rval[i - 1])))
|
||||
else if (is_space(*it))
|
||||
{
|
||||
// Repeating space, skip it
|
||||
if (i == 0 || is_space(rval[i - 1]))
|
||||
{
|
||||
// Leading or repeating whitespace, skip it
|
||||
}
|
||||
else
|
||||
{
|
||||
rval[i++] = ' ';
|
||||
}
|
||||
}
|
||||
else if (*it == '/' && is_next(it, buf.end(), "/*"))
|
||||
{
|
||||
@ -1564,6 +1571,12 @@ std::string get_canonical(GWBUF* querybuf)
|
||||
mxb_assert(it != buf.end());
|
||||
}
|
||||
|
||||
// Remove trailing whitespace
|
||||
while (i > 0 && is_space(rval[i - 1]))
|
||||
{
|
||||
--i;
|
||||
}
|
||||
|
||||
// Shrink the buffer so that the internal bookkeeping of std::string remains up to date
|
||||
rval.resize(i);
|
||||
|
||||
|
@ -938,6 +938,11 @@ void session_set_retain_last_statements(uint32_t n)
|
||||
this_unit.retain_last_statements = n;
|
||||
}
|
||||
|
||||
uint32_t session_get_retain_last_statements()
|
||||
{
|
||||
return this_unit.retain_last_statements;
|
||||
}
|
||||
|
||||
void session_set_dump_statements(session_dump_statements_t value)
|
||||
{
|
||||
this_unit.dump_statements = value;
|
||||
@ -948,6 +953,25 @@ session_dump_statements_t session_get_dump_statements()
|
||||
return this_unit.dump_statements;
|
||||
}
|
||||
|
||||
const char* session_get_dump_statements_str()
|
||||
{
|
||||
switch (this_unit.dump_statements)
|
||||
{
|
||||
case SESSION_DUMP_STATEMENTS_NEVER:
|
||||
return "never";
|
||||
|
||||
case SESSION_DUMP_STATEMENTS_ON_CLOSE:
|
||||
return "on_close";
|
||||
|
||||
case SESSION_DUMP_STATEMENTS_ON_ERROR:
|
||||
return "on_error";
|
||||
|
||||
default:
|
||||
mxb_assert(!true);
|
||||
return "unknown";
|
||||
}
|
||||
}
|
||||
|
||||
void session_retain_statement(MXS_SESSION* pSession, GWBUF* pBuffer)
|
||||
{
|
||||
static_cast<Session*>(pSession)->retain_statement(pBuffer);
|
||||
@ -1380,7 +1404,7 @@ void Session::retain_statement(GWBUF* pBuffer)
|
||||
{
|
||||
mxb_assert(m_last_queries.size() <= m_retain_last_statements);
|
||||
|
||||
std::shared_ptr<GWBUF> sBuffer(gwbuf_clone(pBuffer));
|
||||
std::shared_ptr<GWBUF> sBuffer(gwbuf_clone(pBuffer), std::default_delete<GWBUF>());
|
||||
|
||||
m_last_queries.push_front(QueryInfo(sBuffer));
|
||||
|
||||
|
@ -156,6 +156,18 @@ describe("Server State", function() {
|
||||
})
|
||||
});
|
||||
|
||||
it("force server into maintenance", function() {
|
||||
return request.put(base_url + "/servers/" + server.data.id + "/set?state=maintenance&force=yes")
|
||||
.then(function(resp) {
|
||||
return request.get(base_url + "/servers/" + server.data.id)
|
||||
})
|
||||
.then(function(resp) {
|
||||
var srv = JSON.parse(resp)
|
||||
srv.data.attributes.state.should.match(/Maintenance/)
|
||||
srv.data.attributes.statistics.connections.should.be.equal(0)
|
||||
})
|
||||
});
|
||||
|
||||
it("clear maintenance", function() {
|
||||
return request.put(base_url + "/servers/" + server.data.id + "/clear?state=maintenance")
|
||||
.then(function(resp) {
|
||||
|
Reference in New Issue
Block a user