[libvirt] [PATCH v2 6/8] qemu: Use qemuGetCompressionProgram for error paths

John Ferlan jferlan at redhat.com
Tue Sep 27 20:42:36 UTC 2016



On 09/27/2016 12:53 PM, Ján Tomko wrote:
> On Fri, Sep 23, 2016 at 07:30:54AM -0400, John Ferlan wrote:
>> Let's do some more code reuse - there are 3 other callers that care to
>> check/get the compress program. Each of those though cares whether the
>> requested cfg image is valid and exists. So, add a parameter to handle
>> those cases.
>>
>> NB: We won't need to initialize the returned value in the case where
>> the cfg image doesn't exist since the called program will handle that.
>>
>> Signed-off-by: John Ferlan <jferlan at redhat.com>
>> ---
>> src/qemu/qemu_driver.c | 103
>> +++++++++++++++++++++----------------------------
>> 1 file changed, 43 insertions(+), 60 deletions(-)
>>
>> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
>> index 7dfba50..8a47262 100644
>> --- a/src/qemu/qemu_driver.c
>> +++ b/src/qemu/qemu_driver.c
>> @@ -3271,6 +3271,9 @@ qemuCompressProgramAvailable(virQEMUSaveFormat
>> compress)
>>  * @imageFormat: String representation from qemu.conf for the compression
>>  *               image format being used (dump, save, or snapshot).
>>  * @styleFormat: String representing the style of format (dump, save,
>> snapshot)
>> + * @use_raw_on_fail: Boolean indicating how to handle the error path.
>> For
>> + *                   callers that are OK with invalid data or
>> inability to
>> + *                   find the compression program, just return a raw
>> format
>>  *
>>  * Returns:
>>  *    virQEMUSaveFormat    - Integer representation of the compression
>> @@ -3282,7 +3285,8 @@ qemuCompressProgramAvailable(virQEMUSaveFormat
>> compress)
>>  */
>> static virQEMUSaveFormat
>> qemuGetCompressionProgram(const char *imageFormat,
>> -                          const char *styleFormat)
>> +                          const char *styleFormat,
>> +                          bool use_raw_on_fail)
>> {
>>     virQEMUSaveFormat ret;
>>
>> @@ -3298,18 +3302,34 @@ qemuGetCompressionProgram(const char
>> *imageFormat,
>>     return ret;
>>
>>  error:
>> -    if (ret < 0)
>> -        VIR_WARN("Invalid %s image format specified in "
>> -                 "configuration file, using raw",
>> -                 styleFormat);
>> -    else
>> -        VIR_WARN("Compression program for %s image format in "
>> -                 "configuration file isn't available, using raw",
>> -                 styleFormat);
>> +    if (ret < 0) {
>> +        if (use_raw_on_fail)
>> +            VIR_WARN("Invalid %s image format specified in "
>> +                     "configuration file, using raw",
>> +                     styleFormat);
>> +        else
>> +            virReportError(VIR_ERR_OPERATION_FAILED,
>> +                           _("Invalid %s image format specified "
>> +                             "in configuration file"),
>> +                           styleFormat);
>> +    } else {
>> +        if (use_raw_on_fail)
>> +            VIR_WARN("Compression program for %s image format in "
>> +                     "configuration file isn't available, using raw",
>> +                     styleFormat);
>> +        else
>> +            virReportError(VIR_ERR_OPERATION_FAILED,
>> +                           _("Compression program for %s image format "
>> +                             "in configuration file isn't available"),
>> +                           styleFormat);
>> +    }
> 
> This might work for the English language, but constructing a translatable
> message in this matter is unfriendly to translators and not worth
> shaving off a few lines of code.

Hmm... And qemuDomainDiskChangeSupported is any better?  Similarly
qemuMonitorJSONGetBlockInfo?

Instead of 3 (or 4) message pairs that we all similar varying only by
"dump", "save", or "snapshot" there is now 1 message pair which has a %s
parameter no different than 1000's of other libvirt messages. Since
dump, save, and snapshot are all command names - does their translation
really change?

Beyond that I'll note that qemuNodeDeviceDetachFlags uses a const char
*driverName which is just a string and can be messaged using %s. Also
qemuConnectGetDomainCapabilities uses a const char *virttype_str which
is messaged.

> 
> Also, logging the "styleFormat" (sic) only makes sense for the dump,
> which might not have been a result of an API call, otherwise we're
> better off putting the image format in here.
> 

If you don't like the variable name, then change it.  I'm not offended.

> If you call the snapshot API and get an error saying "xz" was not found,
> you know it's not for the core dump format.
> 

If you prefer a different mechanism, I'll review the patch when I see it.


John




More information about the libvir-list mailing list