← Back to team overview

openstack team mailing list archive

Re: Swift on WebOb 1.2

 

Could you use webob 1.2 not 1.2b3? Because there's issues in 1.2b3 and I
experienced that some tests failed against SAIO with webob1.2b3.

And, if you can share brief config of the normal server, I can set my
machines and reproduce functests failing.

- Iryoung

On Thu, Jun 7, 2012 at 10:45 AM, Pete Zaitcev <zaitcev@xxxxxxxxxx> wrote:

> On Mon, 4 Jun 2012 14:40:21 +0900
> iryoung jeong <iryoung@xxxxxxxxx> wrote:
>
> > Anyway, current status is that I make your PatchSet 3 passed all
> > unit/functests with webob 1.1 and only 4 tests failed with webob 1.2b3.
> > After I compared my patch & your patchsets, I thought they looks similar,
> > therefore I rebased my patch based on PatchSet 3 and keep trying to make
> > them pass functests.
>
> Here's a fix for the problem with proxy_logging middleware.
> As I mentioned I run functional tests against a reasonably normal
> server, not SAIO.
>
> Please look at this and incorporate in change 8195. However, I must
> note that I have 22 functional tests still failing on WebOb 1.2b3.
> I'm going to continue working on resolving these issues.
>
> -- Pete
>
> commit f629016447e6156a8f9da7d94358427e47c2f375
> Author: Pete Zaitcev <zaitcev@xxxxxxxxxxxxxxxxx>
> Date:   Wed Jun 6 19:34:06 2012 -0600
>
>    Update 1 for Iryoung's patch #3 for change 8195
>
>    Traceback (most recent call last):
>      File
> "/usr/lib/python2.7/site-packages/swift/common/middleware/proxy_logging.py",
> line 205, in iter_response
>        client_disconnect or input_proxy.client_disconnect)
>      File
> "/usr/lib/python2.7/site-packages/swift/common/middleware/proxy_logging.py",
> line 120, in log_request
>        the_request = quote(unquote(req.path))
>      File "/usr/lib/python2.7/site-packages/webob/request.py", line 482,
> in path
>        bpath = bytes_(self.path_info, self.url_encoding)
>      File "/usr/lib/python2.7/site-packages/webob/descriptors.py", line
> 68, in fget
>        return req.encget(key, encattr=encattr)
>      File "/usr/lib/python2.7/site-packages/webob/request.py", line 174,
> in encget
>        return val.decode(encoding)
>      File "/usr/lib64/python2.7/encodings/utf_8.py", line 16, in decode
>        return codecs.utf_8_decode(input, errors, True)
>    UnicodeDecodeError: 'utf8' codec can't decode byte 0x8f in position 12:
> invalid start byte
>
> diff --git a/swift/common/middleware/proxy_logging.py
> b/swift/common/middleware/proxy_logging.py
> index 66c853c..55ab14d 100644
> --- a/swift/common/middleware/proxy_logging.py
> +++ b/swift/common/middleware/proxy_logging.py
> @@ -44,6 +44,9 @@ from webob import Request
>
>  from swift.common.utils import get_logger, get_remote_client, TRUE_VALUES
>
> +import codecs
> +utf8_decoder = codecs.getdecoder('utf-8')
> +
>
>  class InputProxy(object):
>     """
> @@ -115,7 +118,13 @@ class ProxyLoggingMiddleware(object):
>         req = Request(env)
>         if client_disconnect:  # log disconnected clients as '499' status
> code
>             status_int = 499
> -        the_request = quote(unquote(req.path))
> +        # Do not try to access req.path: crash in req.encget if invalid
> UTF-8.
> +        req_path = env.get('PATH_INFO','')
> +        if isinstance(req_path, str):
> +            (req_path,_len) = utf8_decoder(req_path,'replace')
> +        # Fold back to UTF-8 or else quote() tracebacks immediately below.
> +        req_path = req_path.encode('utf-8')
> +        the_request = quote(unquote(req_path))
>         if req.query_string:
>             the_request = the_request + '?' + req.query_string
>         logged_headers = None
>

References