EC: Chunked transfer/commit protocol is *not* HTTP
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
OpenStack Object Storage (swift) |
In Progress
|
Medium
|
Pete Zaitcev |
Bug Description
... and eventlet has a bug in the send_hundred_
If you go tcp dumping an EC PUT, or look at some of the unittests [1], or read the relevant code [2] - you'll notice that right in the middle of a chunked transfer request - we send "0\r\n\r\n" - which in HTTP protocol land means - that's the end. As in "the next thing on the wire will be the headers of the next request".
So, we don't talk HTTP between the proxy and object servers anymore - which seems like that'll bite us.
Also eventlet wsgi is only *allowing* this insane behavior because of other code we slipped in on them to allow setting 100 continue headers. But unfortunately we also broke WSGI. Being able to read from wsgi.input after the end of the request body (i.e. server receives "0\r\n\r\n") means you could read into the next request - which is all kinds of wrong, and is normally prevented - unless you break it [3].
Either way, we can't fix eventlet until we fix swift or we break the world - so we're sort of in a sticky wicket.
1. https:/
2. https:/
3. https:/
Review in progress at https:/ /review. openstack. org/#/c/ 427911/