From: Eric Blake <eblake@redhat.com>
To: marcandre.lureau@redhat.com, qemu-devel@nongnu.org
Cc: lersek@redhat.com
Subject: Re: [Qemu-devel] [RFC 1/3] monitor: split MonitorQAPIEventState
Date: Tue, 1 Sep 2015 14:19:40 -0600 [thread overview]
Message-ID: <55E6085C.3060607@redhat.com> (raw)
In-Reply-To: <1439408763-12785-2-git-send-email-marcandre.lureau@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 2629 bytes --]
On 08/12/2015 01:46 PM, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Create a seperate pending event structure MonitorQAPIEventPending.
s/seperate/separate/
> Use a MonitorQAPIEventDelay callback to handle the delaying. This
> allows other implementations of throttling.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> monitor.c | 124 +++++++++++++++++++++++++++++++++++++----------------------
> trace-events | 2 +-
> 2 files changed, 79 insertions(+), 47 deletions(-)
>
>
> +typedef struct MonitorQAPIEventPending {
> + QAPIEvent event; /* Event being tracked */
> + int64_t last; /* QEMU_CLOCK_REALTIME value at last emission */
> + QEMUTimer *timer; /* Timer for handling delayed events */
> + QObject *data; /* Event pending delayed dispatch */
> +} MonitorQAPIEventPending;
> +
> +typedef struct MonitorQAPIEventState MonitorQAPIEventState;
Some places combine the typedef with the struct definition; I'm not sure
there's any hard and fast rule, though. (HACKING mentions that we want
the typedef, but doesn't give guidelines on how it must be provided).
> +struct MonitorQAPIEventState {
> int64_t rate; /* Minimum time (in ns) between two events */
> - int64_t last; /* QEMU_CLOCK_REALTIME value at last emission */
> - QEMUTimer *timer; /* Timer for handling delayed events */
> - QObject *data; /* Event pending delayed dispatch */
> -} MonitorQAPIEventState;
> + MonitorQAPIEventDelay delay;
> + gpointer data;
Do we really need 'gpointer', or is 'void *' sufficient?
>
> +static bool
> +monitor_qapi_event_delay(MonitorQAPIEventState *evstate, QDict *data)
> +{
> + int64_t now = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
> + MonitorQAPIEventPending *p = evstate->data;
> + int64_t delta = now - p->last;
> +
> + /* Rate limit of 0 indicates no throttling */
> + if (!evstate->rate) {
> + p->last = now;
> + return FALSE;
s/FALSE/false/ (we want to directly use the C99 'bool' type here, not
the glib macros that expand to who-knows-what-type followed by implicit
conversion back to bool).
> + p->data = QOBJECT(data);
> + qobject_incref(p->data);
> + return TRUE;
> + }
> +
> + p->last = now;
> + return FALSE;
two more ALL_CAPS to convert to the lower bool counterpart.
Otherwise looks like a sane split.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
next prev parent reply other threads:[~2015-09-01 20:19 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-12 19:46 [Qemu-devel] [RFC 0/3] monitor: throttle VSERPORT_CHANGED by "id" marcandre.lureau
2015-08-12 19:46 ` [Qemu-devel] [RFC 1/3] monitor: split MonitorQAPIEventState marcandre.lureau
2015-08-12 20:00 ` Laszlo Ersek
2015-08-12 20:36 ` Marc-André Lureau
2015-08-12 21:25 ` Eric Blake
2015-09-01 20:19 ` Eric Blake [this message]
2015-08-12 19:46 ` [Qemu-devel] [RFC 2/3] monitor: throttle QAPI_EVENT_VSERPORT_CHANGE by "id" marcandre.lureau
2015-09-01 20:24 ` Eric Blake
2015-08-12 19:46 ` [Qemu-devel] [RFC 3/3] monitor: remove old entries from event hash table marcandre.lureau
2015-09-01 20:28 ` Eric Blake
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55E6085C.3060607@redhat.com \
--to=eblake@redhat.com \
--cc=lersek@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.