Make filter parameters a part of the definition

The filter parameters are now a part of the filter definition.
This commit is contained in:
Markus Mäkelä
2019-03-26 13:32:33 +02:00
parent fd39291542
commit b180c346d9
2 changed files with 9 additions and 29 deletions

View File

@ -53,15 +53,6 @@ static struct
std::vector<SFilterDef> filters; std::vector<SFilterDef> filters;
} this_unit; } this_unit;
/**
* Free filter parameters
* @param filter FilterDef whose parameters are to be freed
*/
static void filter_free_parameters(FilterDef* filter)
{
delete filter->parameters;
}
/** /**
* Allocate a new filter * Allocate a new filter
* *
@ -111,19 +102,10 @@ FilterDef::FilterDef(std::string name,
MXS_CONFIG_PARAMETER* params) MXS_CONFIG_PARAMETER* params)
: name(name) : name(name)
, module(module) , module(module)
, parameters(NULL) , parameters(*params)
, filter(instance) , filter(instance)
, obj(object) , obj(object)
{ {
// TODO: Add config_clone_param_chain
parameters = new MXS_CONFIG_PARAMETER;
for (auto p : *params)
{
parameters->set(p.first, p.second);
}
// Store module, used when the filter is serialized
parameters->set(CN_MODULE, module);
} }
FilterDef::~FilterDef() FilterDef::~FilterDef()
@ -132,8 +114,6 @@ FilterDef::~FilterDef()
{ {
obj->destroyInstance(filter); obj->destroyInstance(filter);
} }
filter_free_parameters(this);
} }
/** /**
@ -378,7 +358,7 @@ json_t* filter_parameters_to_json(const SFilterDef& filter)
/** Add custom module parameters */ /** Add custom module parameters */
const MXS_MODULE* mod = get_module(filter->module.c_str(), MODULE_FILTER); const MXS_MODULE* mod = get_module(filter->module.c_str(), MODULE_FILTER);
config_add_module_params_json(filter->parameters, config_add_module_params_json(&filter->parameters,
{CN_TYPE, CN_MODULE}, {CN_TYPE, CN_MODULE},
config_filter_params, config_filter_params,
mod->parameters, mod->parameters,
@ -517,7 +497,7 @@ static bool create_filter_config(const SFilterDef& filter, const char* filename)
const MXS_MODULE* mod = get_module(filter->module.c_str(), NULL); const MXS_MODULE* mod = get_module(filter->module.c_str(), NULL);
mxb_assert(mod); mxb_assert(mod);
string config_str = generate_config_string(filter->name, *filter->parameters, string config_str = generate_config_string(filter->name, filter->parameters,
config_filter_params, mod->parameters); config_filter_params, mod->parameters);
if (dprintf(file, "%s", config_str.c_str()) == -1) if (dprintf(file, "%s", config_str.c_str()) == -1)
{ {

View File

@ -36,12 +36,12 @@ struct FilterDef : public MXS_FILTER_DEF
MXS_CONFIG_PARAMETER* params); MXS_CONFIG_PARAMETER* params);
~FilterDef(); ~FilterDef();
std::string name; /**< The Filter name */ std::string name; /**< The Filter name */
std::string module; /**< The module to load */ std::string module; /**< The module to load */
MXS_CONFIG_PARAMETER* parameters; /**< The filter parameters */ MXS_CONFIG_PARAMETER parameters; /**< The filter parameters */
MXS_FILTER* filter; /**< The runtime filter */ MXS_FILTER* filter; /**< The runtime filter */
MXS_FILTER_OBJECT* obj; /**< The "MODULE_OBJECT" for the filter */ MXS_FILTER_OBJECT* obj; /**< The "MODULE_OBJECT" for the filter */
mutable std::mutex lock; mutable std::mutex lock;
}; };
typedef std::shared_ptr<FilterDef> SFilterDef; typedef std::shared_ptr<FilterDef> SFilterDef;