mirror of
https://github.com/borgbackup/borg.git
synced 2024-12-25 01:06:50 +00:00
Port cache to pack/unpack
This commit is contained in:
parent
f0240fbae6
commit
a9f37b96e4
1 changed files with 8 additions and 13 deletions
|
@ -28,19 +28,15 @@ def open(self):
|
|||
if not os.path.exists(self.path):
|
||||
return
|
||||
data = open(self.path, 'rb').read()
|
||||
id = data[:32]
|
||||
data = data[32:]
|
||||
if hashlib.sha256(data).digest() != id:
|
||||
raise Exception('Cache hash did not match')
|
||||
data = msgpack.unpackb(zlib.decompress(data))
|
||||
version = data.get('version')
|
||||
cache = unpack(data)
|
||||
version = cache.get('version')
|
||||
if version != 1:
|
||||
logging.error('Unsupported cache version %r' % version)
|
||||
return
|
||||
if data['store'] != self.store.uuid:
|
||||
if cache['store'] != self.store.uuid:
|
||||
raise Exception('Cache UUID mismatch')
|
||||
self.chunkmap = data['chunkmap']
|
||||
self.tid = data['tid']
|
||||
self.chunkmap = cache['chunkmap']
|
||||
self.tid = cache['tid']
|
||||
|
||||
def init(self):
|
||||
"""Initializes cache by fetching and reading all archive indicies
|
||||
|
@ -62,18 +58,17 @@ def init(self):
|
|||
|
||||
def save(self):
|
||||
assert self.store.state == self.store.OPEN
|
||||
data = {'version': 1,
|
||||
cache = {'version': 1,
|
||||
'store': self.store.uuid,
|
||||
'chunkmap': self.chunkmap,
|
||||
'tid': self.store.tid,
|
||||
}
|
||||
_, data = pack(cache)
|
||||
cachedir = os.path.dirname(self.path)
|
||||
if not os.path.exists(cachedir):
|
||||
os.makedirs(cachedir)
|
||||
with open(self.path, 'wb') as fd:
|
||||
data = zlib.compress(msgpack.packb(data))
|
||||
id = hashlib.sha256(data).digest()
|
||||
fd.write(id + data)
|
||||
fd.write(data)
|
||||
|
||||
def add_chunk(self, id, data):
|
||||
if self.seen_chunk(id):
|
||||
|
|
Loading…
Reference in a new issue