[libvirt] [PATCH] bhyve: silent destroy command errors on cleanup

When virBhyveProcessStart() fails, it tries to unload a guest that could have been already loaded using bhyveload(8) to make sure not to leave it hanging in memory. However, we could fail before loading a VM into memory, so 'bhyvectl --destroy' command will fail and print an error message that looks confusing to users. So ignore errors when running this in cleanup. --- src/bhyve/bhyve_process.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/bhyve/bhyve_process.c b/src/bhyve/bhyve_process.c index b8db076..36c2c21 100644 --- a/src/bhyve/bhyve_process.c +++ b/src/bhyve/bhyve_process.c @@ -189,12 +189,13 @@ virBhyveProcessStart(virConnectPtr conn, cleanup: if (ret < 0) { + int exitstatus = -1; virCommandPtr destroy_cmd; if ((destroy_cmd = virBhyveProcessBuildDestroyCmd(driver, vm->def)) != NULL) { virCommandSetOutputFD(load_cmd, &logfd); virCommandSetErrorFD(load_cmd, &logfd); - ignore_value(virCommandRun(destroy_cmd, NULL)); + ignore_value(virCommandRun(destroy_cmd, &exitstatus)); virCommandFree(destroy_cmd); } -- 1.9.0

On 06/13/2014 01:00 PM, Roman Bogorodskiy wrote:
When virBhyveProcessStart() fails, it tries to unload a guest that could have been already loaded using bhyveload(8) to make sure not to leave it hanging in memory.
However, we could fail before loading a VM into memory, so 'bhyvectl --destroy' command will fail and print an error message that looks confusing to users.
So ignore errors when running this in cleanup. --- src/bhyve/bhyve_process.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/bhyve/bhyve_process.c b/src/bhyve/bhyve_process.c index b8db076..36c2c21 100644 --- a/src/bhyve/bhyve_process.c +++ b/src/bhyve/bhyve_process.c @@ -189,12 +189,13 @@ virBhyveProcessStart(virConnectPtr conn,
cleanup: if (ret < 0) { + int exitstatus = -1;
Elsewhere, I've used comments to make the intention obvious. Also, you don't need to initialize the variable, since you aren't using it anywhere. Something like: int exitstatus; /* Needed to avoid logging non-zero status */
virCommandPtr destroy_cmd; if ((destroy_cmd = virBhyveProcessBuildDestroyCmd(driver, vm->def)) != NULL) { virCommandSetOutputFD(load_cmd, &logfd); virCommandSetErrorFD(load_cmd, &logfd); - ignore_value(virCommandRun(destroy_cmd, NULL)); + ignore_value(virCommandRun(destroy_cmd, &exitstatus)); virCommandFree(destroy_cmd); }
ACK with the comment added. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org

Eric Blake wrote:
On 06/13/2014 01:00 PM, Roman Bogorodskiy wrote:
When virBhyveProcessStart() fails, it tries to unload a guest that could have been already loaded using bhyveload(8) to make sure not to leave it hanging in memory.
However, we could fail before loading a VM into memory, so 'bhyvectl --destroy' command will fail and print an error message that looks confusing to users.
So ignore errors when running this in cleanup. --- src/bhyve/bhyve_process.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/bhyve/bhyve_process.c b/src/bhyve/bhyve_process.c index b8db076..36c2c21 100644 --- a/src/bhyve/bhyve_process.c +++ b/src/bhyve/bhyve_process.c @@ -189,12 +189,13 @@ virBhyveProcessStart(virConnectPtr conn,
cleanup: if (ret < 0) { + int exitstatus = -1;
Elsewhere, I've used comments to make the intention obvious. Also, you don't need to initialize the variable, since you aren't using it anywhere. Something like:
int exitstatus; /* Needed to avoid logging non-zero status */
virCommandPtr destroy_cmd; if ((destroy_cmd = virBhyveProcessBuildDestroyCmd(driver, vm->def)) != NULL) { virCommandSetOutputFD(load_cmd, &logfd); virCommandSetErrorFD(load_cmd, &logfd); - ignore_value(virCommandRun(destroy_cmd, NULL)); + ignore_value(virCommandRun(destroy_cmd, &exitstatus)); virCommandFree(destroy_cmd); }
ACK with the comment added.
Thanks, pushed with the suggested fixes. Roman Bogorodskiy
participants (2)
-
Eric Blake
-
Roman Bogorodskiy