[libvirt] [PATCH 06/20] openvz: Create accessors to virDomainObjListFindByUUID
John Ferlan
jferlan at redhat.com
Fri Mar 30 14:26:17 UTC 2018
On 03/29/2018 01:36 PM, Jim Fehlig wrote:
> On 03/09/2018 09:48 AM, John Ferlan wrote:
>> Rather than repeat code throughout, create and use a couple of
>> accessors in order to lookup by UUID.
>>
>> Signed-off-by: John Ferlan <jferlan at redhat.com>
>> ---
>> src/openvz/openvz_driver.c | 266
>> +++++++++++++--------------------------------
>> 1 file changed, 76 insertions(+), 190 deletions(-)
>>
>> diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c
>> index a211c370e..167ba2f7a 100644
>> --- a/src/openvz/openvz_driver.c
>> +++ b/src/openvz/openvz_driver.c
>> @@ -87,6 +87,39 @@ static void openvzDriverUnlock(struct openvz_driver
>> *driver)
>> struct openvz_driver ovz_driver;
>> +
>> +static virDomainObjPtr
>> +openvzDomObjFromDomainLocked(struct openvz_driver *driver,
>> + const unsigned char *uuid)
>> +{
>> + virDomainObjPtr vm;
>> + char uuidstr[VIR_UUID_STRING_BUFLEN];
>> +
>> + if (!(vm = virDomainObjListFindByUUID(driver->domains, uuid))) {
>> + virUUIDFormat(uuid, uuidstr);
>> +
>> + virReportError(VIR_ERR_NO_DOMAIN,
>> + _("no domain with matching uuid '%s'"), uuidstr);
>> + return NULL;
>> + }
>> +
>> + return vm;
>> +}
>> +
>> +
>> +static virDomainObjPtr
>> +openvzDomObjFromDomain(struct openvz_driver *driver,
>> + const unsigned char *uuid)
>> +{
>> + virDomainObjPtr vm;
>> +
>> + openvzDriverLock(driver);
>> + vm = openvzDomObjFromDomainLocked(driver, uuid);
>> + openvzDriverUnlock(driver);
>> + return vm;
>> +}
>> +
>> +
>> static int
>> openvzDomainDefPostParse(virDomainDefPtr def,
>> virCapsPtr caps ATTRIBUTE_UNUSED,
>> @@ -281,15 +314,8 @@ openvzDomainGetHostname(virDomainPtr dom,
>> unsigned int flags)
>> virDomainObjPtr vm;
>> virCheckFlags(0, NULL);
>> - openvzDriverLock(driver);
>> - vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
>> - openvzDriverUnlock(driver);
>> -
>> - if (!vm) {
>> - virReportError(VIR_ERR_NO_DOMAIN, "%s",
>> - _("no domain with matching uuid"));
>> - goto cleanup;
>> - }
>> + if (!(vm = openvzDomObjFromDomain(driver, dom->uuid)))
>> + return NULL;
>
> It looks like the cleanup label can be removed from this function too.
>
True, but it's not "as clean" as others since error does the goto clean
thing. The others where the cleanup: label disappears is because there
was only one goto cleanup... and the "if (vm)" would be useless too, but
that's handled in a couple of patches anyway.
In any case, I'll add an adjustment with my eventual followup series
that alters virDomainObjAdd processing.
>> hostname = openvzVEGetStringParam(dom, "hostname");
>> if (hostname == NULL)
>> @@ -359,18 +385,11 @@ static char *openvzDomainGetOSType(virDomainPtr
>> dom)
>> virDomainObjPtr vm;
>> char *ret = NULL;
>> - openvzDriverLock(driver);
>> - vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
>> - openvzDriverUnlock(driver);
>> -
>> - if (!vm) {
>> - virReportError(VIR_ERR_NO_DOMAIN, NULL);
>> - goto cleanup;
>> - }
>> + if (!(vm = openvzDomObjFromDomain(driver, dom->uuid)))
>> + return NULL;
>> ignore_value(VIR_STRDUP(ret,
>> virDomainOSTypeToString(vm->def->os.type)));
>> - cleanup:
>> if (vm)
>> virObjectUnlock(vm);
>> return ret;
>> @@ -384,18 +403,11 @@ static virDomainPtr
>> openvzDomainLookupByUUID(virConnectPtr conn,
>> virDomainObjPtr vm;
>> virDomainPtr dom = NULL;
>> - openvzDriverLock(driver);
>> - vm = virDomainObjListFindByUUID(driver->domains, uuid);
>> - openvzDriverUnlock(driver);
>> -
>> - if (!vm) {
>> - virReportError(VIR_ERR_NO_DOMAIN, NULL);
>> - goto cleanup;
>> - }
>> + if (!(vm = openvzDomObjFromDomain(driver, uuid)))
>> + return NULL;
>> dom = virGetDomain(conn, vm->def->name, vm->def->uuid,
>> vm->def->id);
>> - cleanup:
>> if (vm)
>> virObjectUnlock(vm);
>> return dom;
>> @@ -432,15 +444,8 @@ static int openvzDomainGetInfo(virDomainPtr dom,
>> int state;
>> int ret = -1;
>> - openvzDriverLock(driver);
>> - vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
>> - openvzDriverUnlock(driver);
>> -
>> - if (!vm) {
>> - virReportError(VIR_ERR_NO_DOMAIN, "%s",
>> - _("no domain with matching uuid"));
>> - goto cleanup;
>> - }
>> + if (!(vm = openvzDomObjFromDomain(driver, dom->uuid)))
>> + return -1;
>> if (openvzGetVEStatus(vm, &state, NULL) == -1)
>> goto cleanup;
>> @@ -480,19 +485,11 @@ openvzDomainGetState(virDomainPtr dom,
>> virCheckFlags(0, -1);
>> - openvzDriverLock(driver);
>> - vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
>> - openvzDriverUnlock(driver);
>> -
>> - if (!vm) {
>> - virReportError(VIR_ERR_NO_DOMAIN, "%s",
>> - _("no domain with matching uuid"));
>> - goto cleanup;
>> - }
>> + if (!(vm = openvzDomObjFromDomain(driver, dom->uuid)))
>> + return -1;
>> ret = openvzGetVEStatus(vm, state, reason);
>> - cleanup:
>> if (vm)
>> virObjectUnlock(vm);
>> return ret;
>> @@ -505,16 +502,11 @@ static int openvzDomainIsActive(virDomainPtr dom)
>> virDomainObjPtr obj;
>> int ret = -1;
>> - openvzDriverLock(driver);
>> - obj = virDomainObjListFindByUUID(driver->domains, dom->uuid);
>> - openvzDriverUnlock(driver);
>> - if (!obj) {
>> - virReportError(VIR_ERR_NO_DOMAIN, NULL);
>> - goto cleanup;
>> - }
>> + if (!(obj = openvzDomObjFromDomain(driver, dom->uuid)))
>> + return -1;
>> +
>> ret = virDomainObjIsActive(obj);
>> - cleanup:
>> if (obj)
>> virObjectUnlock(obj);
>> return ret;
>> @@ -527,16 +519,11 @@ static int openvzDomainIsPersistent(virDomainPtr
>> dom)
>> virDomainObjPtr obj;
>> int ret = -1;
>> - openvzDriverLock(driver);
>> - obj = virDomainObjListFindByUUID(driver->domains, dom->uuid);
>> - openvzDriverUnlock(driver);
>> - if (!obj) {
>> - virReportError(VIR_ERR_NO_DOMAIN, NULL);
>> - goto cleanup;
>> - }
>> + if (!(obj = openvzDomObjFromDomain(driver, dom->uuid)))
>> + return -1;
>> +
>> ret = obj->persistent;
>> - cleanup:
>> if (obj)
>> virObjectUnlock(obj);
>> return ret;
>> @@ -554,20 +541,12 @@ static char *openvzDomainGetXMLDesc(virDomainPtr
>> dom, unsigned int flags) {
>> /* Flags checked by virDomainDefFormat */
>> - openvzDriverLock(driver);
>> - vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
>> - openvzDriverUnlock(driver);
>> -
>> - if (!vm) {
>> - virReportError(VIR_ERR_NO_DOMAIN, "%s",
>> - _("no domain with matching uuid"));
>> - goto cleanup;
>> - }
>> + if (!(vm = openvzDomObjFromDomain(driver, dom->uuid)))
>> + return NULL;
>> ret = virDomainDefFormat(vm->def, driver->caps,
>> virDomainDefFormatConvertXMLFlags(flags));
>> - cleanup:
>> if (vm)
>> virObjectUnlock(vm);
>> return ret;
>> @@ -600,15 +579,8 @@ static int openvzDomainSuspend(virDomainPtr dom)
>> const char *prog[] = {VZCTL, "--quiet", "chkpnt",
>> PROGRAM_SENTINEL, "--suspend", NULL};
>> int ret = -1;
>> - openvzDriverLock(driver);
>> - vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
>> - openvzDriverUnlock(driver);
>> -
>> - if (!vm) {
>> - virReportError(VIR_ERR_NO_DOMAIN, "%s",
>> - _("no domain with matching uuid"));
>> - goto cleanup;
>> - }
>> + if (!(vm = openvzDomObjFromDomain(driver, dom->uuid)))
>> + return -1;
>> if (!virDomainObjIsActive(vm)) {
>> virReportError(VIR_ERR_OPERATION_INVALID, "%s",
>> @@ -638,15 +610,8 @@ static int openvzDomainResume(virDomainPtr dom)
>> const char *prog[] = {VZCTL, "--quiet", "chkpnt",
>> PROGRAM_SENTINEL, "--resume", NULL};
>> int ret = -1;
>> - openvzDriverLock(driver);
>> - vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
>> - openvzDriverUnlock(driver);
>> -
>> - if (!vm) {
>> - virReportError(VIR_ERR_NO_DOMAIN, "%s",
>> - _("no domain with matching uuid"));
>> - goto cleanup;
>> - }
>> + if (!(vm = openvzDomObjFromDomain(driver, dom->uuid)))
>> + return -1;
>> if (!virDomainObjIsActive(vm)) {
>> virReportError(VIR_ERR_OPERATION_INVALID, "%s",
>> @@ -681,15 +646,8 @@ openvzDomainShutdownFlags(virDomainPtr dom,
>> virCheckFlags(0, -1);
>> - openvzDriverLock(driver);
>> - vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
>> - openvzDriverUnlock(driver);
>> -
>> - if (!vm) {
>> - virReportError(VIR_ERR_NO_DOMAIN, "%s",
>> - _("no domain with matching uuid"));
>> - goto cleanup;
>> - }
>> + if (!(vm = openvzDomObjFromDomain(driver, dom->uuid)))
>> + return -1;
>> if (openvzGetVEStatus(vm, &status, NULL) == -1)
>> goto cleanup;
>> @@ -744,15 +702,8 @@ static int openvzDomainReboot(virDomainPtr dom,
>> virCheckFlags(0, -1);
>> - openvzDriverLock(driver);
>> - vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
>> - openvzDriverUnlock(driver);
>> -
>> - if (!vm) {
>> - virReportError(VIR_ERR_NO_DOMAIN, "%s",
>> - _("no domain with matching uuid"));
>> - goto cleanup;
>> - }
>> + if (!(vm = openvzDomObjFromDomain(driver, dom->uuid)))
>> + return -1;
>> if (openvzGetVEStatus(vm, &status, NULL) == -1)
>> goto cleanup;
>> @@ -1210,12 +1161,8 @@ openvzDomainUndefineFlags(virDomainPtr dom,
>> virCheckFlags(0, -1);
>> openvzDriverLock(driver);
>> - vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
>> - if (!vm) {
>> - virReportError(VIR_ERR_NO_DOMAIN, "%s",
>> - _("no domain with matching uuid"));
>> + if (!(vm = openvzDomObjFromDomainLocked(driver, dom->uuid)))
>> goto cleanup;
>> - }
>
> Not related to your goal, but I wonder why the pattern here is
> different? Why does the driver need to be locked during the entire
> undefine operation?
>
My assumption, old driver, no one updated it once the domainobjlist code
became self locking. I will add it to a future adjustment when I have to
mess with the Add code
Tks -
John
>> if (openvzGetVEStatus(vm, &status, NULL) == -1)
>> goto cleanup;
>> @@ -1255,15 +1202,8 @@ openvzDomainSetAutostart(virDomainPtr dom, int
>> autostart)
>> "--save", NULL };
>> int ret = -1;
>> - openvzDriverLock(driver);
>> - vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
>> - openvzDriverUnlock(driver);
>> -
>> - if (!vm) {
>> - virReportError(VIR_ERR_NO_DOMAIN, "%s",
>> - _("no domain with matching uuid"));
>> - goto cleanup;
>> - }
>> + if (!(vm = openvzDomObjFromDomain(driver, dom->uuid)))
>> + return -1;
>> openvzSetProgramSentinal(prog, vm->def->name);
>> if (virRun(prog, NULL) < 0)
>> @@ -1284,15 +1224,8 @@ openvzDomainGetAutostart(virDomainPtr dom, int
>> *autostart)
>> char *value = NULL;
>> int ret = -1;
>> - openvzDriverLock(driver);
>> - vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
>> - openvzDriverUnlock(driver);
>> -
>> - if (!vm) {
>> - virReportError(VIR_ERR_NO_DOMAIN, "%s",
>> - _("no domain with matching uuid"));
>> - goto cleanup;
>> - }
>> + if (!(vm = openvzDomObjFromDomain(driver, dom->uuid)))
>> + return -1;
>> if (openvzReadVPSConfigParam(strtoI(vm->def->name), "ONBOOT",
>> &value) < 0) {
>> virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>> @@ -1383,15 +1316,8 @@ static int
>> openvzDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
>> return -1;
>> }
>> - openvzDriverLock(driver);
>> - vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
>> - openvzDriverUnlock(driver);
>> -
>> - if (!vm) {
>> - virReportError(VIR_ERR_NO_DOMAIN, "%s",
>> - _("no domain with matching uuid"));
>> - goto cleanup;
>> - }
>> + if (!(vm = openvzDomObjFromDomain(driver, dom->uuid)))
>> + return -1;
>> if (nvcpus <= 0) {
>> virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>> @@ -1987,17 +1913,8 @@ openvzDomainInterfaceStats(virDomainPtr dom,
>> virDomainNetDefPtr net = NULL;
>> int ret = -1;
>> - openvzDriverLock(driver);
>> - vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
>> - openvzDriverUnlock(driver);
>> -
>> - if (!vm) {
>> - char uuidstr[VIR_UUID_STRING_BUFLEN];
>> - virUUIDFormat(dom->uuid, uuidstr);
>> - virReportError(VIR_ERR_NO_DOMAIN,
>> - _("no domain with matching uuid '%s'"), uuidstr);
>> - goto cleanup;
>> - }
>> + if (!(vm = openvzDomObjFromDomain(driver, dom->uuid)))
>> + return -1;
>> if (!virDomainObjIsActive(vm)) {
>> virReportError(VIR_ERR_OPERATION_INVALID,
>> @@ -2082,13 +1999,8 @@ openvzDomainUpdateDeviceFlags(virDomainPtr dom,
>> const char *xml,
>> VIR_DOMAIN_DEVICE_MODIFY_CONFIG, -1);
>> openvzDriverLock(driver);
>> - vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
>> -
>> - if (!vm) {
>> - virReportError(VIR_ERR_NO_DOMAIN, "%s",
>> - _("no domain with matching uuid"));
>> + if (!(vm = openvzDomObjFromDomainLocked(driver, dom->uuid)))
>> goto cleanup;
>> - }
>
> Same here. It's odd that the driver needs to be locked for the whole
> operation. But it's orthogonal to your work.
>
> Reviewed-by: Jim Fehlig <jfehlig at suse.com>
>
> Regards,
> Jim
>
>> if (virStrToLong_i(vm->def->name, NULL, 10, &veid) < 0) {
>> virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>> @@ -2230,15 +2142,8 @@ openvzDomainMigrateBegin3Params(virDomainPtr
>> domain,
>> if (virTypedParamsValidate(params, nparams,
>> OPENVZ_MIGRATION_PARAMETERS) < 0)
>> return NULL;
>> - openvzDriverLock(driver);
>> - vm = virDomainObjListFindByUUID(driver->domains, domain->uuid);
>> - openvzDriverUnlock(driver);
>> -
>> - if (!vm) {
>> - virReportError(VIR_ERR_NO_DOMAIN, "%s",
>> - _("no domain with matching uuid"));
>> - goto cleanup;
>> - }
>> + if (!(vm = openvzDomObjFromDomain(driver, domain->uuid)))
>> + return NULL;
>> if (!virDomainObjIsActive(vm)) {
>> virReportError(VIR_ERR_OPERATION_INVALID,
>> @@ -2394,15 +2299,8 @@ openvzDomainMigratePerform3Params(virDomainPtr
>> domain,
>> &uri_str) < 0)
>> goto cleanup;
>> - openvzDriverLock(driver);
>> - vm = virDomainObjListFindByUUID(driver->domains, domain->uuid);
>> - openvzDriverUnlock(driver);
>> -
>> - if (!vm) {
>> - virReportError(VIR_ERR_NO_DOMAIN, "%s",
>> - _("no domain with matching uuid"));
>> + if (!(vm = openvzDomObjFromDomain(driver, domain->uuid)))
>> goto cleanup;
>> - }
>> /* parse dst host:port from uri */
>> uri = virURIParse(uri_str);
>> @@ -2504,15 +2402,8 @@ openvzDomainMigrateConfirm3Params(virDomainPtr
>> domain,
>> if (virTypedParamsValidate(params, nparams,
>> OPENVZ_MIGRATION_PARAMETERS) < 0)
>> goto cleanup;
>> - openvzDriverLock(driver);
>> - vm = virDomainObjListFindByUUID(driver->domains, domain->uuid);
>> - openvzDriverUnlock(driver);
>> -
>> - if (!vm) {
>> - virReportError(VIR_ERR_NO_DOMAIN, "%s",
>> - _("no domain with matching uuid"));
>> + if (!(vm = openvzDomObjFromDomain(driver, domain->uuid)))
>> goto cleanup;
>> - }
>> if (cancelled) {
>> if (openvzGetVEStatus(vm, &status, NULL) == -1)
>> @@ -2552,16 +2443,11 @@ openvzDomainHasManagedSaveImage(virDomainPtr
>> dom, unsigned int flags)
>> virCheckFlags(0, -1);
>> - openvzDriverLock(driver);
>> - obj = virDomainObjListFindByUUID(driver->domains, dom->uuid);
>> - openvzDriverUnlock(driver);
>> - if (!obj) {
>> - virReportError(VIR_ERR_NO_DOMAIN, NULL);
>> - goto cleanup;
>> - }
>> + if (!(obj = openvzDomObjFromDomain(driver, dom->uuid)))
>> + return -1;
>> +
>> ret = 0;
>> - cleanup:
>> if (obj)
>> virObjectUnlock(obj);
>> return ret;
>>
>
More information about the libvir-list
mailing list