[PATCH v5 1/9] qemu: Refactor dirty page rate calculation status implementation

Daniel P. Berrangé berrange at redhat.com
Mon Feb 21 10:48:03 UTC 2022


On Thu, Feb 17, 2022 at 05:19:32PM +0100, Michal Prívozník wrote:
> On 2/16/22 01:28, huangy81 at chinatelecom.cn wrote:
> > From: Hyman Huang(黄勇) <huangy81 at chinatelecom.cn>
> > 
> > For any virTypedParameter API normal practice is to use a string
> > to expose the data, not the rather enum integer value.
> > 
> > So let's drop the virDomainDirtyRateStatus in public header file
> > and introduce internal enum def qemuMonitorDirtyRateStatus to
> > describe the dirty page rate calculation status.
> > 
> > Signed-off-by: Hyman Huang(黄勇) <huangy81 at chinatelecom.cn>
> > ---
> >  include/libvirt/libvirt-domain.h | 18 ------------------
> >  src/libvirt-domain.c             |  4 ++--
> >  src/qemu/qemu_driver.c           |  9 ++++++---
> >  src/qemu/qemu_monitor.h          | 18 ++++++++++++++++--
> >  src/qemu/qemu_monitor_json.c     |  4 ++--
> >  5 files changed, 26 insertions(+), 27 deletions(-)
> > 
> > diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h
> > index 8c16598..bf4746a 100644
> > --- a/include/libvirt/libvirt-domain.h
> > +++ b/include/libvirt/libvirt-domain.h
> > @@ -5241,24 +5241,6 @@ int virDomainGetMessages(virDomainPtr domain,
> >                           char ***msgs,
> >                           unsigned int flags);
> >  
> > -/**
> > - * virDomainDirtyRateStatus:
> > - *
> > - * Details on the cause of a dirty rate calculation status.
> > - */
> > -typedef enum {
> > -    VIR_DOMAIN_DIRTYRATE_UNSTARTED = 0, /* the dirtyrate calculation has
> > -                                           not been started */
> > -    VIR_DOMAIN_DIRTYRATE_MEASURING = 1, /* the dirtyrate calculation is
> > -                                           measuring */
> > -    VIR_DOMAIN_DIRTYRATE_MEASURED  = 2, /* the dirtyrate calculation is
> > -                                           completed */
> > -
> > -# ifdef VIR_ENUM_SENTINELS
> > -    VIR_DOMAIN_DIRTYRATE_LAST
> > -# endif
> > -} virDomainDirtyRateStatus;
> > -
> >  int virDomainStartDirtyRateCalc(virDomainPtr domain,
> >                                  int seconds,
> >                                  unsigned int flags);
> > diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
> > index b8a6f10..f24d072 100644
> > --- a/src/libvirt-domain.c
> > +++ b/src/libvirt-domain.c
> > @@ -11947,8 +11947,8 @@ virConnectGetDomainCapabilities(virConnectPtr conn,
> >   *     this format:
> >   *
> >   *     "dirtyrate.calc_status" - the status of last memory dirty rate calculation,
> > - *                               returned as int from virDomainDirtyRateStatus
> > - *                               enum.
> > + *                               either of these 3 'unstarted,measuring,measured'
> > + *                               values returned.
> >   *     "dirtyrate.calc_start_time" - the start time of last memory dirty rate
> >   *                                   calculation as long long.
> >   *     "dirtyrate.calc_period" - the period of last memory dirty rate calculation
> > diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> > index f262020..a22646c 100644
> > --- a/src/qemu/qemu_driver.c
> > +++ b/src/qemu/qemu_driver.c
> > @@ -18525,6 +18525,8 @@ qemuDomainGetStatsDirtyRateMon(virQEMUDriver *driver,
> >      return ret;
> >  }
> >  
> > +VIR_ENUM_DECL(qemuMonitorDirtyRateStatus);
> > +
> >  static int
> >  qemuDomainGetStatsDirtyRate(virQEMUDriver *driver,
> >                              virDomainObj *dom,
> > @@ -18539,8 +18541,9 @@ qemuDomainGetStatsDirtyRate(virQEMUDriver *driver,
> >      if (qemuDomainGetStatsDirtyRateMon(driver, dom, &info) < 0)
> >          return -1;
> >  
> > -    if (virTypedParamListAddInt(params, info.status,
> > -                                "dirtyrate.calc_status") < 0)
> > +    if (virTypedParamListAddString(params,
> > +                                   qemuMonitorDirtyRateStatusTypeToString(info.status),
> > +                                   "dirtyrate.calc_status") < 0)
> 
> I worry that this change is not backwards compatible. I mean, what if I
> had an app that fetches dirtyrate.calc_status, expecting it to be an int?
> 
> In some languages this may be less of a problem (e.g. in python) but
> still, I would have to make changes to my app only because of this patch.

Yes, that'll certainly break the Go bindings as we expose everything
in stronglky typed structs.


Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|




More information about the libvir-list mailing list