On 09/25/2015 12:30 PM, Mitsuhiro Tanino wrote:
On 09/22/2015 06:43 PM, Robert Collins wrote:
On 23 September 2015 at 09:52, Chris Friesen
<chris.frie...@windriver.com> wrote:
Hi,

I recently had an issue with one file out of a dozen or so in
"/opt/cgcs/cinder/data/volumes/" being present but of size zero.  I'm
running stable/kilo if it makes a difference.

Looking at the code in
volume.targets.tgt.TgtAdm.create_iscsi_target(), I'm wondering if we
should do a fsync() before the close().  The way it stands now, it
seems like it might be possible to write the file, start making use
of it, and then take a power outage before it actually gets written
to persistent storage.  When we come back up we could have an
instance expecting to make use of it, but no target information in the on-disk 
copy of the file.

I think even if there is no target information in configuration file dir, c-vol 
started successfully
and iSCSI targets were created automatically and volumes were exported, right?

There is an problem in this case that the iSCSI target was created without 
authentication because
we can't get previous authentication from the configuration file.

I'm curious what kind of problem did you met?

We had an issue in a private patch that was ported to Kilo without realizing that the data type of chap_auth had changed.

In my understanding, the provider_auth in database has user name and password 
for iSCSI target.
Therefore if we get authentication from DB, I think we can self-heal from this 
situation
correctly after c-vol service is restarted.

The lio target obtains authentication from provider_auth in database, but tgtd, 
iet, cxt obtain
authentication from file to recreate iSCSI target when c-vol is restarted.
If the file is missing, these volumes are exported without authentication and 
configuration
file is recreated as I mentioned above.

tgtd: Get target chap auth from file
iet:  Get target chap auth from file
cxt:  Get target chap auth from file
lio:  Get target chap auth from Database(in provider_auth)
scst: Get target chap auth by using original command

If we get authentication from DB for tgtd, iet and cxt same as lio, we can 
recreate iSCSI target
with proper authentication when c-vol is restarted.
I think this is a solution for this situation.

If we fixed the chap auth info then we could live with a zero-size file. However, with the current code if we take a kernel panic or power outage it's theoretically possible to end up with a corrupt file of nonzero size (due to metadata hitting the persistant storage before the data). I'm not confident that the current code would deal properly with that.

That said, if we always regenerate every file from the DB on cinder-volume startup (regardless of whether or not it existed, and without reading in the existing file), then we'd be okay without the robustness improvements.

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