Browse Source

Fix read_headers

master
Neil Booth 8 years ago
parent
commit
e452c0bca7
  1. 29
      server/cache.py

29
server/cache.py

@ -369,22 +369,23 @@ class FSCache(LoggedClass):
self.headers = []
self.height += blocks_done
def read_headers(self, height, count):
read_count = min(count, self.height + 1 - height)
assert height >= 0 and read_count >= 0
assert count <= read_count + len(self.headers)
def read_headers(self, start, count):
result = b''
if read_count > 0:
header_len = self.coin.HEADER_LEN
self.headers_file.seek(height * header_len)
result = self.headers_file.read(read_count * header_len)
count -= read_count
if count:
start = (height + read_count) - (self.height + 1)
result += b''.join(self.headers[start: start + count])
# Read some from disk
disk_count = min(count, self.height + 1 - start)
if disk_count > 0:
header_len = self.coin.HEADER_LEN
assert start >= 0
self.headers_file.seek(start * header_len)
result = self.headers_file.read(disk_count * header_len)
count -= disk_count
start += disk_count
# The rest from memory
start -= self.height + 1
assert count >= 0 and start + count <= len(self.headers)
result += b''.join(self.headers[start: start + count])
return result

Loading…
Cancel
Save