Remove MODULECMD_ARG_OUTPUT argument type

Since the module command interface was expanded to include a JSON output
parameter, there is no longer a need for an output DCB. As the JSON can be
printed by both maxadmin and the REST API, this allows the removal of
explicit output formatting in module commands.
This commit is contained in:
Markus Mäkelä
2017-09-28 13:55:45 +03:00
parent da648387dd
commit 14d8b6a0df
9 changed files with 32 additions and 115 deletions

View File

@ -90,18 +90,14 @@ void cache_config_reset(CACHE_CONFIG& config)
*/
bool cache_command_show(const MODULECMD_ARG* pArgs, json_t** output)
{
ss_dassert(pArgs->argc == 2);
ss_dassert(MODULECMD_GET_TYPE(&pArgs->argv[0].type) == MODULECMD_ARG_OUTPUT);
ss_dassert(pArgs->argc == 1);
ss_dassert(MODULECMD_GET_TYPE(&pArgs->argv[1].type) == MODULECMD_ARG_FILTER);
DCB* pDcb = pArgs->argv[0].value.dcb;
ss_dassert(pDcb);
const MXS_FILTER_DEF* pFilterDef = pArgs->argv[1].value.filter;
ss_dassert(pFilterDef);
CacheFilter* pFilter = reinterpret_cast<CacheFilter*>(filter_def_get_instance(pFilterDef));
MXS_EXCEPTION_GUARD(pFilter->cache().show(pDcb));
MXS_EXCEPTION_GUARD(*output = pFilter->cache().show_json());
return true;
}
@ -146,7 +142,6 @@ extern "C" MXS_MODULE* MXS_CREATE_MODULE()
{
static modulecmd_arg_type_t show_argv[] =
{
{ MODULECMD_ARG_OUTPUT, "The output dcb" },
{ MODULECMD_ARG_FILTER | MODULECMD_ARG_NAME_MATCHES_DOMAIN, "Cache name" }
};

View File

@ -78,6 +78,7 @@
#include <maxscale/pcre2.h>
#include <maxscale/alloc.h>
#include <maxscale/spinlock.hh>
#include <maxscale/utils.h>
#include "rules.hh"
#include "user.hh"
@ -499,27 +500,17 @@ MXS_MODULE* MXS_CREATE_MODULE()
};
modulecmd_register_command(MXS_MODULE_NAME, "rules/reload", MODULECMD_TYPE_ACTIVE,
dbfw_reload_rules, 2, args_rules_reload,
"Reload dbfwfilter rules");
modulecmd_arg_type_t args_rules_show[] =
{
{MODULECMD_ARG_OUTPUT, "DCB where result is written"},
{MODULECMD_ARG_FILTER | MODULECMD_ARG_NAME_MATCHES_DOMAIN, "Filter to inspect"}
};
modulecmd_register_command(MXS_MODULE_NAME, "rules", MODULECMD_TYPE_PASSIVE,
dbfw_show_rules, 2, args_rules_show,
"(deprecated) Show dbfwfilter rule statistics");
dbfw_reload_rules, MXS_ARRAY_NELEMS(args_rules_reload),
args_rules_reload, "Reload dbfwfilter rules");
modulecmd_arg_type_t args_rules_show_json[] =
{
{MODULECMD_ARG_FILTER | MODULECMD_ARG_NAME_MATCHES_DOMAIN, "Filter to inspect"}
};
modulecmd_register_command(MXS_MODULE_NAME, "rules/json", MODULECMD_TYPE_PASSIVE,
dbfw_show_rules_json, 1, args_rules_show_json,
"Show dbfwfilter rule statistics as JSON");
modulecmd_register_command(MXS_MODULE_NAME, "rules", MODULECMD_TYPE_PASSIVE,
dbfw_show_rules_json, MXS_ARRAY_NELEMS(args_rules_show_json),
args_rules_show_json, "Show dbfwfilter rule statistics");
static MXS_MODULE info =
{

View File

@ -14,6 +14,7 @@
#define MXS_MODULE_NAME "masking"
#include "maskingfilter.hh"
#include <maxscale/json_api.h>
#include <maxscale/modulecmd.h>
#include <maxscale/paths.h>
#include <maxscale/utils.h>
@ -37,20 +38,23 @@ char VERSION_STRING[] = "V1.0.0";
*/
bool masking_command_reload(const MODULECMD_ARG* pArgs, json_t** output)
{
ss_dassert(pArgs->argc == 2);
ss_dassert(MODULECMD_GET_TYPE(&pArgs->argv[0].type) == MODULECMD_ARG_OUTPUT);
ss_dassert(pArgs->argc == 1);
ss_dassert(MODULECMD_GET_TYPE(&pArgs->argv[1].type) == MODULECMD_ARG_FILTER);
DCB* pDcb = pArgs->argv[0].value.dcb;
ss_dassert(pDcb);
const MXS_FILTER_DEF* pFilterDef = pArgs->argv[1].value.filter;
ss_dassert(pFilterDef);
MaskingFilter* pFilter = reinterpret_cast<MaskingFilter*>(filter_def_get_instance(pFilterDef));
MXS_EXCEPTION_GUARD(pFilter->reload(pDcb));
bool rv = false;
MXS_EXCEPTION_GUARD(rv = pFilter->reload());
return true;
if (!rv)
{
modulecmd_set_error("Could not reload the rules. Check the log file "
"for more detailed information.");
}
return rv;
}
}
@ -63,7 +67,6 @@ extern "C" MXS_MODULE* MXS_CREATE_MODULE()
{
static modulecmd_arg_type_t reload_argv[] =
{
{ MODULECMD_ARG_OUTPUT, "The output dcb" },
{ MODULECMD_ARG_FILTER | MODULECMD_ARG_NAME_MATCHES_DOMAIN, "Masking name" }
};
@ -168,19 +171,16 @@ std::tr1::shared_ptr<MaskingRules> MaskingFilter::rules() const
return m_sRules;
}
void MaskingFilter::reload(DCB* pOut)
bool MaskingFilter::reload()
{
bool rval = false;
auto_ptr<MaskingRules> sRules = MaskingRules::load(m_config.rules().c_str());
if (sRules.get())
{
m_sRules = sRules;
rval = true;
}
dcb_printf(pOut, "Rules reloaded.\n");
}
else
{
dcb_printf(pOut, "Could not reload the rules. Check the log file for more "
"detailed information.\n");
}
return rval;
}

View File

@ -38,7 +38,7 @@ public:
uint64_t getCapabilities();
void reload(DCB* pOut);
bool reload();
const Config& config() const
{

View File

@ -303,13 +303,9 @@ bool listfuncs_cb(const MODULECMD *cmd, void *data)
for (int i = 0; i < cmd->arg_count_max; i++)
{
modulecmd_arg_type_t *type = &cmd->arg_types[i];
if (MODULECMD_GET_TYPE(type) != MODULECMD_ARG_OUTPUT)
{
dcb_printf(dcb, "%s%s",
modulecmd_argtype_to_str(&cmd->arg_types[i]),
i < cmd->arg_count_max - 1 ? " " : "");
}
dcb_printf(dcb, "%s%s",
modulecmd_argtype_to_str(&cmd->arg_types[i]),
i < cmd->arg_count_max - 1 ? " " : "");
}
dcb_printf(dcb, "\n\n");
@ -317,13 +313,9 @@ bool listfuncs_cb(const MODULECMD *cmd, void *data)
for (int i = 0; i < cmd->arg_count_max; i++)
{
modulecmd_arg_type_t *type = &cmd->arg_types[i];
if (MODULECMD_GET_TYPE(type) != MODULECMD_ARG_OUTPUT)
{
dcb_printf(dcb, " %s - %s\n",
modulecmd_argtype_to_str(&cmd->arg_types[i]),
cmd->arg_types[i].description);
}
dcb_printf(dcb, " %s - %s\n",
modulecmd_argtype_to_str(&cmd->arg_types[i]),
cmd->arg_types[i].description);
}
dcb_printf(dcb, "\n");
@ -1662,12 +1654,6 @@ struct subcommand alteroptions[] =
}
};
static inline bool requires_output_dcb(const MODULECMD *cmd)
{
modulecmd_arg_type_t *type = &cmd->arg_types[0];
return cmd->arg_count_max > 0 && MODULECMD_GET_TYPE(type) == MODULECMD_ARG_OUTPUT;
}
static void callModuleCommand(DCB *dcb, char *domain, char *id, char *v3,
char *v4, char *v5, char *v6, char *v7, char *v8, char *v9,
char *v10, char *v11, char *v12)
@ -1685,18 +1671,6 @@ static void callModuleCommand(DCB *dcb, char *domain, char *id, char *v3,
if (cmd)
{
if (requires_output_dcb(cmd))
{
/** The command requires a DCB for output, add the client DCB
* as the first argument */
for (int i = valuelen - 1; i > 0; i--)
{
values[i] = values[i - 1];
}
values[0] = dcb;
numargs += numargs + 1 < valuelen - 1 ? 1 : 0;
}
MODULECMD_ARG *arg = modulecmd_arg_parse(cmd, numargs, values);
if (arg)