On 09/22/2015 06:19 PM, John Griffith wrote:
On Tue, Sep 22, 2015 at 6:17 PM, John Griffith <john.griffi...@gmail.com

    ​That target file pretty much "is" the persistence record, the db entry is
    the iqn and provider info only.  I think that adding the fdatasync isn't a
    bad idea at all.  At the very least it doesn't hurt.  Power losses on attach
    I would expect to be problematic regardless.

​Let me clarify the statement above, if you loose power to the node in the
middle of an attach process and the file wasn't written properly you're most
likely 'stuck' and will have to detach (which deletes the file) or it will be in
an error state and rebuild the file when you try the attach again anyway IIRC,
it's been a while since we've mucked with that code (thank goodness)!!

I took another look at the code and realized that the file *should* get rebuilt on restart after a power outage--if the file already exists it will print a warning message in the logs but it should still overwrite the contents of the file with the desired contents. However, that didn't happen in my case.

That made me confused about how I ever ended up with an empty persistence file. I went back to my logs and found this:

File "./usr/lib64/python2.7/site-packages/cinder/volume/manager.py", line 334, in init_host File "/usr/lib64/python2.7/site-packages/osprofiler/profiler.py", line 105, in wrapper File "./usr/lib64/python2.7/site-packages/cinder/volume/drivers/lvm.py", line 603, in ensure_export File "./usr/lib64/python2.7/site-packages/cinder/volume/targets/iscsi.py", line 296, in ensure_export File "./usr/lib64/python2.7/site-packages/cinder/volume/targets/tgt.py", line 185, in create_iscsi_target
TypeError: not enough arguments for format string


So it seems like we might have a bug in the handling of an empty file.


In kilo/stable, line 185 code looks like this:

        chap_str = 'incominguser %s %s' % chap_auth

This means that "chap_auth" must not be None coming into this function. In volume.targets.iscsi.ISCSITarget.ensure_export() we call

        chap_auth = self._get_target_chap_auth(context, iscsi_name)

which I think would return None given the empty file.

I tried to reproduce with devstack running stable/kilo by booting from volume and then removing the persistance file and restarting cinder-volume. It recreated the persistance file, but the "incominguser" line was missing completely from the regenerated file.

I think I need to try to reproduce this in our load with some extra debugging, see if I can figure out exactly what's going on.
        

Chris

__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to