Uploads to a swift container failing with connection reset by peer or broken pipe
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
OpenStack Dashboard (Horizon) |
Expired
|
Undecided
|
Unassigned | ||
Ubuntu Cloud Archive |
Expired
|
Undecided
|
Unassigned |
Bug Description
Using the following provided by Ubuntu's Cloud Archive:
- Swift (1.10.0)
- python-swiftclient (1.6.0)
- python-
- Django 1.5.4
How to reproduce:
- Create a container "test"
- Try to upload a file to the test container
Horizon is able to create and delete containers.
It is also able to delete objects but you are unable to upload files without a connection reset by peer (if the endpoint is SSL) or a broken pipe error (if the endpoint is HTTP).
Using python-swiftclient on the same machine where horizon is installed will upload the file successfully regardless if the endpoint is SSL or not.
I have tried to understand why python-swiftclient is able to upload a file while horizon cannot - without success, hence this bug report.
Environment information:
- nginx in front of proxy nodes. If the endpoint is HTTPS, nginx handles the SSL termination.
- swift endpoint is https:/
- keystone PKI authentication
- horizon (HTTP, no SSL) on a standalone server
- swift-proxy on a standalone server
- swift-container, swift-object and swift-account running on the same standalone server
Full stack trace of an upload to a swift container through Horizon with the swift endpoint in SSL (https termination done by nginx):
===
2014-02-25 19:17:44,266 30361 DEBUG openstack_
2014-02-25 19:18:15,355 30361 ERROR swiftclient [Errno 104] Connection reset by peer
Traceback (most recent call last):
File "/usr/lib/
rv = func(self.url, self.token, *args, **kwargs)
File "/usr/lib/
conn.
File "/usr/lib/
self.
File "/usr/lib/
v = self.send(
File "/usr/lib/
v = self._sslobj.
error: [Errno 104] Connection reset by peer
2014-02-25 19:18:15,357 30361 ERROR django.request Internal Server Error: /horizon/
Traceback (most recent call last):
File "/usr/lib/
response = callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/
return view_func(request, *args, **kwargs)
File "/usr/lib/
return view_func(request, *args, **kwargs)
File "/usr/lib/
return view_func(request, *args, **kwargs)
File "/usr/lib/
return view_func(request, *args, **kwargs)
File "/usr/lib/
return self.dispatch(
File "/usr/lib/
return handler(request, *args, **kwargs)
File "/usr/lib/
return self.form_
File "/usr/lib/
exceptions.
File "/usr/lib/
handled = form.handle(
File "/usr/share/
exceptions.
File "/usr/share/
object_file)
File "/usr/share/
headers=
File "/usr/lib/
response_
File "/usr/lib/
rv = func(self.url, self.token, *args, **kwargs)
File "/usr/lib/
conn.
File "/usr/lib/
self.
File "/usr/lib/
v = self.send(
File "/usr/lib/
v = self._sslobj.
error: [Errno 104] Connection reset by peer
===
Full stack trace of an upload to a swift container through Horizon with the swift endpoint is NOT SSL (http proxy by nginx):
===
2014-02-25 19:45:38,873 30362 DEBUG openstack_
2014-02-25 19:46:09,968 30362 ERROR swiftclient [Errno 32] Broken pipe
Traceback (most recent call last):
File "/usr/lib/
rv = func(self.url, self.token, *args, **kwargs)
File "/usr/lib/
conn.
File "/usr/lib/
self.
File "/usr/lib/
v = self.send(
File "/usr/lib/
v = self._sslobj.
error: [Errno 32] Broken pipe
2014-02-25 19:46:09,969 30362 ERROR django.request Internal Server Error: /horizon/
Traceback (most recent call last):
File "/usr/lib/
response = callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/
return view_func(request, *args, **kwargs)
File "/usr/lib/
return view_func(request, *args, **kwargs)
File "/usr/lib/
return view_func(request, *args, **kwargs)
File "/usr/lib/
return view_func(request, *args, **kwargs)
File "/usr/lib/
return self.dispatch(
File "/usr/lib/
return handler(request, *args, **kwargs)
File "/usr/lib/
return self.form_
File "/usr/lib/
exceptions.
File "/usr/lib/
handled = form.handle(
File "/usr/share/
exceptions.
File "/usr/share/
object_file)
File "/usr/share/
headers=
File "/usr/lib/
response_
File "/usr/lib/
rv = func(self.url, self.token, *args, **kwargs)
File "/usr/lib/
conn.
File "/usr/lib/
self.
File "/usr/lib/
v = self.send(
File "/usr/lib/
v = self._sslobj.
error: [Errno 32] Broken pipe
===
summary: |
- Uploads to a swift container failing with connection reset by peer + Uploads to a swift container failing with connection reset by peer or + broken pipe |
Changed in cloud-archive: | |
status: | New → Incomplete |
test suite without virtualenv (with development dependencies installed): paste.openstack .org/show/ 69545/
http://
test suite with virtualenv: paste.openstack .org/show/ 69546/
http://
Noticing the large differences in the package versions, I did a "pip install -r requirements.txt" off of the stable/havana repository, resulting in a new error - 411 length required: paste.openstack .org/show/ 69547/
http://
Uploads done directly by CLI through python-swiftclient still work...