MXS-1992 Allow changing the QC cache size
This commit is contained in:
parent
dae6cf0648
commit
185758ef06
@ -35,6 +35,7 @@ MXS_BEGIN_DECLS
|
||||
#define MXS_JSON_API_TASKS "/maxscale/tasks/"
|
||||
#define MXS_JSON_API_MODULES "/maxscale/modules/"
|
||||
#define MXS_JSON_API_QC_STATS "/maxscale/qc_stats/"
|
||||
#define MXS_JSON_API_QC "/maxscale/query_classifier/"
|
||||
#define MXS_JSON_API_USERS "/users/"
|
||||
|
||||
/**
|
||||
|
@ -15,14 +15,14 @@
|
||||
|
||||
#include "internal/config_runtime.h"
|
||||
|
||||
#include <strings.h>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <set>
|
||||
#include <iterator>
|
||||
#include <algorithm>
|
||||
#include <tuple>
|
||||
#include <functional>
|
||||
#include <iterator>
|
||||
#include <set>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <strings.h>
|
||||
#include <tuple>
|
||||
#include <vector>
|
||||
|
||||
#include <maxscale/atomic.h>
|
||||
@ -31,14 +31,15 @@
|
||||
#include <maxscale/json_api.h>
|
||||
#include <maxscale/paths.h>
|
||||
#include <maxscale/platform.h>
|
||||
#include <maxscale/router.h>
|
||||
#include <maxscale/spinlock.hh>
|
||||
#include <maxscale/users.h>
|
||||
#include <maxscale/router.h>
|
||||
|
||||
#include "internal/config.hh"
|
||||
#include "internal/monitor.h"
|
||||
#include "internal/modules.h"
|
||||
#include "internal/filter.hh"
|
||||
#include "internal/modules.h"
|
||||
#include "internal/monitor.h"
|
||||
#include "internal/query_classifier.hh"
|
||||
|
||||
typedef std::set<std::string> StringSet;
|
||||
typedef std::vector<std::string> StringVector;
|
||||
@ -2538,3 +2539,40 @@ bool runtime_alter_maxscale_from_json(json_t* new_json)
|
||||
|
||||
return rval;
|
||||
}
|
||||
|
||||
bool validate_qc_json(json_t* json)
|
||||
{
|
||||
json_t* param = mxs_json_pointer(json, MXS_JSON_PTR_PARAMETERS);
|
||||
bool rval = false;
|
||||
|
||||
if (param && json_is_object(param))
|
||||
{
|
||||
rval = is_count_or_null(param, "cache_size");
|
||||
}
|
||||
|
||||
return rval;
|
||||
}
|
||||
|
||||
// TODO: Expose everything needed so that this function could be
|
||||
// TODO: part of the query classifier API.
|
||||
bool runtime_alter_qc_from_json(json_t* json)
|
||||
{
|
||||
bool rval = false;
|
||||
|
||||
if (validate_qc_json(json))
|
||||
{
|
||||
rval = true;
|
||||
|
||||
json_t* param = mxs_json_pointer(json, MXS_JSON_PTR_PARAMETERS);
|
||||
json_t* value;
|
||||
|
||||
if ((value = mxs_json_pointer(param, "cache_size")))
|
||||
{
|
||||
QC_CACHE_PROPERTIES cache_properties = { json_integer_value(value) };
|
||||
|
||||
qc_set_cache_properties(&cache_properties);
|
||||
}
|
||||
}
|
||||
|
||||
return rval;
|
||||
}
|
||||
|
@ -389,3 +389,12 @@ bool runtime_remove_user(const char* id, enum user_type type);
|
||||
* @return True if the core parameters are valid and were successfully applied
|
||||
*/
|
||||
bool runtime_alter_maxscale_from_json(json_t* new_json);
|
||||
|
||||
/**
|
||||
* @brief Alter core query classifier parameters from JSON.
|
||||
*
|
||||
* @param new_json JSON defining the new parameters.
|
||||
*
|
||||
* @return True if the core parameters are valid and were successfully applied
|
||||
*/
|
||||
bool runtime_alter_qc_from_json(json_t* new_json);
|
||||
|
@ -14,6 +14,7 @@
|
||||
|
||||
#include <maxscale/cppdefs.hh>
|
||||
#include <maxscale/query_classifier.h>
|
||||
#include <maxscale/jansson.hh>
|
||||
|
||||
MXS_BEGIN_DECLS
|
||||
|
||||
@ -36,4 +37,13 @@ typedef enum qc_trx_parse_using
|
||||
*/
|
||||
uint32_t qc_get_trx_type_mask_using(GWBUF* stmt, qc_trx_parse_using_t use);
|
||||
|
||||
/**
|
||||
* Generic query classifier information.
|
||||
*
|
||||
* @param zHost The MaxScale host.
|
||||
*
|
||||
* @return A json object containing information.
|
||||
*/
|
||||
std::unique_ptr<json_t> qc_as_json(const char* zHost);
|
||||
|
||||
MXS_END_DECLS
|
||||
|
@ -13,29 +13,30 @@
|
||||
#include "internal/resource.hh"
|
||||
|
||||
#include <list>
|
||||
#include <sstream>
|
||||
#include <map>
|
||||
#include <sstream>
|
||||
|
||||
#include <maxscale/adminusers.h>
|
||||
#include <maxscale/alloc.h>
|
||||
#include <maxscale/jansson.hh>
|
||||
#include <maxscale/spinlock.hh>
|
||||
#include <maxscale/json_api.h>
|
||||
#include <maxscale/housekeeper.h>
|
||||
#include <maxscale/http.hh>
|
||||
#include <maxscale/adminusers.h>
|
||||
#include <maxscale/jansson.hh>
|
||||
#include <maxscale/json_api.h>
|
||||
#include <maxscale/modulecmd.h>
|
||||
#include <maxscale/semaphore.hh>
|
||||
#include <maxscale/server.hh>
|
||||
#include <maxscale/spinlock.hh>
|
||||
|
||||
#include "internal/config_runtime.h"
|
||||
#include "internal/filter.hh"
|
||||
#include "internal/httprequest.hh"
|
||||
#include "internal/httpresponse.hh"
|
||||
#include "internal/session.h"
|
||||
#include "internal/filter.hh"
|
||||
#include "internal/monitor.h"
|
||||
#include "internal/service.hh"
|
||||
#include "internal/config_runtime.h"
|
||||
#include "internal/modules.h"
|
||||
#include "internal/monitor.h"
|
||||
#include "internal/query_classifier.hh"
|
||||
#include "internal/routingworker.hh"
|
||||
#include "internal/service.hh"
|
||||
#include "internal/session.h"
|
||||
|
||||
using std::list;
|
||||
using std::map;
|
||||
@ -426,6 +427,18 @@ HttpResponse cb_alter_logs(const HttpRequest& request)
|
||||
return HttpResponse(MHD_HTTP_FORBIDDEN, runtime_get_json_error());
|
||||
}
|
||||
|
||||
HttpResponse cb_alter_qc(const HttpRequest& request)
|
||||
{
|
||||
ss_dassert(request.get_json());
|
||||
|
||||
if (runtime_alter_qc_from_json(request.get_json()))
|
||||
{
|
||||
return HttpResponse(MHD_HTTP_NO_CONTENT);
|
||||
}
|
||||
|
||||
return HttpResponse(MHD_HTTP_FORBIDDEN, runtime_get_json_error());
|
||||
}
|
||||
|
||||
HttpResponse cb_delete_server(const HttpRequest& request)
|
||||
{
|
||||
SERVER* server = server_find_by_unique_name(request.uri_part(1).c_str());
|
||||
@ -626,6 +639,11 @@ HttpResponse cb_all_threads(const HttpRequest& request)
|
||||
return HttpResponse(MHD_HTTP_OK, mxs_rworker_list_to_json(request.host()));
|
||||
}
|
||||
|
||||
HttpResponse cb_qc(const HttpRequest& request)
|
||||
{
|
||||
return HttpResponse(MHD_HTTP_OK, qc_as_json(request.host()).release());
|
||||
}
|
||||
|
||||
HttpResponse cb_thread(const HttpRequest& request)
|
||||
{
|
||||
int id = atoi(request.last_uri_part().c_str());
|
||||
@ -889,6 +907,7 @@ public:
|
||||
m_get.push_back(SResource(new Resource(cb_get_session, 2, "sessions", ":session")));
|
||||
|
||||
m_get.push_back(SResource(new Resource(cb_maxscale, 1, "maxscale")));
|
||||
m_get.push_back(SResource(new Resource(cb_qc, 2, "maxscale", "query_classifier")));
|
||||
m_get.push_back(SResource(new Resource(cb_all_threads, 2, "maxscale", "threads")));
|
||||
m_get.push_back(SResource(new Resource(cb_thread, 3, "maxscale", "threads", ":thread")));
|
||||
m_get.push_back(SResource(new Resource(cb_logs, 2, "maxscale", "logs")));
|
||||
@ -936,6 +955,7 @@ public:
|
||||
m_patch.push_back(SResource(new Resource(cb_alter_service, 2, "services", ":service")));
|
||||
m_patch.push_back(SResource(new Resource(cb_alter_logs, 2, "maxscale", "logs")));
|
||||
m_patch.push_back(SResource(new Resource(cb_alter_maxscale, 1, "maxscale")));
|
||||
m_patch.push_back(SResource(new Resource(cb_alter_qc, 2, "maxscale", "query_classifier")));
|
||||
|
||||
/** Update resource relationships directly */
|
||||
m_patch.push_back(SResource(new Resource(cb_alter_server_service_relationship, 4,
|
||||
|
Loading…
x
Reference in New Issue
Block a user