components/openstack/glance/patches/03-Partial_Content.patch
changeset 6852 bf55de364b19
parent 5405 66fd59fecd68
child 6883 beebcb25bedf
equal deleted inserted replaced
6851:f984e52b96bb 6852:bf55de364b19
     3 
     3 
     4 See community bugs:
     4 See community bugs:
     5  https://bugs.launchpad.net/glance/+bug/1399851
     5  https://bugs.launchpad.net/glance/+bug/1399851
     6  https://bugs.launchpad.net/glance/+bug/1417069
     6  https://bugs.launchpad.net/glance/+bug/1417069
     7 
     7 
     8 --- glance-2015.1.2/glance/api/v2/image_data.py.~1~	2015-10-13 09:38:23.000000000 -0700
     8 --- glance-12.0.0/glance/api/v2/image_data.py.~1~	2016-04-07 00:37:11.000000000 -0700
     9 +++ glance-2015.1.2/glance/api/v2/image_data.py	2016-01-19 12:23:11.296863244 -0800
     9 +++ glance-12.0.0/glance/api/v2/image_data.py	2016-06-27 18:46:02.584760065 -0700
    10 @@ -211,6 +211,8 @@ class ResponseSerializer(wsgi.JSONRespon
    10 @@ -281,6 +281,8 @@ class ResponseSerializer(wsgi.JSONRespon
    11  
    11  
    12      def download(self, response, image):
    12      def download(self, response, image):
    13          offset, chunk_size = 0, None
    13          offset, chunk_size = 0, None
    14 +
    14 +
    15 +        # Initially attempt to get "Content-Range" request
    15 +        # Initially attempt to get "Content-Range" request
    16          range_val = response.request.get_content_range()
    16          range_val = response.request.get_content_range()
    17  
    17  
    18          if range_val:
    18          if range_val:
    19 @@ -222,6 +224,21 @@ class ResponseSerializer(wsgi.JSONRespon
    19 @@ -292,6 +294,21 @@ class ResponseSerializer(wsgi.JSONRespon
    20              if range_val.stop is not None:
    20              if range_val.stop is not None:
    21                  chunk_size = range_val.stop - offset
    21                  chunk_size = range_val.stop - offset
    22  
    22  
    23 +            # Return 206 Partial Content
    23 +            # Return 206 Partial Content
    24 +            response.status_int = 206
    24 +            response.status_int = 206
    36 +                response.status_int = 206
    36 +                response.status_int = 206
    37 +
    37 +
    38          response.headers['Content-Type'] = 'application/octet-stream'
    38          response.headers['Content-Type'] = 'application/octet-stream'
    39  
    39  
    40          try:
    40          try:
    41 @@ -246,7 +263,9 @@ class ResponseSerializer(wsgi.JSONRespon
    41 @@ -317,7 +334,9 @@ class ResponseSerializer(wsgi.JSONRespon
    42              response.headers['Content-MD5'] = image.checksum
    42              response.headers['Content-MD5'] = image.checksum
    43          # NOTE(markwash): "response.app_iter = ..." also erroneously resets the
    43          # NOTE(markwash): "response.app_iter = ..." also erroneously resets the
    44          # content-length
    44          # content-length
    45 -        response.headers['Content-Length'] = str(image.size)
    45 -        response.headers['Content-Length'] = str(image.size)
    46 +        # NOTE(mattk): Should be set to chunk_size or image.size
    46 +        # NOTE(mattk): Should be set to chunk_size or image.size
    47 +        response.headers['Content-Length'] = \
    47 +        response.headers['Content-Length'] = \
    48 +            str(chunk_size) if chunk_size != 0 else str(image.size)
    48 +            str(chunk_size) if chunk_size != 0 else str(image.size)
    49  
    49  
    50      def upload(self, response, result):
    50      def upload(self, response, result):
    51          response.status_int = 204
    51          response.status_int = 204
    52 --- glance-2015.1.2/glance/common/wsgi.py.~1~	2015-10-13 09:38:23.000000000 -0700
    52 --- glance-12.0.0/glance/common/wsgi.py.~1~	2016-04-07 00:37:13.000000000 -0700
    53 +++ glance-2015.1.2/glance/common/wsgi.py	2016-01-19 12:23:11.297682604 -0800
    53 +++ glance-12.0.0/glance/common/wsgi.py	2016-06-27 18:46:02.583921325 -0700
    54 @@ -752,7 +752,7 @@ class Request(webob.Request):
    54 @@ -762,7 +762,7 @@ class Request(webob.Request):
    55          return self.accept_language.best_match(langs)
    55          return self.accept_language.best_match(langs)
    56  
    56  
    57      def get_content_range(self):
    57      def get_content_range(self):
    58 -        """Return the `Range` in a request."""
    58 -        """Return the `Range` in a request."""
    59 +        """Return the `Content-Range` in a request."""
    59 +        """Return the `Content-Range` in a request."""
    60          range_str = self.headers.get('Content-Range')
    60          range_str = self.headers.get('Content-Range')
    61          if range_str is not None:
    61          if range_str is not None:
    62              range_ = webob.byterange.ContentRange.parse(range_str)
    62              range_ = webob.byterange.ContentRange.parse(range_str)
    63 @@ -761,6 +761,16 @@ class Request(webob.Request):
    63 @@ -771,6 +771,16 @@ class Request(webob.Request):
    64                  raise webob.exc.HTTPBadRequest(explanation=msg)
    64                  raise webob.exc.HTTPBadRequest(explanation=msg)
    65              return range_
    65              return range_
    66  
    66  
    67 +    def get_range(self):
    67 +    def get_range(self):
    68 +        """Return the 'Range' in a reqyest."""
    68 +        """Return the 'Range' in a reqyest."""