[PATCH v2] Pass shutoff reason to release hook

Swapnil Ingle posted 1 patch 2 months, 3 weeks ago
Failed in applying to current master (apply log)
docs/hooks.rst          | 49 +++++++++++++++++++++++++++++++++++++++--
src/lxc/lxc_process.c   |  2 +-
src/qemu/qemu_process.c |  2 +-
3 files changed, 49 insertions(+), 4 deletions(-)
[PATCH v2] Pass shutoff reason to release hook
Posted by Swapnil Ingle 2 months, 3 weeks ago
Sometimes in release hook it is useful to know if the VM shutdown was graceful
or not. This is especially useful to do cleanup based on the VM shutdown failure
reason in release hook. This patch proposes to use the last argument 'extra'
to pass VM shutoff reason in the call to release hook.
Making this change for Qemu and LXC.

Signed-off-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
---
 docs/hooks.rst          | 49 +++++++++++++++++++++++++++++++++++++++--
 src/lxc/lxc_process.c   |  2 +-
 src/qemu/qemu_process.c |  2 +-
 3 files changed, 49 insertions(+), 4 deletions(-)

diff --git a/docs/hooks.rst b/docs/hooks.rst
index 1dbc492bd4..cdcb161c7e 100644
--- a/docs/hooks.rst
+++ b/docs/hooks.rst
@@ -215,7 +215,30 @@ operation. There is no specific operation to indicate a "restart" is occurring.
 
    ::
 
-      /etc/libvirt/hooks/qemu guest_name release end -
+      /etc/libvirt/hooks/qemu guest_name release end <shutoff-reason>
+
+   +-------------------+------------------------------------------------------------------+
+   | Shutoff reason    | Description                                                      |
+   +===================+==================================================================+
+   | unknown           | the reason is unknown                                            |
+   +-------------------+------------------------------------------------------------------+
+   | shutdown          | normal shutdown                                                  |
+   +-------------------+------------------------------------------------------------------+
+   | destroyed         | forced poweroff                                                  |
+   +-------------------+------------------------------------------------------------------+
+   | crashed           | domain crashed                                                   |
+   +-------------------+------------------------------------------------------------------+
+   | migrated          | migrated to another host                                         |
+   +-------------------+------------------------------------------------------------------+
+   | saved             | saved to a file                                                  |
+   +-------------------+------------------------------------------------------------------+
+   | failed            | domain failed to start                                           |
+   +-------------------+------------------------------------------------------------------+
+   | from snapshot     | restored from a snapshot which was taken while domain was shutoff|
+   +-------------------+------------------------------------------------------------------+
+   | daemon            | daemon decides to kill domain during reconnection processing     |
+   +-------------------+------------------------------------------------------------------+
+
 
 -  :since:`Since 0.9.11`, the qemu hook script is also called at the beginning
    of incoming migration. It is called as:
@@ -312,7 +335,29 @@ operation. There is no specific operation to indicate a "restart" is occurring.
 
    ::
 
-      /etc/libvirt/hooks/lxc guest_name release end -
+      /etc/libvirt/hooks/lxc guest_name release end <shutoff-reason>
+
+   +-------------------+------------------------------------------------------------------+
+   | Shutoff reason    | Description                                                      |
+   +===================+==================================================================+
+   | unknown           | the reason is unknown                                            |
+   +-------------------+------------------------------------------------------------------+
+   | shutdown          | normal shutdown                                                  |
+   +-------------------+------------------------------------------------------------------+
+   | destroyed         | forced poweroff                                                  |
+   +-------------------+------------------------------------------------------------------+
+   | crashed           | domain crashed                                                   |
+   +-------------------+------------------------------------------------------------------+
+   | migrated          | migrated to another host                                         |
+   +-------------------+------------------------------------------------------------------+
+   | saved             | saved to a file                                                  |
+   +-------------------+------------------------------------------------------------------+
+   | failed            | domain failed to start                                           |
+   +-------------------+------------------------------------------------------------------+
+   | from snapshot     | restored from a snapshot which was taken while domain was shutoff|
+   +-------------------+------------------------------------------------------------------+
+   | daemon            | daemon decides to kill domain during reconnection processing     |
+   +-------------------+------------------------------------------------------------------+
 
 -  :since:`Since 0.9.13`, the lxc hook script is also called when the libvirtd
    daemon restarts and reconnects to previously running LXC processes. If the
diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c
index 30ff4eb3d0..f5eb5383ec 100644
--- a/src/lxc/lxc_process.c
+++ b/src/lxc/lxc_process.c
@@ -244,7 +244,7 @@ static void virLXCProcessCleanup(virLXCDriver *driver,
         /* we can't stop the operation even if the script raised an error */
         virHookCall(VIR_HOOK_DRIVER_LXC, vm->def->name,
                     VIR_HOOK_LXC_OP_RELEASE, VIR_HOOK_SUBOP_END,
-                    NULL, xml, NULL);
+                    virDomainShutoffReasonTypeToString(reason), xml, NULL);
     }
 
     if (flags & VIR_LXC_PROCESS_CLEANUP_REMOVE_TRANSIENT)
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 2c33ac3bf7..9de01b1a0d 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -8722,7 +8722,7 @@ void qemuProcessStop(virQEMUDriver *driver,
         /* we can't stop the operation even if the script raised an error */
         virHookCall(VIR_HOOK_DRIVER_QEMU, vm->def->name,
                     VIR_HOOK_QEMU_OP_RELEASE, VIR_HOOK_SUBOP_END,
-                    NULL, xml, NULL);
+                    virDomainShutoffReasonTypeToString(reason), xml, NULL);
     }
 
     virDomainObjRemoveTransientDef(vm);
-- 
2.45.2
Re: [PATCH v2] Pass shutoff reason to release hook
Posted by Michal Prívozník 2 months, 2 weeks ago
On 6/18/24 18:39, Swapnil Ingle wrote:
> Sometimes in release hook it is useful to know if the VM shutdown was graceful
> or not. This is especially useful to do cleanup based on the VM shutdown failure
> reason in release hook. This patch proposes to use the last argument 'extra'
> to pass VM shutoff reason in the call to release hook.
> Making this change for Qemu and LXC.
> 
> Signed-off-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
> ---
>  docs/hooks.rst          | 49 +++++++++++++++++++++++++++++++++++++++--
>  src/lxc/lxc_process.c   |  2 +-
>  src/qemu/qemu_process.c |  2 +-
>  3 files changed, 49 insertions(+), 4 deletions(-)
> 
> diff --git a/docs/hooks.rst b/docs/hooks.rst
> index 1dbc492bd4..cdcb161c7e 100644
> --- a/docs/hooks.rst
> +++ b/docs/hooks.rst
> @@ -215,7 +215,30 @@ operation. There is no specific operation to indicate a "restart" is occurring.
>  
>     ::
>  
> -      /etc/libvirt/hooks/qemu guest_name release end -
> +      /etc/libvirt/hooks/qemu guest_name release end <shutoff-reason>
> +
> +   +-------------------+------------------------------------------------------------------+
> +   | Shutoff reason    | Description                                                      |
> +   +===================+==================================================================+
> +   | unknown           | the reason is unknown                                            |
> +   +-------------------+------------------------------------------------------------------+
> +   | shutdown          | normal shutdown                                                  |
> +   +-------------------+------------------------------------------------------------------+
> +   | destroyed         | forced poweroff                                                  |
> +   +-------------------+------------------------------------------------------------------+
> +   | crashed           | domain crashed                                                   |
> +   +-------------------+------------------------------------------------------------------+
> +   | migrated          | migrated to another host                                         |
> +   +-------------------+------------------------------------------------------------------+
> +   | saved             | saved to a file                                                  |
> +   +-------------------+------------------------------------------------------------------+
> +   | failed            | domain failed to start                                           |
> +   +-------------------+------------------------------------------------------------------+
> +   | from snapshot     | restored from a snapshot which was taken while domain was shutoff|
> +   +-------------------+------------------------------------------------------------------+

Nitpick, I'm inserting an empty space at the end of the table so that
"shutoff" is not joined with '|' like this.

> +   | daemon            | daemon decides to kill domain during reconnection processing     |
> +   +-------------------+------------------------------------------------------------------+
> +
>  
>  -  :since:`Since 0.9.11`, the qemu hook script is also called at the beginning
>     of incoming migration. It is called as:
> @@ -312,7 +335,29 @@ operation. There is no specific operation to indicate a "restart" is occurring.
>  
>     ::
>  
> -      /etc/libvirt/hooks/lxc guest_name release end -
> +      /etc/libvirt/hooks/lxc guest_name release end <shutoff-reason>
> +
> +   +-------------------+------------------------------------------------------------------+
> +   | Shutoff reason    | Description                                                      |
> +   +===================+==================================================================+
> +   | unknown           | the reason is unknown                                            |
> +   +-------------------+------------------------------------------------------------------+
> +   | shutdown          | normal shutdown                                                  |
> +   +-------------------+------------------------------------------------------------------+
> +   | destroyed         | forced poweroff                                                  |
> +   +-------------------+------------------------------------------------------------------+
> +   | crashed           | domain crashed                                                   |
> +   +-------------------+------------------------------------------------------------------+
> +   | migrated          | migrated to another host                                         |
> +   +-------------------+------------------------------------------------------------------+
> +   | saved             | saved to a file                                                  |
> +   +-------------------+------------------------------------------------------------------+
> +   | failed            | domain failed to start                                           |
> +   +-------------------+------------------------------------------------------------------+
> +   | from snapshot     | restored from a snapshot which was taken while domain was shutoff|
> +   +-------------------+------------------------------------------------------------------+
> +   | daemon            | daemon decides to kill domain during reconnection processing     |
> +   +-------------------+------------------------------------------------------------------+
>  
>  -  :since:`Since 0.9.13`, the lxc hook script is also called when the libvirtd
>     daemon restarts and reconnects to previously running LXC processes. If the
> diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c
> index 30ff4eb3d0..f5eb5383ec 100644
> --- a/src/lxc/lxc_process.c
> +++ b/src/lxc/lxc_process.c
> @@ -244,7 +244,7 @@ static void virLXCProcessCleanup(virLXCDriver *driver,
>          /* we can't stop the operation even if the script raised an error */
>          virHookCall(VIR_HOOK_DRIVER_LXC, vm->def->name,
>                      VIR_HOOK_LXC_OP_RELEASE, VIR_HOOK_SUBOP_END,
> -                    NULL, xml, NULL);
> +                    virDomainShutoffReasonTypeToString(reason), xml, NULL);
>      }
>  
>      if (flags & VIR_LXC_PROCESS_CLEANUP_REMOVE_TRANSIENT)
> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
> index 2c33ac3bf7..9de01b1a0d 100644
> --- a/src/qemu/qemu_process.c
> +++ b/src/qemu/qemu_process.c
> @@ -8722,7 +8722,7 @@ void qemuProcessStop(virQEMUDriver *driver,
>          /* we can't stop the operation even if the script raised an error */
>          virHookCall(VIR_HOOK_DRIVER_QEMU, vm->def->name,
>                      VIR_HOOK_QEMU_OP_RELEASE, VIR_HOOK_SUBOP_END,
> -                    NULL, xml, NULL);
> +                    virDomainShutoffReasonTypeToString(reason), xml, NULL);
>      }
>  
>      virDomainObjRemoveTransientDef(vm);

Reviewed-by: Michal Privoznik <mprivozn@redhat.com>

and merged. Congratulations on your first libvirt contribution!

Michal