Handle 404 and 409 response when deleting containers

Attempting to delete a stack with multiple SwiftSignalHandles will result
in a 409 error from Swift due to a logic error in the SwiftSignalHandle
resource. This change ensures that we properly handle 404 and 409
responses when deleting Swift containers.

Change-Id: Iac04bf16bce949dd5019975fd07e795cd0685eba
Closes-Bug: #1392867
This commit is contained in:
Jason Dunsmore 2014-11-14 15:16:16 -06:00
parent f39600e28b
commit 0c284f7deb
2 changed files with 12 additions and 5 deletions

View File

@ -125,7 +125,8 @@ class SwiftSignalHandle(resource.Resource):
except Exception as exc:
if cplugin.is_not_found(exc) or cplugin.is_conflict(exc):
pass
raise
else:
raise
self.data_delete('endpoint')

View File

@ -171,8 +171,12 @@ class SwiftSignalHandleTest(common.HeatTestCase):
exc = swiftclient_exceptions.ClientException("Object DELETE failed",
http_status=404)
mock_swift_object.delete_object.side_effect = (None, None, None, exc)
mock_swift_object.delete_container.return_value = None
st.delete()
exc = swiftclient_exceptions.ClientException("Container DELETE failed",
http_status=404)
mock_swift_object.delete_container.side_effect = exc
rsrc = st.resources['test_wait_condition_handle']
scheduler.TaskRunner(rsrc.delete)()
self.assertEqual(('DELETE', 'COMPLETE'), rsrc.state)
self.assertEqual(4, mock_swift_object.delete_object.call_count)
@mock.patch.object(swift.SwiftClientPlugin, '_create')
@ -249,8 +253,10 @@ class SwiftSignalHandleTest(common.HeatTestCase):
mock_swift_object.delete_object.side_effect = (None, None, None, exc)
exc = swiftclient_exceptions.ClientException("Container DELETE failed",
http_status=409)
mock_swift_object.delete_container.return_value = exc
st.delete()
mock_swift_object.delete_container.side_effect = exc
rsrc = st.resources['test_wait_condition_handle']
scheduler.TaskRunner(rsrc.delete)()
self.assertEqual(('DELETE', 'COMPLETE'), rsrc.state)
self.assertEqual(4, mock_swift_object.delete_object.call_count)
@mock.patch.object(swift.SwiftClientPlugin, '_create')