Adam Gandelman [Wed, 28 Nov 2012 01:51:26 +0000 (17:51 -0800)]
Improve provider_location cleanup code for RBD.
The RBD driver does not make use of the 'provider_location' field
but the current cleanup code assumes it does. Ensure the field
is in use before testing whether or not it needs fixing.
John Griffith [Wed, 31 Oct 2012 22:43:09 +0000 (16:43 -0600)]
Detect and fix issues caused by vol ID migration
The migration from volume ID to UUID neglected to update the provider_location
field on the volume. As a result the iqn and volume name no long match and
existing volumes are no longer able to be attached after an upgrade
(essex -> folsom and then nova-vol->cinder).
This patch adds a method to the volume driver that will check for the
mismatch of volume name in the iqn during service start up. If
detected it will update the provider_location field in the database
to include the new ID. Also it will create a symlink to the device backing
file that also has the correct naming convention.
Note: We don't disturb an connections that are currently attached.
For this case we add a check in manager.detach and do any provider_location
cleanup that's needed at that time. This ensures that connections
persist on restarts of tgtd and reboot.
Change-Id: I4683df4ef489972752dc58cb4e91d458a79a8ef2 Fixes: bug 1065702enter the commit message for your changes. Lines starting
Sean Dague [Wed, 31 Oct 2012 15:39:40 +0000 (11:39 -0400)]
pin sqlalchemy to the 0.7.x series
sqlalchemy 0.8beta is now out and has internal changes
which means it's not an in place seemless upgrade. This pins
sqlalchemy to the 0.7.x series to avoid those breaks.
Python ignores SIGPIPE on startup, because it prefers to check every
write and raise an IOError exception rather than taking the signal. Most
Unix subprocesses don't expect to work this way. This patch (adapted
from Colin Watson's post at http://tinyurl.com/2a7mzh5) sets SIGPIPE
back to the default action for cinder.utils.execute and cinder-rootwrap
created subprocesses.
This ensures that we fail-fast if the tgtd configuration does
not include the directory for volume iscsi target configs,
instead of only blowing up when tgtd is restarted.
The code in nova for logging added an extra root handler to be
able to log messages to the console during log setup. This handler
was removed in the setup method. The common setup method no longer
removes this handler, so don't create it. Note that there may be
a small period before the logging setup is finished where messages
will not appear.
Currently nova and cinder have to have the same set of az's for
the ec2 api to work properly. Therefore, set the default az for
cinder to nova so they will match.
Includes a hack to az to set cinder to nova to work around gate
issues. The hack can be removed once the gate sets the zone to
nova properly.
John Griffith [Thu, 20 Sep 2012 23:27:13 +0000 (17:27 -0600)]
Add lun number (0) to model_update in HpSanDriver
The HpSanDriver was not setting the lun number in model_update
and as a result default value of 1 was being used. Trouble is the
Lun number used by LeftHand is 0, so the connect info would be
wrong and fail when trying to attach the volume.
Even when the san_is_local config option was set to false, the
SolarisISCSIDriver's _execute method was accidentally set to
util.execute by the VolumeDriver's __init__ method.
John Griffith [Tue, 18 Sep 2012 19:29:20 +0000 (13:29 -0600)]
Add nova migrate_version check to cinder import
Cinder-manage migrate import only works from Nova/Folsom--->Cinder/Folsom
this change adds an explicit check of the nova migrate_version (133)
to make sure we have all of the volume id/uuid changes that are needed
to be compatable, and presents an error message if that's not the case.
John Griffith [Mon, 17 Sep 2012 21:36:10 +0000 (15:36 -0600)]
Clean up db.volume_create()
Adding the metadata return to db.volume_create() introduced some
messy and unnecessary repitition in the code. This patch
cleans that up and makes use of existing volume_get functions rather
than duplicating the code in volume_create.
This syncs cinder up with the patch as it's been submitted for nova
in https://review.openstack.org/#/c/10461/
Update quota when deleting volume that failed to be scheduled
If one volume was failed to get scheduled, removing such volume should
also clean up reservation.
Also when create_volume is ready to send to scheduler, reservation
should be committed no matter backend can successfully create that
volume or not since deleting volume call will do a minus reservation
even on volume with 'error' status.
John Griffith [Thu, 13 Sep 2012 16:53:52 +0000 (10:53 -0600)]
Add a resume delete on volume manager startup
Currently if for some reason the volume service was stopped
during the zero out operation of a volume delete there was
no way to get the volume removed from the system (it would
be present in deleting status forever).
This change adds a simple check of volumes in the DB with status
of deleting, and if any are found it restarts the delete process
on them.
Removed the "vtype" option which did not work in the driver, and
added the "easytier" option. Added another check to _check_flags
and made sure -warning flag is passed properly. Added unit tests
to check all option variations.
Dan Prince [Fri, 7 Sep 2012 01:54:16 +0000 (21:54 -0400)]
Nail the pip requirement at 1.1.
The most recent version of pip (1.2.1 as of a couple days ago) fails
to install the required Cinder .venv packages. Nailing the installed
pip version when using run_tests.sh seems like a reasonable solution
to this issue.
John Griffith [Wed, 5 Sep 2012 19:27:48 +0000 (19:27 +0000)]
Don't zero out snapshot volume on snapshot_delete
When trying to zero out an LVM snapshot on precise the kernel sometimes
hangs when performing the dd. Also the dd process itself can take
an extremely long time even when it does succesfully complete.
This can be up to 30 minutes for a 1 Gig volume/snapshot.
I believe this is a kernel specific issue with LVM snapshots. The
zeroing process is unreliable and can cause kernel hangs to let's remove it.
In order to protect against data leakage we'll implement the zeroing process
on volume creation. This doesn't seem to have a significant impact and doesn't
suffer from the same isues tha zeroing out an LVM snapshot does.
No reason to continue zero on delete, the zero on creation should
probably be sufficient.
Doesn't seem to cause any timing issues but need to keep this in mind.
John Griffith [Sat, 8 Sep 2012 16:40:55 +0000 (10:40 -0600)]
Recent changes to SolidFire API changed iqn format
The SF API initially didn't supply the in prefix so we
formed it manually in the OpenStack driver.
This has been fixed in the API so we dropped the manual
build of the prefix in volume create. Unfortunatly missed
the same case needed in create-from-snapshot.
Going forward we're adding running integration tests against
SF to catch this sort of thing.
Merge "Update dev docs * Quick pass at implementing the basics for cinder dev docs * Remove the N/A compute related stuff * Clean up the architecture a bit to only show cinder related * Remove various modules form TOC's that aren't applicable"
Mark McLoughlin [Wed, 5 Sep 2012 11:15:41 +0000 (12:15 +0100)]
Sync notifier changes from openstack-common
Syncs the following from stable/folsom:
c767e9b Add multiple-driver support to the notifier api.
Also remove notification_driver from cinder.flags. This should
have been done when first adopting this code from openstack-common
since the option is defined there now.
Note: I've left the cinder-specific change to use cinder's context
rather than openstack-common's context.
* remove _ec2_volume_get_query and _ec2_snapshot_get_query in
cinder.db.sqlalchemy.api, because they no longer be used in cinder.
* import openstack.commmon.utils.timeutils, because notify_usage_exists use it.
Dan Prince [Fri, 7 Sep 2012 02:52:35 +0000 (22:52 -0400)]
Handle missing 'provider_location' in rm_export.
Updates the remove_export function in the ISCSIDriver so that
it handles the case where provider_location isn't set on
a volume. This can occur if a volume is created but not exported.
The dd process when clearing volumes, was seen to starve
the system when writing to an iSCSI SAN connected over GigE.
So use O_DIRECT within the dd process so that the system
buffer cache is not impacted, which is generally the
best thing to do when streaming large amounts of data.
Also one could drop the I/O priority of the dd process
by prepending "ionice -c3". That would change the priority
from "normal" (best effort) to "idle", which means zeroing
will only proceed when there is no other I/O on the system.
It was thought best to leave scheduling decisions to the
system however, rather than specifying them explicitly.