Re: [PATCH v2] Pass shutoff reason to release hook

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxx>
> ---
>  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@xxxxxxxxxx>

and merged. Congratulations on your first libvirt contribution!

Michal



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux