MXS-1220: Only process updated server parameters
The alteration function is only called when the value of a parameter changes. This removes some of the redundant logging that was caused by calling the alteration function with the same values.
This commit is contained in:

committed by
Markus Mäkelä

parent
84d085ef39
commit
bab7957952
@ -14,12 +14,13 @@
|
|||||||
|
|
||||||
#include <maxscale/cppdefs.hh>
|
#include <maxscale/cppdefs.hh>
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <maxscale/alloc.h>
|
||||||
|
#include <maxscale/debug.h>
|
||||||
#include <maxscale/jansson.h>
|
#include <maxscale/jansson.h>
|
||||||
#include <maxscale/utils.hh>
|
#include <maxscale/utils.hh>
|
||||||
#include <maxscale/alloc.h>
|
|
||||||
|
|
||||||
namespace maxscale
|
namespace maxscale
|
||||||
{
|
{
|
||||||
@ -83,29 +84,35 @@ static inline std::string json_to_string(json_t* json)
|
|||||||
{
|
{
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
|
|
||||||
if (json_is_string(json))
|
switch (json_typeof(json))
|
||||||
{
|
{
|
||||||
|
case JSON_STRING:
|
||||||
ss << json_string_value(json);
|
ss << json_string_value(json);
|
||||||
}
|
break;
|
||||||
else if (json_is_boolean(json))
|
|
||||||
{
|
case JSON_INTEGER:
|
||||||
ss << (json_boolean_value(json) ? "true" : "false");
|
|
||||||
}
|
|
||||||
else if (json_is_real(json))
|
|
||||||
{
|
|
||||||
ss << json_real_value(json);
|
|
||||||
}
|
|
||||||
else if (json_is_number(json))
|
|
||||||
{
|
|
||||||
ss << json_number_value(json);
|
|
||||||
}
|
|
||||||
else if (json_is_integer(json))
|
|
||||||
{
|
|
||||||
ss << json_integer_value(json);
|
ss << json_integer_value(json);
|
||||||
}
|
break;
|
||||||
else if (json_is_null(json))
|
|
||||||
{
|
case JSON_REAL:
|
||||||
ss << "";
|
ss << json_real_value(json);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case JSON_TRUE:
|
||||||
|
ss << "true";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case JSON_FALSE:
|
||||||
|
ss << "false";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case JSON_NULL:
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
ss_dassert(false);
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ss.str();
|
return ss.str();
|
||||||
|
@ -831,15 +831,13 @@ SERVER* runtime_create_server_from_json(json_t* json)
|
|||||||
return rval;
|
return rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool handle_alter_server_relations(SERVER* server, json_t* new_json)
|
bool handle_alter_server_relations(SERVER* server, json_t* old_json, json_t* new_json)
|
||||||
{
|
{
|
||||||
bool rval = false;
|
bool rval = false;
|
||||||
set<string> old_relations;
|
set<string> old_relations;
|
||||||
set<string> new_relations;
|
set<string> new_relations;
|
||||||
Closer<json_t*> old_json(server_to_json(server, ""));
|
|
||||||
ss_dassert(old_json.get());
|
|
||||||
|
|
||||||
if (extract_relations(old_json.get(), old_relations, server_relation_types, server_relation_is_valid) &&
|
if (extract_relations(old_json, old_relations, server_relation_types, server_relation_is_valid) &&
|
||||||
extract_relations(new_json, new_relations, server_relation_types, server_relation_is_valid))
|
extract_relations(new_json, new_relations, server_relation_types, server_relation_is_valid))
|
||||||
{
|
{
|
||||||
set<string> removed_relations;
|
set<string> removed_relations;
|
||||||
@ -866,20 +864,31 @@ bool handle_alter_server_relations(SERVER* server, json_t* new_json)
|
|||||||
bool runtime_alter_server_from_json(SERVER* server, json_t* new_json)
|
bool runtime_alter_server_from_json(SERVER* server, json_t* new_json)
|
||||||
{
|
{
|
||||||
bool rval = false;
|
bool rval = false;
|
||||||
|
Closer<json_t*> old_json(server_to_json(server, ""));
|
||||||
|
ss_dassert(old_json.get());
|
||||||
|
|
||||||
if (handle_alter_server_relations(server, new_json))
|
if (handle_alter_server_relations(server, old_json.get(), new_json))
|
||||||
{
|
{
|
||||||
json_t* parameters = json_object_get(new_json, CN_PARAMETERS);
|
json_t* parameters = json_object_get(new_json, CN_PARAMETERS);
|
||||||
|
json_t* old_parameters = json_object_get(old_json.get(), CN_PARAMETERS);;
|
||||||
|
ss_dassert(old_parameters);
|
||||||
|
|
||||||
if (parameters)
|
if (parameters)
|
||||||
{
|
{
|
||||||
rval = true;
|
rval = true;
|
||||||
const char *key;
|
const char* key;
|
||||||
json_t *value;
|
json_t* value;
|
||||||
|
|
||||||
json_object_foreach(parameters, key, value)
|
json_object_foreach(parameters, key, value)
|
||||||
{
|
{
|
||||||
if (!runtime_alter_server(server, key, mxs::json_to_string(value).c_str()))
|
json_t* new_val = json_object_get(parameters, key);
|
||||||
|
json_t* old_val = json_object_get(old_parameters, key);
|
||||||
|
|
||||||
|
if (old_val && new_val && mxs::json_to_string(new_val) == mxs::json_to_string(old_val))
|
||||||
|
{
|
||||||
|
/** No change in values */
|
||||||
|
}
|
||||||
|
else if (!runtime_alter_server(server, key, mxs::json_to_string(value).c_str()))
|
||||||
{
|
{
|
||||||
rval = false;
|
rval = false;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user