[libvirt] [PATCH v2 06/10] Add capability to fetch balloon stats

Daniel P. Berrange berrange at redhat.com
Thu Jul 11 14:39:39 UTC 2013


On Mon, Jul 08, 2013 at 03:20:32PM -0400, John Ferlan wrote:
> This patch will add the QEMU_MONITOR_OBJECT_PROPERTY_BALLOON_STATS type and
> a mechanism in the qemuMonitorObjectProperty to fetch and store an opaque
> data array assuming that we are provided a count of current elements,
> a count of maximum elements, and the address of the array store the data.
> Use the mechanism to fetch balloon driver statistics.
> ---
>  src/qemu/qemu_monitor.c      |   3 +-
>  src/qemu/qemu_monitor_json.c | 206 ++++++++++++++++++++-----------------------
>  src/qemu/qemu_monitor_json.h |   5 ++
>  3 files changed, 103 insertions(+), 111 deletions(-)


> @@ -4747,6 +4729,9 @@ int qemuMonitorJSONGetObjectProperty(qemuMonitorPtr mon,
>          if (tmp)
>              ret = 0;
>          break;
> +    case QEMU_MONITOR_OBJECT_PROPERTY_BALLOON_STATS:
> +        ret = qemuMonitorJSONGetBalloonStats(data, prop);
> +        break;
>      case QEMU_MONITOR_OBJECT_PROPERTY_LAST:
>      default:
>          virReportError(VIR_ERR_INTERNAL_ERROR,
> @@ -4810,6 +4795,7 @@ int qemuMonitorJSONSetObjectProperty(qemuMonitorPtr mon,
>      case QEMU_MONITOR_OBJECT_PROPERTY_STRING:
>          MAKE_SET_CMD("s:value", prop->val.str);
>          break;
> +    case QEMU_MONITOR_OBJECT_PROPERTY_BALLOON_STATS:
>      case QEMU_MONITOR_OBJECT_PROPERTY_LAST:
>      default:
>          virReportError(VIR_ERR_INTERNAL_ERROR,
> @@ -4830,7 +4816,7 @@ cleanup:
>  
>      return ret;
>  }
> -

[snip]

> @@ -360,6 +361,7 @@ typedef enum {
>      QEMU_MONITOR_OBJECT_PROPERTY_ULONG,
>      QEMU_MONITOR_OBJECT_PROPERTY_DOUBLE,
>      QEMU_MONITOR_OBJECT_PROPERTY_STRING,
> +    QEMU_MONITOR_OBJECT_PROPERTY_BALLOON_STATS,
>  
>      QEMU_MONITOR_OBJECT_PROPERTY_LAST
>  } qemuMonitorJSONObjectPropertyType;
> @@ -368,6 +370,8 @@ typedef struct _qemuMonitorJSONObjectProperty qemuMonitorJSONObjectProperty;
>  typedef qemuMonitorJSONObjectProperty *qemuMonitorJSONObjectPropertyPtr;
>  struct _qemuMonitorJSONObjectProperty {
>      int type;    /* qemuMonitorJSONObjectPropertyType */
> +    int curelems;   /* Current number elements in **ptr array */
> +    int maxelems;   /* Maximum number elements allowed in any **ptr array */
>      union {
>          bool b;
>          int i;
> @@ -376,6 +380,7 @@ struct _qemuMonitorJSONObjectProperty {
>          unsigned long long ul;
>          double d;
>          char *str;
> +        void **ptr;
>      } val;

I still don't really like that you're taking a function which is
generic (qemuMonitorJSONGetObjectProperty) and adding in code which
is specific to a single monitor command, and storing command specific
data structures in a 'void **'.  IMHO qemuMonitorJSONGetObjectProperty
should only ever return generic data structures, and the conversion
to the memory stats struct should be done by the caller.


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