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