yahoo-eng-team team mailing list archive
-
yahoo-eng-team team
-
Mailing list archive
-
Message #17452
[Bug 1346211] [NEW] keystone under apache can't handle request chunking
Public bug reported:
Method to reproduce stack trace for apache config with chunking enabled
========================================================
1. If using devstack, configure it to enable chunking in apache, by
adding "WSGIChunkedRequest On" in the file devstack/files/apache-
keystone.template (in both sections) and start devstack
2. Run from the command line:
openstack -v --debug server list (or any simple command)
3. Look in the output for the very first "curl" command that looks
something like this:
curl -i --insecure -X POST http://192.168.51.21:5000/v2.0/tokens -H
"Content-Type: application/json" -H "Accept: application/json" -H "User-
Agent: python-keystoneclient" -d '{"auth": {"tenantName": "demo",
"passwordCredentials": {"username": "demo", "password": "admin"}}}'
4. The above "curl" command succeeds. Modify it to use chunking by
adding -H "Transfer-Encoding: chunked" and run it:
curl -i --insecure -X POST http://192.168.51.21:5000/v2.0/tokens -H
"Content-Type: application/json" -H "Accept: application/json" -H "User-
Agent: python-keystoneclient" -H "Transfer-Encoding: chunked" -d
'{"auth": {"tenantName": "demo", "passwordCredentials": {"username":
"demo", "password": "admin"}}}'
5. You will get a cli error:
HTTP/1.1 500 Internal Server Error
Date: Wed, 16 Jul 2014 19:01:58 GMT
Server: Apache/2.2.22 (Ubuntu)
Vary: X-Auth-Token
Content-Length: 215
Connection: close
Content-Type: application/json
{"error": {"message": "An unexpected error prevented the server from
fulfilling your request: request data read error (Disable debug mode to
suppress these details.)", "code": 500, "title": "Internal Server
Error"}}
6. The keystone log will show a stack trace:
[Wed Jul 16 19:02:43 2014] [error] 13693 ERROR keystone.common.wsgi [-] request data read error
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi Traceback (most recent call last):
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi File "/opt/stack/keystone/keystone/common/wsgi.py", line 414, in __call__
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi response = self.process_request(request)
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi File "/opt/stack/keystone/keystone/middleware/core.py", line 112, in process_request
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi params_json = request.body
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 677, in _body__get
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi self.make_body_seekable() # we need this to have content_length
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 922, in make_body_seekable
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi self.copy_body()
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 938, in copy_body
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi self.body = self.body_file_raw.read()
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi File "/opt/stack/keystone/keystone/common/utils.py", line 306, in read
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi result = self.data.read()
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi IOError: request data read error
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi
** Affects: keystone
Importance: Undecided
Status: New
--
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to Keystone.
https://bugs.launchpad.net/bugs/1346211
Title:
keystone under apache can't handle request chunking
Status in OpenStack Identity (Keystone):
New
Bug description:
Method to reproduce stack trace for apache config with chunking enabled
========================================================
1. If using devstack, configure it to enable chunking in apache, by
adding "WSGIChunkedRequest On" in the file devstack/files/apache-
keystone.template (in both sections) and start devstack
2. Run from the command line:
openstack -v --debug server list (or any simple command)
3. Look in the output for the very first "curl" command that looks
something like this:
curl -i --insecure -X POST http://192.168.51.21:5000/v2.0/tokens -H
"Content-Type: application/json" -H "Accept: application/json" -H
"User-Agent: python-keystoneclient" -d '{"auth": {"tenantName":
"demo", "passwordCredentials": {"username": "demo", "password":
"admin"}}}'
4. The above "curl" command succeeds. Modify it to use chunking by
adding -H "Transfer-Encoding: chunked" and run it:
curl -i --insecure -X POST http://192.168.51.21:5000/v2.0/tokens -H
"Content-Type: application/json" -H "Accept: application/json" -H
"User-Agent: python-keystoneclient" -H "Transfer-Encoding: chunked" -d
'{"auth": {"tenantName": "demo", "passwordCredentials": {"username":
"demo", "password": "admin"}}}'
5. You will get a cli error:
HTTP/1.1 500 Internal Server Error
Date: Wed, 16 Jul 2014 19:01:58 GMT
Server: Apache/2.2.22 (Ubuntu)
Vary: X-Auth-Token
Content-Length: 215
Connection: close
Content-Type: application/json
{"error": {"message": "An unexpected error prevented the server from
fulfilling your request: request data read error (Disable debug mode
to suppress these details.)", "code": 500, "title": "Internal Server
Error"}}
6. The keystone log will show a stack trace:
[Wed Jul 16 19:02:43 2014] [error] 13693 ERROR keystone.common.wsgi [-] request data read error
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi Traceback (most recent call last):
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi File "/opt/stack/keystone/keystone/common/wsgi.py", line 414, in __call__
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi response = self.process_request(request)
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi File "/opt/stack/keystone/keystone/middleware/core.py", line 112, in process_request
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi params_json = request.body
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 677, in _body__get
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi self.make_body_seekable() # we need this to have content_length
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 922, in make_body_seekable
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi self.copy_body()
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 938, in copy_body
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi self.body = self.body_file_raw.read()
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi File "/opt/stack/keystone/keystone/common/utils.py", line 306, in read
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi result = self.data.read()
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi IOError: request data read error
[Wed Jul 16 19:02:43 2014] [error] 13693 TRACE keystone.common.wsgi
To manage notifications about this bug go to:
https://bugs.launchpad.net/keystone/+bug/1346211/+subscriptions
Follow ups
References