[libvirt] [PATCH] bhyve: process: Log error message when kill fails
Cole Robinson
crobinso at redhat.com
Sat Mar 19 19:07:07 UTC 2016
On 03/19/2016 03:04 PM, Roman Bogorodskiy wrote:
> Cole Robinson wrote:
>
>> virProcessKillPainfully will raise a libvirt error, so log it. We
>> can drop the manual pid logging since ProcessKill always reports
>> the pid in its error message.
>> ---
>> src/bhyve/bhyve_process.c | 5 ++---
>> 1 file changed, 2 insertions(+), 3 deletions(-)
>>
>> diff --git a/src/bhyve/bhyve_process.c b/src/bhyve/bhyve_process.c
>> index 14588a9..f2ec712 100644
>> --- a/src/bhyve/bhyve_process.c
>> +++ b/src/bhyve/bhyve_process.c
>> @@ -283,9 +283,8 @@ virBhyveProcessStop(bhyveConnPtr driver,
>>
>> /* First, try to kill 'bhyve' process */
>> if (virProcessKillPainfully(vm->pid, true) != 0)
>> - VIR_WARN("Failed to gracefully stop bhyve VM '%s' (pid: %d)",
>> - vm->def->name,
>> - (int)vm->pid);
>> + VIR_WARN("Failed to gracefully stop bhyve VM '%s': %s",
>> + vm->def->name, virGetLastErrorMessage());
>>
>> /* Cleanup network interfaces */
>> bhyveNetCleanup(vm);
>
> If we want to call virGetLastErrorMessage() here, the check should be a
> little more complex because virProcessKillPainfully() could return 1 if
> it failed to kill with SIGTERM and killed with SIGKILL and in this case
> it doesn't set error.
>
> What do you think about this bit?
>
> diff --git a/src/bhyve/bhyve_process.c b/src/bhyve/bhyve_process.c
> index f2ec712..133589a 100644
> --- a/src/bhyve/bhyve_process.c
> +++ b/src/bhyve/bhyve_process.c
> @@ -263,6 +263,7 @@ virBhyveProcessStop(bhyveConnPtr driver,
> virDomainShutoffReason reason)
> {
> int ret = -1;
> + int kill_ret = -1;
> virCommandPtr cmd = NULL;
> bhyveDomainObjPrivatePtr priv = vm->privateData;
>
> @@ -282,9 +283,17 @@ virBhyveProcessStop(bhyveConnPtr driver,
> bhyveMonitorClose(priv->mon);
>
> /* First, try to kill 'bhyve' process */
> - if (virProcessKillPainfully(vm->pid, true) != 0)
> - VIR_WARN("Failed to gracefully stop bhyve VM '%s': %s",
> - vm->def->name, virGetLastErrorMessage());
> + kill_ret = virProcessKillPainfully(vm->pid, true);
> + if (kill_ret != 0) {
> + if (kill_ret == 1) {
> + VIR_WARN("Failed to gracefully stop bhyve VM '%s' (pid: %d)",
> + vm->def->name,
> + (int)vm->pid);
> + } else {
> + VIR_WARN("Failed to kill bhyve process for VM '%s': %s",
> + vm->def->name, virGetLastErrorMessage());
> + }
> + }
>
Ah, sorry for not looking close enough at KillPainfully return codes. That
sounds good to me, I was mostly just looking for candidates to convert to
virGetLastErrorMessage() :)
Thanks,
Cole
More information about the libvir-list
mailing list