def _cache_sync_archive(self, archive_id):
log.debug('Started cache sync')
add_chunk = self._cache.chunks.add
cdata = self._cache.repository.get(archive_id)
_, data = self._cache.key.decrypt(archive_id, cdata)
add_chunk(archive_id, 1, len(data), len(cdata))
try:
archive = ArchiveItem(internal_dict=msgpack.unpackb(data))
except (TypeError, ValueError, AttributeError) as error:
log.error('Corrupted/unknown archive metadata: %s', error)
return False
if archive.version != 1:
log.error('Unknown archive metadata version %r', archive.version)
return False
unpacker = msgpack.Unpacker()
for item_id, chunk in zip(archive.items, self._cache.repository.get_many(archive.items)):
_, data = self._cache.key.decrypt(item_id, chunk)
add_chunk(item_id, 1, len(data), len(chunk))
unpacker.feed(data)
for item in unpacker:
if not isinstance(item, dict):
log.error('Error: Did not get expected metadata dict - archive corrupted!')
return False
if b'chunks' in item:
for chunk_id, size, csize in item[b'chunks']:
add_chunk(chunk_id, 1, size, csize)
log.debug('Completed cache sync')
return True
评论列表
文章目录