Commit 367c2b31 authored by Stavros Sachtouris's avatar Stavros Sachtouris
Browse files

Merge branch 'hotfix-0.12.5'

parents 567a88c2 04128bb9
Changelog for hotfix version 0.12.4
- Fix bug in readall (wrong behavior in non-regular files) [#4871]
Changelog for hotfix version 0.12.4
- Fix bug when registering image with upload but no metafile [#4864]
- Minor typos
......
......@@ -315,17 +315,19 @@ class PithosClient(PithosRestClient):
hash_gen = hash_cb(nblocks)
hash_gen.next()
for i in range(nblocks):
for i in xrange(nblocks):
block = readall(fileobj, min(blocksize, size - offset))
bytes = len(block)
if bytes <= 0:
break
hash = _pithos_hash(block, blockhash)
hashes.append(hash)
hmap[hash] = (offset, bytes)
offset += bytes
if hash_cb:
hash_gen.next()
msg = ('Failed to calculate uploaded blocks:'
' Offset and object size do not match')
msg = ('Failed to calculate uploading blocks: '
'read bytes(%s) != requested size (%s)' % (offset, size))
assert offset == size, msg
def _upload_missing_blocks(self, missing, hmap, fileobj, upload_gen=None):
......
......@@ -94,15 +94,14 @@ def path4url(*args):
def readall(openfile, size, retries=7):
"""Read a file until size is reached"""
from os import fstat
actual_size = fstat(openfile.fileno()).st_size - openfile.tell()
size = actual_size if actual_size < size else size
remains = size if size > 0 else 0
buf = ''
for i in range(retries):
buf += openfile.read(remains)
remains = size - len(buf)
if remains:
continue
tmp_buf = openfile.read(remains)
if tmp_buf:
buf += tmp_buf
remains -= len(tmp_buf)
if remains > 0:
continue
return buf
raise IOError('Failed to read %s bytes from file' % size)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment