[libvirt] [PATCH v3] qemu: Ignore nwfilter binding instantiation issues during reconnect

John Ferlan jferlan at redhat.com
Thu Sep 6 23:03:20 UTC 2018


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
> 




More information about the libvir-list mailing list