[Openstack] [Glance]: which part of the source codes handle the receiving of the upload image data
Jay Pipes
jaypipes at gmail.com
Fri Feb 17 15:05:14 UTC 2012
On 02/17/2012 04:08 AM, benzwt benzwt wrote:
> Hi Glance guys,
Hi Reynolds!
> I'm not good in WSGI. I have a foolish question to ask.
> Which part of the source codes handle the receiving of the uploading data.
The receiver of the uploaded data is the webob.Request object that is
constructed on the Glance API server (within the eventlet that picks up
the socket connection associated with a client HTTP request).
> As far as I know, the uploading data is in body_file from webob. I
> traced the webob
> code but it made my head blowed.
Heh, yeah, it's a bit funky. :) More below...
> ---> send chunked data -> | (webob) this mechanism is unclear to
> me| ---> body_file
>
> Would somebody kindly give a guide on this issue ?
Well, I would say my words of advice would be to avoid making any calls
that end up calling the webob.Request.make_body_seekable() method (or
setting the is_body_seekable attribute). Doing so will make
webob.Request attempt to read the entire request body into memory (a
StringIO object) in an attempt to determine the length of the request
body if it is not known (as used to be the case with certain chunked
transfer requests that the Glance client used to use -- it now always
calculates the content length on the client side to avoid this possibility).
What Glance does is pass the webob.Request.body_file attribute off to
the backend storage driver object, and that storage driver either uses
the body_file attribute as-is (see /glance/store/filesystem.py) or wraps
that body_file attribute in a custom reader object that allows the
driver to read and track chunks of incoming request data without seeking
to the end fo the body_file (see above for problems with doing that...)
or writing chunks of the incoming request body to disk. See the Swift
driver in /glance/store/swift.py for how that is done.
Best,
-jay
More information about the Openstack
mailing list