VMware: Create volume fails with error "DuplicateName: The name 'cinder-volumes' already exists."

Bug #1436844 reported by Vipin Balachandran
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Cinder
Fix Released
Medium
Vipin Balachandran

Bug Description

Concurrent volume create operations when there is no vCenter inventory folder 'cinder-volumes' might fail with:

2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager Traceback (most recent call last):
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager File "/usr/local/lib/python2.7/dist-packages/taskflow/engines/action_engine/executor.py", line 67, in _execute_task
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager result = task.execute(**arguments)
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager File "/opt/stack/cinder/cinder/volume/flows/manager/create_volume.py", line 643, in execute
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager **volume_spec)
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager File "/opt/stack/cinder/cinder/volume/flows/manager/create_volume.py", line 617, in _create_raw_volume
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager return self.driver.create_volume(volume_ref)
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager File "/usr/local/lib/python2.7/dist-packages/osprofiler/profiler.py", line 105, in wrapper
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager return f(*args, **kwargs)
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager File "/opt/stack/cinder/cinder/volume/drivers/vmware/vmdk.py", line 324, in create_volume
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager self._verify_volume_creation(volume)
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager File "/opt/stack/cinder/cinder/volume/drivers/vmware/vmdk.py", line 308, in _verify_volume_creation
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager self._select_ds_for_volume(volume)
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager File "/opt/stack/cinder/cinder/volume/drivers/vmware/vmdk.py", line 591, in _select_ds_for_volume
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager folder = self._get_volume_group_folder(dc)
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager File "/opt/stack/cinder/cinder/volume/drivers/vmware/vmdk.py", line 1895, in _get_volume_group_folder
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager return self.volumeops.create_folder(vm_folder, volume_folder)
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager File "/opt/stack/cinder/cinder/volume/drivers/vmware/volumeops.py", line 556, in create_folder
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager name=child_folder_name)
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager File "/usr/local/lib/python2.7/dist-packages/oslo_vmware/api.py", line 341, in invoke_api
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager return _invoke_api(module, method, *args, **kwargs)
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager File "/usr/local/lib/python2.7/dist-packages/oslo_vmware/api.py", line 122, in func
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager return evt.wait()
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager File "/usr/local/lib/python2.7/dist-packages/eventlet/event.py", line 121, in wait
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager return hubs.get_hub().switch()
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager File "/usr/local/lib/python2.7/dist-packages/eventlet/hubs/hub.py", line 294, in switch
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager return self.greenlet.switch()
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager File "/usr/local/lib/python2.7/dist-packages/oslo_vmware/common/loopingcall.py", line 123, in _inner
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager idle = self.f(*self.args, **self.kw)
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager File "/usr/local/lib/python2.7/dist-packages/oslo_vmware/api.py", line 95, in _func
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager result = f(*args, **kwargs)
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager File "/usr/local/lib/python2.7/dist-packages/oslo_vmware/api.py", line 324, in _invoke_api
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager raise clazz(six.text_type(excep), excep.details)
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager DuplicateName: The name 'cinder-volumes' already exists.
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager Cause: Server raised fault: 'The name 'cinder-volumes' already exists.'
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager Faults: [DuplicateName]
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager Details: {'object': 'group-v32', 'name': 'cinder-volumes'}
2015-03-25 11:00:14.421 28906 TRACE cinder.volume.manager

Tags: drivers vmware
Changed in cinder:
importance: Undecided → Medium
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to cinder (master)

Fix proposed to branch: master
Review: https://review.openstack.org/167989

Changed in cinder:
status: New → In Progress
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to cinder (master)

Reviewed: https://review.openstack.org/167989
Committed: https://git.openstack.org/cgit/openstack/cinder/commit/?id=2a20781029f9f978269bba508a6d6873917839d8
Submitter: Jenkins
Branch: master

commit 2a20781029f9f978269bba508a6d6873917839d8
Author: Vipin Balachandran <email address hidden>
Date: Thu Mar 26 06:10:27 2015 -0700

    VMware: Handle concurrent inventory folder create

    Cinder volumes are organized under vCenter inventory folder
    with name given by config option vmware_volume_folder. During
    volume creation, this folder is created only if it doesn't
    exist. Concurrent volume create operations when there is no
    such folder can result in a race condition-- some of the
    create operations will fail due to already existing folder.
    This patch fix this by ignoring the exception and returning a
    reference to the existing folder.

    Change-Id: Ic9371957bb76a032985363880fbebda523574305
    Closes-Bug: #1436844

Changed in cinder:
status: In Progress → Fix Committed
Thierry Carrez (ttx)
Changed in cinder:
milestone: none → liberty-1
status: Fix Committed → Fix Released
Thierry Carrez (ttx)
Changed in cinder:
milestone: liberty-1 → 7.0.0
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.