[libvirt] [PATCH RFC] virhook: adding virHookCheck() inside virHookCall().
Julio Faracco
jcfaracco at gmail.com
Wed Jul 13 18:29:14 UTC 2016
Hi Daniel,
2016-07-12 4:59 GMT-03:00 Daniel P. Berrange <berrange at redhat.com>:
> On Mon, Jul 11, 2016 at 03:22:44PM -0300, Julio Faracco wrote:
>> This commit introduces the virHookCheck() before running the command (hook).
>> The virHookCheck() before virCommandRun() will avoid errors with changes
>> (removal and other permissions changes) in the hook file, while the libvirt
>> daemon is running.
>>
>> Now, when you remove the hook file while libvirtd is running you get the
>> following error:
>>
>> virsh # start WINDOWS_7
>> error: Failed to start domain WINDOWS_7
>> error: Hook script execution failed: internal error: Child process (LC_ALL=C
>> PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
>> HOME=/home/julio USER=root LOGNAME=root /etc/libvirt/hooks/qemu WINDOWS_7
>> prepare begin -) unexpected exit status 127: libvirt: error : cannot execute
>> binary /etc/libvirt/hooks/qemu: No such file or directory
>>
>> Cc: Carlos Castilho <ccast at br.ibm.com>
>> Signed-off-by: Julio Faracco <jcfaracco at gmail.com>
>> ---
>> src/util/virhook.c | 7 ++++++-
>> 1 file changed, 6 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/util/virhook.c b/src/util/virhook.c
>> index d37d6da..f741b30 100644
>> --- a/src/util/virhook.c
>> +++ b/src/util/virhook.c
>> @@ -294,7 +294,12 @@ virHookCall(int driver,
>> if (output)
>> virCommandSetOutputBuffer(cmd, output);
>>
>> - ret = virCommandRun(cmd, NULL);
>> + ret = virHookCheck(driver, virHookDriverTypeToString(driver));
>> +
>> + if (ret > 0) {
>> + ret = virCommandRun(cmd, NULL);
>> + }
>
> This only fixes half of the problem - you're addressing the case where
> a hook disappears while libvirtd is running, but not the case where
> one appears. It also doesn't update the cache of which hooks are present
> so we end up repeatedly checking for the hook.
Thanks for your suggestions.
Yes, we reproduce it here to confirm what we already known.
If you create a hook manually, with libvirtd running the hook won't be applied.
Unless, if you restart the daemon as we are doing when the hook is removed.
> I can't help thinking that we should do something better than that. Perhaps
> virHookInitialize should open an inotify handle and register it with the
> main loop so it can automatically update its cache of which hooks exist.
Yes, we can thing here in a good way to avoid that.
Lets try and resend some suggestion.
In any case, we have the solution when the hook is removed
Thanks.
> Regards,
> Daniel
> --
> |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
> |: http://libvirt.org -o- http://virt-manager.org :|
> |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
> |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list