borg/doc/design.txt

67 lines
1.1 KiB
Plaintext

chunk_cache
bandstore
dedupestore => dds
init command
TODO
----
* Remote stores
* Stat and chunk cache
DONE
----
* Encryption
* Hard links
* cache redesign
* Symbolic links
* Owner, group, mode, ctime, mtime
cache = Cache(path,)
for file in files:
chunks = chunkify(file)
for chunk in chunkify(file):
if chunk.sha in cache:
cache.chunk_inc_ref(chunk)
else:
fs.add_chunk(chunk)
entry = Entry
archive.add(entry)
Repository layout
-----------------
REPO/README
REPO/VERSION
REPO/tid = x
REPO/data/
REPO/txn-active/tid
REPO/txn-active/add/<PATH>/
REPO/txn-active/delete/<PATH>/
REPO/txn-active/tid
REPO/txn-commit/add/<PATH>/
REPO/txn-commit/delete/<PATH>/
REPO/archives/<ARCHIVENAME>
REPO/blocks/XX/YY/XYZ
txn_completed/add/<PATH>/
txn_completed/delete/<PATH>/
API
---
"""
class Cache(object):
def chunk_inc_ref(self, chunk):
self.chunk_refcount.setdefault(chunk.sha, 0)
self.chunk_refcount[chunk.sha] += 1
def chunk_dec_ref(self, chunk):
assert self.chunk_refcount.get(chunk.sha, 0) > 0
self.chunk_refcount[chunk.sha] -= 1
if self.chunk_refcount[chunk.sha] == 0:
self.fs.delete_chunk(self.sha)
txn = txn_begin()