Handle client disconnect during image upload
If a user does a ^C during a chunked image upload, eventlet.wsgi.server will raise one of ValueError or IOError when trying to read the next chunk. Handle this common scenario by raising(logging) a HTTPBadRequest error rather than HTTPInternalServerError. Fixes bug 1196953 Change-Id: Ic88b142a40c548141be4b40a15f94b71603814e9
This commit is contained in:
parent
85cbff043f
commit
3904860467
@ -177,6 +177,14 @@ def upload_data_to_store(req, image_meta, image_data, store, notifier):
|
||||
LOG.exception(msg)
|
||||
safe_kill(req, image_id)
|
||||
|
||||
except (ValueError, IOError) as e:
|
||||
msg = _("Client disconnected before sending all data to backend")
|
||||
LOG.debug(msg)
|
||||
safe_kill(req, image_id)
|
||||
raise webob.exc.HTTPBadRequest(explanation=msg,
|
||||
content_type="text/plain",
|
||||
request=req)
|
||||
|
||||
except Exception as e:
|
||||
msg = _("Failed to upload image %s" % image_id)
|
||||
LOG.exception(msg)
|
||||
|
@ -287,6 +287,16 @@ class TestUploadUtils(base.StoreClearingUnitTest):
|
||||
webob.exc.HTTPError,
|
||||
webob.exc.HTTPError)
|
||||
|
||||
def test_upload_data_to_store_client_disconnect(self):
|
||||
self._test_upload_data_to_store_exception(
|
||||
ValueError,
|
||||
webob.exc.HTTPBadRequest)
|
||||
|
||||
def test_upload_data_to_store_client_disconnect_ioerror(self):
|
||||
self._test_upload_data_to_store_exception(
|
||||
IOError,
|
||||
webob.exc.HTTPBadRequest)
|
||||
|
||||
def test_upload_data_to_store_exception(self):
|
||||
self._test_upload_data_to_store_exception(
|
||||
Exception,
|
||||
|
Loading…
Reference in New Issue
Block a user