[libvirt] [PATCH 1/2] test_driver: implement virDomainGetBlockIoTune
Ilias Stamatis
stamatis.iliass at gmail.com
Wed Aug 7 10:42:30 UTC 2019
On Sun, Aug 4, 2019 at 5:32 PM Erik Skultety <eskultet at redhat.com> wrote:
>
> On Sun, Aug 04, 2019 at 03:46:03PM +0200, Ilias Stamatis wrote:
> > On Sun, Aug 4, 2019 at 11:12 AM Erik Skultety <eskultet at redhat.com> wrote:
> > >
> > > On Sat, Jul 27, 2019 at 05:04:37PM +0200, Ilias Stamatis wrote:
> > > > Signed-off-by: Ilias Stamatis <stamatis.iliass at gmail.com>
> > > > ---
> > > > src/test/test_driver.c | 90 ++++++++++++++++++++++++++++++++++++++++++
> > > > 1 file changed, 90 insertions(+)
> > > >
> > > > diff --git a/src/test/test_driver.c b/src/test/test_driver.c
> > > > index ab0f8b06d6..9f4e255e35 100755
> > > > --- a/src/test/test_driver.c
> > > > +++ b/src/test/test_driver.c
> > > > @@ -3500,6 +3500,95 @@ testDomainGetInterfaceParameters(virDomainPtr dom,
> > > > virDomainObjEndAPI(&vm);
> > > > return ret;
> > > > }
> > > > +
> > > > +
> > > > +static int
> > > > +testDomainGetBlockIoTune(virDomainPtr dom,
> > > > + const char *path,
> > > > + virTypedParameterPtr params,
> > > > + int *nparams,
> > > > + unsigned int flags)
> > > > +{
> > > > + virDomainObjPtr vm = NULL;
> > > > + virDomainDefPtr def = NULL;
> > > > + virDomainDiskDefPtr disk;
> > > > + virDomainBlockIoTuneInfo reply = {0};
> > > > + int ret = -1;
> > > > +
> > > > + virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
> > > > + VIR_DOMAIN_AFFECT_CONFIG |
> > > > + VIR_TYPED_PARAM_STRING_OKAY, -1);
> > > > +
> > > > + flags &= ~VIR_TYPED_PARAM_STRING_OKAY;
> > > > +
> > > > + if (*nparams == 0) {
> > > > + *nparams = 20;
> > > > + return 0;
> > > > + }
> > > > +
> > > > + if (!(vm = testDomObjFromDomain(dom)))
> > > > + return -1;
> > > > +
> > > > + if (!(def = virDomainObjGetOneDef(vm, flags)))
> > > > + goto cleanup;
> > > > +
> > > > + if (!(disk = virDomainDiskByName(def, path, true))) {
> > > > + virReportError(VIR_ERR_INVALID_ARG,
> > > > + _("disk '%s' was not found in the domain config"),
> > > > + path);
> > > > + goto cleanup;
> > > > + }
> > > > +
> > > > + reply = disk->blkdeviotune;
> > > > + if (VIR_STRDUP(reply.group_name, disk->blkdeviotune.group_name) < 0)
> > > > + goto cleanup;
> > > > +
> > > > +#define ULL VIR_TYPED_PARAM_ULLONG
> > >
> > > I don't see a point in doing ^this just to save a few characters, we're way
> > > over the 80 columns already anyway, so wrap the long lines and span the macro
> > > call over multiple lines.
> >
> > That's true that we're already over the 80 columns, but not by that
> > much so I thought that by doing it like that it allows us to "save" 13
> > new lines.
>
> Well, there isn't strictly a rule of thumb here. It's always a personal
> preference, but I look at it whether we gained anything by this "translation",
> we saved 13 lines, great. However, if you split the lines properly, are we
> really going to lose anything? No, not even in terms of readability.
Okay, I see your point and it makes sense.
>
> >
> > > Funny that I remember us having a discussion about macros doing string
> > > concatenation (which I don't really mind that much) but prevents you from jumping
> > > directly to the symbol definition - that's exactly what the QEMU alternative
> > > does, I guess just to save some common prefixes :D.
> >
> > Actually in this case it doesn't really prevent you. Just you need an
> > extra jump. One to jump to the definition of the ULL and from there to
> > jump to the next definition (even though all the ULL usage fits in a
> > single screen).
> >
> > Instead if there are many (instead of a single one) strings like like
> > "TOTAL_BYTES_SEC", "READ_BYTES_SEC" etc that are concatenated/extended
> > magically by some macro it makes it trickier to find the original
> > definitions. But that's just my opinion.
>
> Ironically, patch 2 does exactly the concatenation magic ;).
Haha, well played. ;D I didn't notice / remember that. I will reply to
this on the other e-mail.
So I will resend this after removing the ULL macro.
Thanks,
Ilias
>
> >
> > For me it's alright to use the QEMU macro as well, but we have already
> > the TEST_SET_PARAM which is used everywhere else so it makes more
> > sense to use it here too for consistency reasons I believe.
>
> I didn't object to using TEST_SET_PARAM, I merely suggested a minor adjustment
> to it with other potentially necessary minor adjustments along the way.
>
> Erik
>
> >
> > >
> > > Looking at the functions that use the typed parameters, an improvement we could
> > > definitely do (in a standalone patch) is to ditch the index from the macro
> > > definition since it's quite fragile, by doing:
> > >
> > > int maxparams = X;
> > >
> > > if (*nparams == 0) {
> > > *nparams = maxparams;
> > > return 0;
> > > }
> > >
> > > *nparams = 0;
> > >
> > > TEST_SET_PARAM(¶m[*nparams++],...)
> > >
> > > > + TEST_SET_PARAM(0, VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_BYTES_SEC, ULL, reply.total_bytes_sec);
> > > > + TEST_SET_PARAM(1, VIR_DOMAIN_BLOCK_IOTUNE_READ_BYTES_SEC, ULL, reply.read_bytes_sec);
> > > > + TEST_SET_PARAM(2, VIR_DOMAIN_BLOCK_IOTUNE_WRITE_BYTES_SEC, ULL, reply.write_bytes_sec);
> > > > +
> > > > + TEST_SET_PARAM(3, VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_IOPS_SEC, ULL, reply.total_iops_sec);
> > > > + TEST_SET_PARAM(4, VIR_DOMAIN_BLOCK_IOTUNE_READ_IOPS_SEC, ULL, reply.read_iops_sec);
> > > > + TEST_SET_PARAM(5, VIR_DOMAIN_BLOCK_IOTUNE_WRITE_IOPS_SEC, ULL, reply.write_iops_sec);
> > > > +
> > > > + TEST_SET_PARAM(6, VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_BYTES_SEC_MAX, ULL, reply.total_bytes_sec_max);
> > > > + TEST_SET_PARAM(7, VIR_DOMAIN_BLOCK_IOTUNE_READ_BYTES_SEC_MAX, ULL, reply.read_bytes_sec_max);
> > > > + TEST_SET_PARAM(8, VIR_DOMAIN_BLOCK_IOTUNE_WRITE_BYTES_SEC_MAX, ULL, reply.write_bytes_sec_max);
> > > > +
> > > > + TEST_SET_PARAM(9, VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_IOPS_SEC_MAX, ULL, reply.total_iops_sec_max);
> > > > + TEST_SET_PARAM(10, VIR_DOMAIN_BLOCK_IOTUNE_READ_IOPS_SEC_MAX, ULL, reply.read_iops_sec_max);
> > > > + TEST_SET_PARAM(11, VIR_DOMAIN_BLOCK_IOTUNE_WRITE_IOPS_SEC_MAX, ULL, reply.write_iops_sec_max);
> > > > +
> > > > + TEST_SET_PARAM(12, VIR_DOMAIN_BLOCK_IOTUNE_SIZE_IOPS_SEC, ULL, reply.size_iops_sec);
> > > > +
> > > > + TEST_SET_PARAM(13, VIR_DOMAIN_BLOCK_IOTUNE_GROUP_NAME, VIR_TYPED_PARAM_STRING, reply.group_name);
> > > > + reply.group_name = NULL;
> > > > +
> > > > + TEST_SET_PARAM(14, VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_BYTES_SEC_MAX_LENGTH, ULL,
> > > > + reply.total_bytes_sec_max_length);
> > > > + TEST_SET_PARAM(15, VIR_DOMAIN_BLOCK_IOTUNE_READ_BYTES_SEC_MAX_LENGTH, ULL,
> > > > + reply.read_bytes_sec_max_length);
> > > > + TEST_SET_PARAM(16, VIR_DOMAIN_BLOCK_IOTUNE_WRITE_BYTES_SEC_MAX_LENGTH, ULL,
> > > > + reply.write_bytes_sec_max_length);
> > > > +
> > > > + TEST_SET_PARAM(17, VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_IOPS_SEC_MAX_LENGTH, ULL,
> > > > + reply.total_iops_sec_max_length);
> > > > + TEST_SET_PARAM(18, VIR_DOMAIN_BLOCK_IOTUNE_READ_IOPS_SEC_MAX_LENGTH, ULL,
> > > > + reply.read_iops_sec_max_length);
> > > > + TEST_SET_PARAM(19, VIR_DOMAIN_BLOCK_IOTUNE_WRITE_IOPS_SEC_MAX_LENGTH, ULL,
> > > > + reply.write_iops_sec_max_length);
> > > > +#undef ULL
> > > > +
> > > > + if (*nparams > 20)
> > > > + *nparams = 20;
> > > > +
> > > > + ret = 0;
> > > > + cleanup:
> > > > + VIR_FREE(reply.group_name);
> > > > + virDomainObjEndAPI(&vm);
> > > > + return ret;
> > > > +}
> > > > #undef TEST_SET_PARAM
> > > >
> > > >
> > > > @@ -8512,6 +8601,7 @@ static virHypervisorDriver testHypervisorDriver = {
> > > > .domainGetNumaParameters = testDomainGetNumaParameters, /* 5.6.0 */
> > > > .domainSetInterfaceParameters = testDomainSetInterfaceParameters, /* 5.6.0 */
> > > > .domainGetInterfaceParameters = testDomainGetInterfaceParameters, /* 5.6.0 */
> > > > + .domainGetBlockIoTune = testDomainGetBlockIoTune, /* 5.6.0 */
> > >
> > > 5.7.0 (so that we/I don't forget about to change it ;))
> > >
> > > With breaking the long lines:
> > > Reviewed-by: Erik Skultety <eskultet at redhat.com>
> >
> > --
> > libvir-list mailing list
> > libvir-list at redhat.com
> > https://www.redhat.com/mailman/listinfo/libvir-list
More information about the libvir-list
mailing list