mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-03 03:25:20 +00:00
Introduce VIR_CONNECT_GET_ALL_DOMAINS_STATS_NOWAIT
https://bugzilla.redhat.com/show_bug.cgi?id=1552092 If there's a long running job it might cause us to wait 30 seconds before we give up acquiring the job. This is problematic to interactive applications that fetch stats repeatedly every few seconds. The solution is to introduce VIR_CONNECT_GET_ALL_DOMAINS_STATS_NOWAIT flag which tries to acquire job but does not wait if acquiring failed. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
parent
f38ea75b99
commit
0afbeb3740
@ -2055,6 +2055,8 @@ typedef enum {
|
||||
VIR_CONNECT_GET_ALL_DOMAINS_STATS_SHUTOFF = VIR_CONNECT_LIST_DOMAINS_SHUTOFF,
|
||||
VIR_CONNECT_GET_ALL_DOMAINS_STATS_OTHER = VIR_CONNECT_LIST_DOMAINS_OTHER,
|
||||
|
||||
VIR_CONNECT_GET_ALL_DOMAINS_STATS_NOWAIT = 1 << 29, /* report statistics that can be obtained
|
||||
immediately without any blocking */
|
||||
VIR_CONNECT_GET_ALL_DOMAINS_STATS_BACKING = 1 << 30, /* include backing chain for block stats */
|
||||
VIR_CONNECT_GET_ALL_DOMAINS_STATS_ENFORCE_STATS = 1U << 31, /* enforce requested stats */
|
||||
} virConnectGetAllDomainStatsFlags;
|
||||
|
@ -11502,6 +11502,12 @@ virConnectGetDomainCapabilities(virConnectPtr conn,
|
||||
* fields for offline domains if the statistics are meaningful only for a
|
||||
* running domain.
|
||||
*
|
||||
* Passing VIR_CONNECT_GET_ALL_DOMAINS_STATS_NOWAIT in
|
||||
* @flags means when libvirt is unable to fetch stats for any of
|
||||
* the domains (for whatever reason) only a subset of statistics
|
||||
* is returned for the domain. That subset being statistics that
|
||||
* don't involve querying the underlying hypervisor.
|
||||
*
|
||||
* Similarly to virConnectListAllDomains, @flags can contain various flags to
|
||||
* filter the list of domains to provide stats for.
|
||||
*
|
||||
@ -11586,6 +11592,12 @@ virConnectGetAllDomainStats(virConnectPtr conn,
|
||||
* fields for offline domains if the statistics are meaningful only for a
|
||||
* running domain.
|
||||
*
|
||||
* Passing VIR_CONNECT_GET_ALL_DOMAINS_STATS_NOWAIT in
|
||||
* @flags means when libvirt is unable to fetch stats for any of
|
||||
* the domains (for whatever reason) only a subset of statistics
|
||||
* is returned for the domain. That subset being statistics that
|
||||
* don't involve querying the underlying hypervisor.
|
||||
*
|
||||
* Note that any of the domain list filtering flags in @flags may be rejected
|
||||
* by this function.
|
||||
*
|
||||
|
@ -20426,6 +20426,7 @@ qemuConnectGetAllDomainStats(virConnectPtr conn,
|
||||
virCheckFlags(VIR_CONNECT_LIST_DOMAINS_FILTERS_ACTIVE |
|
||||
VIR_CONNECT_LIST_DOMAINS_FILTERS_PERSISTENT |
|
||||
VIR_CONNECT_LIST_DOMAINS_FILTERS_STATE |
|
||||
VIR_CONNECT_GET_ALL_DOMAINS_STATS_NOWAIT |
|
||||
VIR_CONNECT_GET_ALL_DOMAINS_STATS_BACKING |
|
||||
VIR_CONNECT_GET_ALL_DOMAINS_STATS_ENFORCE_STATS, -1);
|
||||
|
||||
@ -20460,9 +20461,17 @@ qemuConnectGetAllDomainStats(virConnectPtr conn,
|
||||
|
||||
virObjectLock(vm);
|
||||
|
||||
if (HAVE_JOB(privflags) &&
|
||||
qemuDomainObjBeginJob(driver, vm, QEMU_JOB_QUERY) == 0)
|
||||
domflags |= QEMU_DOMAIN_STATS_HAVE_JOB;
|
||||
if (HAVE_JOB(privflags)) {
|
||||
int rv;
|
||||
|
||||
if (flags & VIR_CONNECT_GET_ALL_DOMAINS_STATS_NOWAIT)
|
||||
rv = qemuDomainObjBeginJobNowait(driver, vm, QEMU_JOB_QUERY);
|
||||
else
|
||||
rv = qemuDomainObjBeginJob(driver, vm, QEMU_JOB_QUERY);
|
||||
|
||||
if (rv == 0)
|
||||
domflags |= QEMU_DOMAIN_STATS_HAVE_JOB;
|
||||
}
|
||||
/* else: without a job it's still possible to gather some data */
|
||||
|
||||
if (flags & VIR_CONNECT_GET_ALL_DOMAINS_STATS_BACKING)
|
||||
|
Loading…
Reference in New Issue
Block a user