[virt-tools-list] [vhostmd PATCH 2/3] Optional global sections.
Jim Fehlig
jfehlig at suse.com
Wed Dec 18 21:39:51 UTC 2019
On 11/25/19 11:32 AM, Michael Trapp wrote:
> From: d032747 <michael.trapp at sap.com>
>
> Mark both global sections, disk and virtio, as optional DTD elements.
> Based on that, the configured transport can be either 'disk only' or
> 'virtio only' or 'disk and virtio'.
> But a configuration with disabled disk and disabled virtio is not valid.
> This condition can't be validated in the DTD and therefore it is checked
> in the vhostmd code.
This can be one paragraph IMO, so no need for the "But a configuration..." to
start on a new line.
>
> Due to the optional disk transport 'globals/disk/size' must be handled
> as optional element.
Perhaps we can refactor the code to avoid this. More on that below...
>
> In addition a disabled disk transport should not result in an empty
> disk file. Because the 'initialized' disk file will never get valid
> metrics updates, which might be not that obvious for a client in a vm.
> ---
> vhostmd.dtd | 2 +-
> vhostmd/vhostmd.c | 19 +++++++++++--------
> 2 files changed, 12 insertions(+), 9 deletions(-)
>
> diff --git a/vhostmd.dtd b/vhostmd.dtd
> index 888270e..f58a74a 100644
> --- a/vhostmd.dtd
> +++ b/vhostmd.dtd
> @@ -9,7 +9,7 @@ Virtual Host Metrics Daemon (vhostmd). Configuration file DTD
> -->
>
> <!ELEMENT vhostmd (globals,metrics)>
> -<!ELEMENT globals (disk,virtio*,update_period,path,transport+)>
> +<!ELEMENT globals (disk*,virtio*,update_period,path,transport+)>
>
> <!ELEMENT disk (name,path,size)>
> <!ELEMENT name (#PCDATA)>
> diff --git a/vhostmd/vhostmd.c b/vhostmd/vhostmd.c
> index 7e29e6f..1dd739e 100644
> --- a/vhostmd/vhostmd.c
> +++ b/vhostmd/vhostmd.c
> @@ -90,7 +90,7 @@ typedef struct _mdisk_header
>
> /* Global variables */
> static int down = 0;
> -static int mdisk_size = MDISK_SIZE_MIN;
> +static int mdisk_size = MDISK_SIZE_MIN * 256;
Unrelated change, or does the min size really need to be 256x larger? If it
needs to be larger we should just change MDISK_SIZE_MIN.
> static int update_period = 5;
> static char *def_mdisk_path = "/dev/shm/vhostmd0";
> static char *mdisk_path = NULL;
> @@ -586,10 +586,6 @@ static int parse_config_file(const char *filename)
> if (vu_xpath_long("string(./globals/disk/size[1])", ctxt, &l) == 0) {
> mdisk_size = vu_val_by_unit(unit, (int)l);
> }
> - else {
> - vu_log(VHOSTMD_ERR, "Unable to parse metrics disk size");
> - goto out;
> - }
Perhaps this function can be refactored to first parse the transports, then
conditionally parse disk and virtio if specified in transports?
>
> if (vu_xpath_long("string(./globals/update_period[1])", ctxt, &l) == 0) {
> update_period = (int)l;
> @@ -616,6 +612,11 @@ static int parse_config_file(const char *filename)
> virtio_expiration_time = (int)l;
> }
>
> + if ((transports & (VIRTIO | VBD)) == 0) {
> + vu_log(VHOSTMD_ERR, "Neither disk nor virtio activated as transport");
> + goto out;
> + }
> +
On a Xen host one could conceivably have <transport>xenstore</transport>, but
that would not be allowed with this change. If no transport at all is specified,
parse_transports() has
if (transports == 0)
transports = VBD;
Regards,
Jim
> /* Parse requested metrics definitions */
> if (parse_metrics(xml, ctxt)) {
> vu_log(VHOSTMD_ERR, "Unable to parse metrics definition "
> @@ -1136,9 +1137,11 @@ int main(int argc, char *argv[])
> goto out;
> }
>
> - if ((mdisk_fd = metrics_disk_create()) < 0) {
> - vu_log(VHOSTMD_ERR, "Failed to create metrics disk %s", mdisk_path);
> - goto out;
> + if (transports & VBD) {
> + if ((mdisk_fd = metrics_disk_create()) < 0) {
> + vu_log(VHOSTMD_ERR, "Failed to create metrics disk %s", mdisk_path);
> + goto out;
> + }
> }
>
> /* Drop root privileges if requested. Note: We do this after
>
More information about the virt-tools-list
mailing list