[libvirt] [PATCH v3] qemu: Ignore nwfilter binding instantiation issues during reconnect
John Ferlan
jferlan at redhat.com
Wed Sep 19 14:08:39 UTC 2018
ping^3?
Tks
John
On 09/06/2018 07:03 PM, John Ferlan wrote:
>
> ping^2?
>
> Tks,
>
> John
>
> These are essentially what Daniel and I agreed upon during the v2 review
> - link the patches below...
>
> On 08/30/2018 06:24 PM, John Ferlan wrote:
>> ping?
>>
>> Tks,
>>
>> John
>>
>> On 08/24/2018 10:02 AM, John Ferlan wrote:
>>> https://bugzilla.redhat.com/show_bug.cgi?id=1607202
>>>
>>> It's essentially stated in the nwfilterBindingDelete that we
>>> will allow the admin to shoot themselves in the foot by deleting
>>> the nwfilter binding which then allows them to undefine the
>>> nwfilter that is in use for the running guest...
>>>
>>> However, by allowing this we cause a problem for libvirtd
>>> restart reconnect processing which would then try to recreate
>>> the missing binding attempting to use the deleted filter
>>> resulting in an error and thus shutting the guest down.
>>>
>>> So rather than keep adding virDomainConfNWFilterInstantiate
>>> flags to "ignore" specific error conditions, modify the logic
>>> to ignore, but VIR_WARN errors other than ignoreExists. This
>>> will at least allow the guest to not shutdown for only nwfilter
>>> binding errors that we can now perhaps recover from since we
>>> have the binding create/delete capability.
>>>
>>> Signed-off-by: John Ferlan <jferlan at redhat.com>
>>> ---
>>>
>>> v2: https://www.redhat.com/archives/libvir-list/2018-August/msg01567.html
>>>
>>> Differences to v2. Leave the ignoreExists bool, but just allow and
>>> VIR_WARN other errors from virDomainConfNWFilterInstantiate. Continue
>>> processing all filters from error point too.
>>>
>>> src/qemu/qemu_process.c | 24 ++++++++++++++++--------
>>> 1 file changed, 16 insertions(+), 8 deletions(-)
>>>
>>> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
>>> index ab749389ee..61a277f468 100644
>>> --- a/src/qemu/qemu_process.c
>>> +++ b/src/qemu/qemu_process.c
>>> @@ -3160,20 +3160,29 @@ qemuProcessNotifyNets(virDomainDefPtr def)
>>> }
>>> }
>>>
>>> -static int
>>> -qemuProcessFiltersInstantiate(virDomainDefPtr def, bool ignoreExists)
>>> +/* Attempt to instantiate the filters. Ignore failures because it's
>>> + * possible that someone deleted a filter binding and the associated
>>> + * filter while the guest was running and we don't want that action
>>> + * to cause failure to keep the guest running during the reconnection
>>> + * processing. Nor do we necessarily want other failures to do the
>>> + * same. We'll just log the error conditions other than of course
>>> + * ignoreExists possibility (e.g. the true flag) */
>>> +static void
>>> +qemuProcessFiltersInstantiate(virDomainDefPtr def)
>>> {
>>> size_t i;
>>>
>>> for (i = 0; i < def->nnets; i++) {
>>> virDomainNetDefPtr net = def->nets[i];
>>> if ((net->filter) && (net->ifname)) {
>>> - if (virDomainConfNWFilterInstantiate(def->name, def->uuid, net, ignoreExists) < 0)
>>> - return 1;
>>> + if (virDomainConfNWFilterInstantiate(def->name, def->uuid, net,
>>> + true) < 0) {
>>> + VIR_WARN("filter '%s' instantiation for '%s' failed '%s'",
>>> + net->filter, net->ifname, virGetLastErrorMessage());
>>> + virResetLastError();
>>> + }
>>> }
>>> }
>>> -
>>> - return 0;
>>> }
>>>
>>> static int
>>> @@ -7892,8 +7901,7 @@ qemuProcessReconnect(void *opaque)
>>>
>>> qemuProcessNotifyNets(obj->def);
>>>
>>> - if (qemuProcessFiltersInstantiate(obj->def, true))
>>> - goto error;
>>> + qemuProcessFiltersInstantiate(obj->def);
>>>
>>> if (qemuProcessRefreshDisks(driver, obj, QEMU_ASYNC_JOB_NONE) < 0)
>>> goto error;
>>>
>>
>> --
>> libvir-list mailing list
>> libvir-list at redhat.com
>> https://www.redhat.com/mailman/listinfo/libvir-list
>>
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
>
More information about the libvir-list
mailing list