On 2024/8/23 15:10, Peter Krempa wrote:
On Fri, Aug 23, 2024 at 14:00:25 +0800, Chun Feng Wu wrote:
> On 2024/7/26 21:03, Peter Krempa wrote:
>>> +static virDomainThrottleGroupDef *
>>> +virDomainThrottleGroupDefParseXML(xmlNodePtr node,
>>> + xmlXPathContextPtr ctxt)
>>> +{
>>> + g_autoptr(virDomainThrottleGroupDef) group =
g_new0(virDomainThrottleGroupDef, 1);
>>> +
>>> + VIR_XPATH_NODE_AUTORESTORE(ctxt)
>>> + ctxt->node = node;
>>> +
>>> + PARSE_THROTTLEGROUP(total_bytes_sec);
>>> + PARSE_THROTTLEGROUP(read_bytes_sec);
>>> + PARSE_THROTTLEGROUP(write_bytes_sec);
>>> + PARSE_THROTTLEGROUP(total_iops_sec);
>>> + PARSE_THROTTLEGROUP(read_iops_sec);
>>> + PARSE_THROTTLEGROUP(write_iops_sec);
>>> +
>>> + PARSE_THROTTLEGROUP(total_bytes_sec_max);
>>> + PARSE_THROTTLEGROUP(read_bytes_sec_max);
>>> + PARSE_THROTTLEGROUP(write_bytes_sec_max);
>>> + PARSE_THROTTLEGROUP(total_iops_sec_max);
>>> + PARSE_THROTTLEGROUP(read_iops_sec_max);
>>> + PARSE_THROTTLEGROUP(write_iops_sec_max);
>>> +
>>> + PARSE_THROTTLEGROUP(size_iops_sec);
>>> +
>>> + PARSE_THROTTLEGROUP(total_bytes_sec_max_length);
>>> + PARSE_THROTTLEGROUP(read_bytes_sec_max_length);
>>> + PARSE_THROTTLEGROUP(write_bytes_sec_max_length);
>>> + PARSE_THROTTLEGROUP(total_iops_sec_max_length);
>>> + PARSE_THROTTLEGROUP(read_iops_sec_max_length);
>>> + PARSE_THROTTLEGROUP(write_iops_sec_max_length);
>> I'd prefer if we had only one copy of the code parsing this and the
>> equivalent disk throttling data so that the code doesn't need to be
>> duplicated. The cleanup can be done as a followup though.
> in v4 drafting, I am defining the following common macro to avoid
> duplication of iterating all options in all parsing and formatting codes for
> both iotune and throttlegroup:
I was referring to the fact that the code that parses the old throttling
XML is not refactored to use this new helper, thus keeping duplications.
> #define FOR_EACH_IOTUNE_ULL_OPTION(process) \
> process(total_bytes_sec) \
> process(read_bytes_sec) \
> process(write_bytes_sec) \
> process(total_iops_sec) \
> process(read_iops_sec) \
> process(write_iops_sec) \
> process(total_bytes_sec_max) \
> process(read_bytes_sec_max) \
> process(write_bytes_sec_max) \
> process(total_iops_sec_max) \
> process(read_iops_sec_max) \
> process(write_iops_sec_max) \
> process(size_iops_sec) \
> process(total_bytes_sec_max_length) \
> process(read_bytes_sec_max_length) \
> process(write_bytes_sec_max_length) \
> process(total_iops_sec_max_length) \
> process(read_iops_sec_max_length) \
> process(write_iops_sec_max_length)
>
> and define different "process" macro for parse and format, and this can be
> reused by iotune and format by just calling e.g.
>
> FOR_EACH_IOTUNE_ULL_OPTION(PARSE_IOTUNE);
>
> FOR_EACH_IOTUNE_ULL_OPTION(FORMAT_IOTUNE);
Please do not do this. Do not hide this any deeper into macros. It's
hard to understand and harder to debug.
got it, thanks for your info!
--
Thanks and Regards,
Wu