[libvirt] [libvirt-glib 22/23] Add GVirConfigDomain::memory

Daniel P. Berrange berrange at redhat.com
Tue Oct 18 11:52:23 UTC 2011


On Fri, Oct 07, 2011 at 11:41:07AM +0200, Christophe Fergeau wrote:
> ---
>  libvirt-gconfig/libvirt-gconfig-domain.c   |   29 +++++++++++++++++++++++++
>  libvirt-gconfig/libvirt-gconfig-domain.h   |    2 +
>  libvirt-gconfig/libvirt-gconfig-object.c   |   32 ++++++++++++++++++++++++++++
>  libvirt-gconfig/libvirt-gconfig-object.h   |    5 ++++
>  libvirt-gconfig/libvirt-gconfig.sym        |    2 +
>  libvirt-gconfig/tests/test-domain-create.c |    3 ++
>  libvirt-gconfig/tests/test-domain-parse.c  |    3 ++
>  libvirt-gconfig/tests/test-domain.xml      |    1 +
>  8 files changed, 77 insertions(+), 0 deletions(-)
> 
> diff --git a/libvirt-gconfig/libvirt-gconfig-domain.c b/libvirt-gconfig/libvirt-gconfig-domain.c
> index 039e551..71bfb55 100644
> --- a/libvirt-gconfig/libvirt-gconfig-domain.c
> +++ b/libvirt-gconfig/libvirt-gconfig-domain.c
> @@ -44,6 +44,7 @@ G_DEFINE_TYPE(GVirConfigDomain, gvir_config_domain, GVIR_TYPE_CONFIG_OBJECT);
>  enum {
>      PROP_0,
>      PROP_NAME,
> +    PROP_MEMORY,
>  };
>  
>  static void gvir_config_domain_get_property(GObject *object,
> @@ -57,6 +58,9 @@ static void gvir_config_domain_get_property(GObject *object,
>      case PROP_NAME:
>          g_value_take_string(value, gvir_config_domain_get_name(domain));
>          break;
> +    case PROP_MEMORY:
> +        g_value_set_uint64(value, gvir_config_domain_get_memory(domain));
> +        break;
>  
>      default:
>          G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
> @@ -74,6 +78,9 @@ static void gvir_config_domain_set_property(GObject *object,
>      case PROP_NAME:
>          gvir_config_domain_set_name(domain, g_value_get_string(value));
>          break;
> +    case PROP_MEMORY:
> +        gvir_config_domain_set_memory(domain, g_value_get_uint64(value));
> +        break;
>      default:
>          G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
>      }
> @@ -97,6 +104,15 @@ static void gvir_config_domain_class_init(GVirConfigDomainClass *klass)
>                                                          NULL,
>                                                          G_PARAM_READWRITE |
>                                                          G_PARAM_STATIC_STRINGS));
> +    g_object_class_install_property(object_class,
> +                                    PROP_MEMORY,
> +                                    g_param_spec_uint64("memory",
> +                                                        "Memory",
> +                                                        "Maximum Guest Memory (in kilobytes)",
> +                                                        0, G_MAXUINT64,
> +                                                        0,
> +                                                        G_PARAM_READWRITE |
> +                                                        G_PARAM_STATIC_STRINGS));
>  }
>  
>  
> @@ -150,3 +166,16 @@ void gvir_config_domain_set_name(GVirConfigDomain *domain, const char *name)
>                                          "name", name);
>      g_object_notify(G_OBJECT(domain), "name");
>  }
> +
> +guint64 gvir_config_domain_get_memory(GVirConfigDomain *domain)
> +{
> +    return gvir_config_object_get_node_content_uint64(GVIR_CONFIG_OBJECT(domain),
> +                                                      "memory");
> +}
> +
> +void gvir_config_domain_set_memory(GVirConfigDomain *domain, guint64 memory)
> +{
> +    gvir_config_object_set_node_content_uint64(GVIR_CONFIG_OBJECT(domain),
> +                                               "memory", memory);
> +    g_object_notify(G_OBJECT(domain), "memory");
> +}
> diff --git a/libvirt-gconfig/libvirt-gconfig-domain.h b/libvirt-gconfig/libvirt-gconfig-domain.h
> index b5ae050..03169b2 100644
> --- a/libvirt-gconfig/libvirt-gconfig-domain.h
> +++ b/libvirt-gconfig/libvirt-gconfig-domain.h
> @@ -64,6 +64,8 @@ GVirConfigDomain *gvir_config_domain_new(void);
>  
>  char *gvir_config_domain_get_name(GVirConfigDomain *domain);
>  void gvir_config_domain_set_name(GVirConfigDomain *domain, const char *name);
> +guint64 gvir_config_domain_get_memory(GVirConfigDomain *domain);
> +void gvir_config_domain_set_memory(GVirConfigDomain *domain, guint64 memory);
>  
>  G_END_DECLS
>  
> diff --git a/libvirt-gconfig/libvirt-gconfig-object.c b/libvirt-gconfig/libvirt-gconfig-object.c
> index 679c3f9..0de4abf 100644
> --- a/libvirt-gconfig/libvirt-gconfig-object.c
> +++ b/libvirt-gconfig/libvirt-gconfig-object.c
> @@ -322,3 +322,35 @@ void gvir_config_object_set_node_content(GVirConfigObject *object,
>      }
>  }
>  
> +/* FIXME: how to notify of errors/node not found? */

Most of the properties will have some unused value. So I'd choose to set
the value to '0'  if node is not found. If '0' is a actually a valid
value, then you'll almost certainly be able to use '-1' for missing
value instead.


> +guint64 gvir_config_object_get_node_content_uint64(GVirConfigObject *object,
> +                                                   const char *node_name)
> +{
> +    xmlNodePtr node;
> +    xmlChar *str;
> +    guint64 value;
> +
> +    node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(object));
> +    if (node == NULL)
> +        return 0;
> +
> +    str = gvir_config_xml_get_child_element_content(node, node_name);
> +    if (!str)
> +        return 0;
> +
> +    value = g_ascii_strtoull((char *)str, NULL, 0);
> +    xmlFree(str);
> +
> +    return value;
> +}



> +
> +
> +void gvir_config_object_set_node_content_uint64(GVirConfigObject *object,
> +                                                const char *node_name,
> +                                                guint64 value)
> +{
> +    char *str;
> +    str = g_strdup_printf("%"G_GUINT64_FORMAT, value);
> +    gvir_config_object_set_node_content(object, node_name, str);
> +    g_free(str);
> +}
> diff --git a/libvirt-gconfig/libvirt-gconfig-object.h b/libvirt-gconfig/libvirt-gconfig-object.h
> index ab99279..c203798 100644
> --- a/libvirt-gconfig/libvirt-gconfig-object.h
> +++ b/libvirt-gconfig/libvirt-gconfig-object.h
> @@ -68,9 +68,14 @@ const gchar *gvir_config_object_get_schema(GVirConfigObject *config);
>  xmlNodePtr gvir_config_object_get_xml_node(GVirConfigObject *config);
>  char *gvir_config_object_get_node_content(GVirConfigObject *object,
>                                            const char *node_name);
> +guint64 gvir_config_object_get_node_content_uint64(GVirConfigObject *object,
> +                                                   const char *node_name);
>  void gvir_config_object_set_node_content(GVirConfigObject *object,
>                                           const char *node_name,
>                                           const char *value);
> +void gvir_config_object_set_node_content_uint64(GVirConfigObject *object,
> +                                                const char *node_name,
> +                                                guint64 value);
>  
>  /* FIXME: move to a libvirt-gconfig-helpers.h file? */
>  xmlNodePtr gvir_config_object_parse(const char *xml, const char *root_node, GError **err);
> diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym
> index b67d152..7acb95d 100644
> --- a/libvirt-gconfig/libvirt-gconfig.sym
> +++ b/libvirt-gconfig/libvirt-gconfig.sym
> @@ -6,6 +6,8 @@ LIBVIRT_GOBJECT_0.0.1 {
>  	gvir_config_domain_get_type;
>  	gvir_config_domain_new;
>  	gvir_config_domain_new_from_xml;
> +	gvir_config_domain_get_memory;
> +	gvir_config_domain_set_memory;
>  	gvir_config_domain_get_name;
>  	gvir_config_domain_set_name;
>  
> diff --git a/libvirt-gconfig/tests/test-domain-create.c b/libvirt-gconfig/tests/test-domain-create.c
> index a742dd7..fe0063c 100644
> --- a/libvirt-gconfig/tests/test-domain-create.c
> +++ b/libvirt-gconfig/tests/test-domain-create.c
> @@ -44,6 +44,9 @@ int main(void)
>      g_assert(strcmp(name, "foo") == 0);
>      g_free(name);
>  
> +    gvir_config_domain_set_memory(domain, 1234);
> +    g_assert(gvir_config_domain_get_memory(domain) == 1234);
> +
>      xml = gvir_config_object_to_xml(GVIR_CONFIG_OBJECT(domain));
>      g_print("%s\n", xml);
>      g_free(xml);
> diff --git a/libvirt-gconfig/tests/test-domain-parse.c b/libvirt-gconfig/tests/test-domain-parse.c
> index 545e733..7521d20 100644
> --- a/libvirt-gconfig/tests/test-domain-parse.c
> +++ b/libvirt-gconfig/tests/test-domain-parse.c
> @@ -66,6 +66,9 @@ int main(int argc, char **argv)
>      g_assert(name != NULL);
>      g_assert(strcmp(name, "foo") == 0);
>      g_free(name);
> +
> +    g_assert(gvir_config_domain_get_memory(domain) == 987654321);
> +
>      g_free(xml);
>  
>      xml = gvir_config_object_to_xml(GVIR_CONFIG_OBJECT(domain));
> diff --git a/libvirt-gconfig/tests/test-domain.xml b/libvirt-gconfig/tests/test-domain.xml
> index 08a926e..d887e95 100644
> --- a/libvirt-gconfig/tests/test-domain.xml
> +++ b/libvirt-gconfig/tests/test-domain.xml
> @@ -2,4 +2,5 @@
>    <name>foo</name>
>    <uuid>4dea22b31d52d8f32516782e98ab3fa0</uuid>
>    <description>Some human readable description</description>
> + <memory>987654321</memory>
>  </domain>

ACK


Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list