<div dir="ltr"><div>To add:<br></div>    I was looking at Nova code and it seems there is a framework for cleanup using the terminate calls.. IIUC this works as libvirt calls terminate on Nova instance when the VM is shutting down/destroying, hence terminate seems to be a good place to do cleanup on Nova side.. something similar is missing on Cinder side and __del__ way of cleanup isn't working as I posted above.<br>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Apr 7, 2014 at 10:24 AM, Deepak Shetty <span dir="ltr"><<a href="mailto:dpkshetty@gmail.com" target="_blank">dpkshetty@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div>Duncan,<br></div>    Thanks for your response. Tho' i agree to what you said.. I am still trying to understand why i see what i see .. i.e. why the base class variables (_mount_shared) shows up empty in __del__<br>

</div>I am assuming here that the obj is not completely gone/deleted, so its vars must still be in scope and valid.. but debug prints suggests the otherwise :(<br></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra">
<br><br><div class="gmail_quote">
On Sun, Apr 6, 2014 at 12:07 PM, Duncan Thomas <span dir="ltr"><<a href="mailto:duncan.thomas@gmail.com" target="_blank">duncan.thomas@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

I'm not yet sure of the right way to do cleanup on shutdown, but any<br>
driver should do as much checking as possible on startup - the service<br>
might not have gone down cleanly (kill -9, SEGFAULT, etc), or<br>
something might have gone wrong during clean shutdown. The driver<br>
coming up should therefore not make any assumptions it doesn't<br>
absolutely have to, but rather should check and attempt cleanup<br>
itself, on startup.<br>
<div><div><br>
On 3 April 2014 15:14, Deepak Shetty <<a href="mailto:dpkshetty@gmail.com" target="_blank">dpkshetty@gmail.com</a>> wrote:<br>
><br>
> Hi,<br>
>     I am looking to umount the glsuterfs shares that are mounted as part of<br>
> gluster driver, when c-vol is being restarted or Ctrl-C'ed (as in devstack<br>
> env) or when c-vol service is being shutdown.<br>
><br>
> I tried to use __del__ in GlusterfsDriver(nfs.RemoteFsDriver) and it didn't<br>
> work<br>
><br>
> def __del__(self):<br>
>         LOG.info(_("DPKS: Inside __del__ Hurray!, shares=%s")%<br>
> self._mounted_shares)<br>
>         for share in self._mounted_shares:<br>
>             mount_path = self._get_mount_point_for_share(share)<br>
>             command = ['umount', mount_path]<br>
>             self._do_umount(command, True, share)<br>
><br>
> self._mounted_shares is defined in the base class (RemoteFsDriver)<br>
><br>
> ^C2014-04-03 13:29:55.547 INFO cinder.openstack.common.service [-] Caught<br>
> SIGINT, stopping children<br>
> 2014-04-03 13:29:55.548 INFO cinder.openstack.common.service [-] Caught<br>
> SIGTERM, exiting<br>
> 2014-04-03 13:29:55.550 INFO cinder.openstack.common.service [-] Caught<br>
> SIGTERM, exiting<br>
> 2014-04-03 13:29:55.560 INFO cinder.openstack.common.service [-] Waiting on<br>
> 2 children to exit<br>
> 2014-04-03 13:29:55.561 INFO cinder.openstack.common.service [-] Child 30185<br>
> exited with status 1<br>
> 2014-04-03 13:29:55.562 INFO cinder.volume.drivers.glusterfs [-] DPKS:<br>
> Inside __del__ Hurray!, shares=[]<br>
> 2014-04-03 13:29:55.563 INFO cinder.openstack.common.service [-] Child 30186<br>
> exited with status 1<br>
> Exception TypeError: "'NoneType' object is not callable" in <bound method<br>
> GlusterfsDriver.__del__ of <cinder.volume.drivers.glusterfs.GlusterfsDriver<br>
> object at 0x2777ed0>> ignored<br>
> [stack@devstack-vm tempest]$<br>
><br>
> So the _mounted_shares is empty ([]) which isn't true since I have 2<br>
> glsuterfs shares mounted and when i print _mounted_shares in other parts of<br>
> code, it does show me the right thing.. as below...<br>
><br>
> From volume/drivers/glusterfs.py @ line 1062:<br>
>     LOG.debug(_('Available shares: %s') % self._mounted_shares)<br>
><br>
> which dumps the debugprint  as below...<br>
><br>
> 2014-04-03 13:29:45.414 DEBUG cinder.volume.drivers.glusterfs<br>
> [req-2cf69316-cc42-403a-96f1-90e8e77375aa None None] Available shares:<br>
> [u'devstack-vm.localdomain:/gvol1', u'devstack-vm.localdomain:/gvol1'] from<br>
> (pid=30185) _ensure_shares_mounted<br>
> /opt/stack/cinder/cinder/volume/drivers/glusterfs.py:1061<br>
><br>
> This brings in few Qs ( I am usign devstack env) ...<br>
><br>
> 1) Is __del__ the right way to do cleanup for a cinder driver ? I have 2<br>
> gluster backends setup, hence 2 cinder-volume instances, but i see __del__<br>
> being called once only (as per above debug prints)<br>
> 2) I tried atexit and registering a function to do the cleanup. Ctrl-C'ing<br>
> c-vol (from screen ) gives the same issue.. shares is empty ([]), but this<br>
> time i see that my atexit handler called twice (once for each backend)<br>
> 3) In general, whats the right way to do cleanup inside cinder volume driver<br>
> when a service is going down or being restarted ?<br>
> 4) The solution should work in both devstack (ctrl-c to shutdown c-vol<br>
> service) and production (where we do service restart c-vol)<br>
><br>
> Would appreciate a response<br>
><br>
> thanx,<br>
> deepak<br>
><br>
><br>
</div></div>> _______________________________________________<br>
> OpenStack-dev mailing list<br>
> <a href="mailto:OpenStack-dev@lists.openstack.org" target="_blank">OpenStack-dev@lists.openstack.org</a><br>
> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
><br>
<span><font color="#888888"><br>
<br>
<br>
--<br>
Duncan Thomas<br>
<br>
_______________________________________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org" target="_blank">OpenStack-dev@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
</font></span></blockquote></div><br></div>
</div></div></blockquote></div><br></div>