Juan Carlos Moreno created LIBCLOUD-598:
-------------------------------------------

             Summary: IOError, 'Not a gzipped file' on LINODE driver
                 Key: LIBCLOUD-598
                 URL: https://issues.apache.org/jira/browse/LIBCLOUD-598
             Project: Libcloud
          Issue Type: Bug
          Components: Compute
            Reporter: Juan Carlos Moreno


Linode response has "Content-Encoding: gzip" but plain text body is returned:

Request:
curl -i -X GET -H 'Host: api.linode.com' -H 'Accept-Encoding: gzip,deflate' 
--compress 
'https://api.linode.com:443/?api_key=*********&api_responseFormat=json&api_action=avail.datacenters'

Response:
HTTP/1.1 200 OK
Server: nginx/1.1.19
Date: Fri, 18 Jul 2014 09:47:34 GMT
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: Tiger Blood
Vary: Accept-Encoding
Content-Encoding: gzip
Strict-Transport-Security: max-age=31536000

{"ERRORARRAY":[],"DATA":[{"LOCATION":"Dallas, TX, 
USA","DATACENTERID":2,"ABBR":"dallas"},{"LOCATION":"Fremont, CA, 
USA","DATACENTERID":3,"ABBR":"fremont"},{"LOCATION":"Atlanta, GA, 
USA","DATACENTERID":4,"ABBR":"atlanta"},{"LOCATION":"Newark, NJ, 
USA","DATACENTERID":6,"ABBR":"newark"},{"LOCATION":"London, England, 
UK","DATACENTERID":7,"ABBR":"london"},{"LOCATION":"Tokyo, 
JP","DATACENTERID":8,"ABBR":"tokyo"}],"ACTION":"avail.datacenters"}

Exception:
  File ".libcloud/compute/drivers/ecm_linode.py", line 119, in list_nodes
    data = self.connection.request(API_ROOT, params=params).objects[0]
  File ".libcloud/common/base.py", line 687, in request
    response = responseCls(**kwargs)
  File ".libcloud/common/linode.py", line 91, in __init__
    headers=self.headers)
  File ".libcloud/common/base.py", line 172, in _decompress_response
    body = decompress_data('gzip', body)
  File ".libcloud/utils/compression.py", line 39, in decompress_data
    return gzip.GzipFile(fileobj=cls(data)).read()
  File "/usr/lib/python2.6/gzip.py", line 212, in read
    self._read(readsize)
  File "/usr/lib/python2.6/gzip.py", line 255, in _read
    self._read_gzip_header()
  File "/usr/lib/python2.6/gzip.py", line 156, in _read_gzip_header
    raise IOError, 'Not a gzipped file'

Proposed solution (caught IOError exception and continue)

libcloud/common/linode.py

<         self.body = self._decompress_response(body=response.read(),
---
>         # ECmanaged: Linode hack
>         # sends "Content-Encoding: gzip" header but a plain/text response     
>      
>         response_read = response.read()
> 
>         try:
>             self.body = self._decompress_response(body=response_read,
91a97,98
>         except IOError:
>             self.body = response_read.strip()





--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to