[virt-tools-list] [PATCH] virtinst: refresh pools status before fetch_pools

Chun Yan Liu cyliu at suse.com
Thu Dec 11 02:27:38 UTC 2014



>>> On 12/5/2014 at 09:54 PM, in message <5481B907.4040507 at redhat.com>, Cole
Robinson <crobinso at redhat.com> wrote: 
> On 12/05/2014 03:40 AM, Chunyan Liu wrote: 
> > Currently, when connecting to hypervisor, if there are pools active 
> > but in fact target path already deleted (or for other reasons the 
> > pool is not working), libvirtd not refresh status yet, fetch_pools 
> > will fail, that will cause "connecting to hypervisor" process 
> > reporting error and exit. The whole connection work failed. 
> > 
> > With the patch, always refresh pool status before fetch pools. Let 
> > the libvirtd pool status reflect the reality, avoid the non-synced 
> > status affects the hypervisor connection. 
> > 
> > Signed-off-by: Chunyan Liu <cyliu at suse.com> 
> > --- 
> >   virtinst/pollhelpers.py | 13 +++++++++++++ 
> >   1 file changed, 13 insertions(+) 
> > 
> > diff --git a/virtinst/pollhelpers.py b/virtinst/pollhelpers.py 
> > index a9b1527..e8702f0 100644 
> > --- a/virtinst/pollhelpers.py 
> > +++ b/virtinst/pollhelpers.py 
> > @@ -133,6 +133,19 @@ def fetch_pools(backend, origmap, build_func): 
> > 
> >       if backend.check_support( 
> >           backend.SUPPORT_CONN_LISTALLSTORAGEPOOLS) and not  
> _force_old_poll: 
> > + 
> > +        # Refresh pools before poll_helper. For those 
> > +        # 'active' but target path not exist (or other reasons 
> > +        # causing the pool not working), but libvirtd not 
> > +        # refresh the status, this will make it refreshed 
> > +        # and mark that pool as 'inactive'. 
> > +        objs = backend.listAllStoragePools() 
> > +        for obj in objs: 
> > +            try: 
> > +                obj.refresh(0) 
> > +            except Exception, e: 
> > +                pass 
> > + 
> >           return _new_poll_helper(origmap, name, 
> >                                   backend.listAllStoragePools, build_func) 
> >       else: 
> > 
>  
> This is a very heavy hammer, refresh is a potentially long running operation  
>  
> so this could cause decent slowdown in some scenarios. 
>  
> IMO this is essentially a libvirt bug, for pools with target directories  
> (dir,  
> fs, netfs), libvirt should be periodically checking the directory ctime and  
> doing the pool refresh for us. And if the target has disappeared, it shuts  
> down the pool (like shutting down a VM if it crashes). 

Hi, libvirt list,

I'm not sure if Cole's suggestion could be done in libvirt, so just forward
the mail to libvirt mailing list. Any opinions?

Chunyan
>  
> We have so many hacks sprinkled around in virtinst/virt-manager dealing with  
> the fallout of this lacking libvirt feature. Really wish I had implemented  
> it  
> years ago. But I'd rather focus on that then adding yet more hacks. 
>  
> If there's a specific issue you're hitting that's manifesting itself  
> elsewhere  
> in the app, let us know and maybe there's a way to mitigate it in the  
> interim 
>  
> - Cole 
>  
> _______________________________________________ 
> virt-tools-list mailing list 
> virt-tools-list at redhat.com 
> https://www.redhat.com/mailman/listinfo/virt-tools-list 
>  
>  






More information about the virt-tools-list mailing list