On 03/24/2017 09:55 AM, Peter Krempa wrote:
> On Wed, Mar 15, 2017 at 17:37:12 +0100, Peter Krempa wrote:
>> This is another version of the stuff that I've posted here:
>> https://www.redhat.com/archives/libvir-list/2017-February/msg01391.html
>> which was partially based on the very old discussion at
>> https://www.redhat.com/archives/libvir-list/2015-May/msg00580.html
>>
>> This version fixes some of the review feedback that I've got and also fixes all
>> the issues pointed out in the original cover letter since I managed to implement
>> the node name detection in a way suitable for this.
>>
>> The event is useful for mgmt apps using thin-provisioned storage so that they
>> don't have to poll for the disk filling all the time.
>
> I've pushed the updated version after incorporating most of the review
> feedback to:
>
> git fetch git://pipo.sk/pipo/libvirt.git block-threshold-2
>
Here's the interdiff; still a couple of things to tweak:
> diff --git w/src/libvirt-domain.c c/src/libvirt-domain.c
> index 815cbb1..ca63138 100644
> --- w/src/libvirt-domain.c
> +++ c/src/libvirt-domain.c
> @@ -11838,8 +11838,12 @@ virDomainSetVcpu(virDomainPtr domain,
> * Set the threshold level for delivering the
> * VIR_DOMAIN_EVENT_ID_BLOCK_THRESHOLD if the device or backing chain element
> * described by @dev is written beyond the set threshold level. The threshold
> - * level is unset once the event fired. The event may not be delivered at all if
> - * libvirtd was not running at the moment when the threshold was reached.
> + * level is unset once the event fired. The event might not be delivered at all
maybe s/fired/fires/
> + * if libvirtd was not running at the moment when the threshold was reached.
> + *
> + * Hypervisors report the last written sector of an image in the bulk stats API
extra space
> + * (virConnectGetAllDomainStats/virDomainListGetStats) as
> + * "block.<num>.allocation" in the VIR_DOMAIN_STATS_BLOCK group.
Maybe also mention (thanks to the followup patch) that
block.<num>.threshold can be inspected in bulk stats to learn the
current threshold.
> *
> * This event allows to use thin-provisioned storage which needs management
> * tools to grow it without the need for polling of the data.
> diff --git w/src/qemu/qemu_domain.c c/src/qemu/qemu_domain.c
> index 0469a1f..6985643 100644
> --- w/src/qemu/qemu_domain.c
> +++ c/src/qemu/qemu_domain.c
> @@ -8521,7 +8521,7 @@ qemuDomainNamespaceTeardownRNG(virQEMUDriverPtr driver,
> * @src: filled with the specific backing store element if provided
> * @idx: index of @src in the backing chain, if provided
> *
> - * Looks up the disk in the domain via @nodename and returns it's definition.
> + * Looks up the disk in the domain via @nodename and returns its definition.
> * Optionally fills @src and @idx if provided with the specific backing chain
> * element which corresponds to the node name.
> */
> diff --git w/src/qemu/qemu_process.c c/src/qemu/qemu_process.c
> index 8477710..53b4c5f 100644
> --- w/src/qemu/qemu_process.c
> +++ c/src/qemu/qemu_process.c
> @@ -1470,6 +1470,7 @@ qemuProcessHandleBlockThreshold(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
> if ((dev = qemuDomainDiskBackingStoreGetName(disk, src, idx))) {
> event = virDomainEventBlockThresholdNewFromObj(vm, dev, path,
> threshold, excess);
> + VIR_FREE(dev);
> }
Oh nice - you caught something I missed.
> }
>
> diff --git w/src/remote/remote_driver.c c/src/remote/remote_driver.c
> index baa5cba..27bcc9b 100644
> --- w/src/remote/remote_driver.c
> +++ c/src/remote/remote_driver.c
> @@ -8436,7 +8436,7 @@ static virHypervisorDriver hypervisor_driver = {
> .domainGetGuestVcpus = remoteDomainGetGuestVcpus, /* 2.0.0 */
> .domainSetGuestVcpus = remoteDomainSetGuestVcpus, /* 2.0.0 */
> .domainSetVcpu = remoteDomainSetVcpu, /* 3.1.0 */
> - .domainSetBlockThreshold = remoteDomainSetBlockThreshold, /* 3.1.0 */
> + .domainSetBlockThreshold = remoteDomainSetBlockThreshold, /* 3.2.0 */
> };
>
> static virNetworkDriver network_driver = {
> diff --git w/src/util/virbuffer.c c/src/util/virbuffer.c
> index 8f0f49d..80c8e28 100644
> --- w/src/util/virbuffer.c
> +++ c/src/util/virbuffer.c
> @@ -90,7 +90,7 @@ virBufferAdjustIndent(virBufferPtr buf, int indent)
>
>
> /**
> - * virBufferAdjustIndent:
> + * virBufferSetIndent:
> * @buf: the buffer
> * @indent: new indentation size.
> *
> diff --git w/tests/virbuftest.c c/tests/virbuftest.c
> index 34160e6..8ec6ce5 100644
> --- w/tests/virbuftest.c
> +++ c/tests/virbuftest.c
> @@ -405,6 +405,34 @@ testBufEscapeN(const void *opaque)
>
>
> static int
> +testBufSetIndent(const void *opaque ATTRIBUTE_UNUSED)
> +{
I might have just squashed in a test with the existing tests of
AdjustIndent, but what you have is fine.
> + virBuffer buf = VIR_BUFFER_INITIALIZER;
> + char *actual;
> + int ret = -1;
> +
> + virBufferSetIndent(&buf, 11);
> + virBufferAddLit(&buf, "test\n");
> + virBufferSetIndent(&buf, 2);
> + virBufferAddLit(&buf, "test2\n");
> +
> + if (!(actual = virBufferContentAndReset(&buf)))
> + goto cleanup;
> +
> + if (STRNEQ(actual, " test\n test2\n")) {
> + VIR_TEST_DEBUG("testBufSetIndent: expected indent not set\n");
> + goto cleanup;
> + }
> +
> + ret = 0;
> +
> + cleanup:
> + VIR_FREE(actual);
> + return ret;
> +}
> +
> +
> +static int
> mymain(void)
> {
> int ret = 0;
> @@ -422,6 +450,7 @@ mymain(void)
> DO_TEST("Auto-indentation", testBufAutoIndent, 0);
> DO_TEST("Trim", testBufTrim, 0);
> DO_TEST("AddBuffer", testBufAddBuffer, 0);
> + DO_TEST("set indent", testBufSetIndent, 0);
>
> #define DO_TEST_ADD_STR(DATA, EXPECT) \
> do { \
> diff --git w/tools/virsh-domain.c c/tools/virsh-domain.c
> index 3662952..74d0a0e 100644
> --- w/tools/virsh-domain.c
> +++ c/tools/virsh-domain.c
> @@ -7105,7 +7105,7 @@ static const vshCmdInfo info_domblkthreshold[] = {
> "device or it's backing chain element")
> },
> {.name = "desc",
> - .data = N_("set threshold for ")
> + .data = N_("set threshold for block-threshold even for a block device")
s/even/event/
> },
> {.name = NULL}
> };
Once you make the right tweaks in the corresponding patches, I think
that means you've earned an ACK to the series. My next email should be
a summary of my testing...
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list