mirror of https://github.com/borgbackup/borg.git
Refactor unique chunks summing
This commit is contained in:
parent
31f3ddf503
commit
cd3cbee962
|
@ -1481,8 +1481,8 @@ class ItemFormatter(BaseFormatter):
|
||||||
self.call_keys = {
|
self.call_keys = {
|
||||||
'size': self.calculate_size,
|
'size': self.calculate_size,
|
||||||
'csize': self.calculate_csize,
|
'csize': self.calculate_csize,
|
||||||
'dsize': self.calculate_dsize,
|
'dsize': partial(self.sum_unique_chunks_metadata, lambda chunk: chunk.size),
|
||||||
'dcsize': self.calculate_dcsize,
|
'dcsize': partial(self.sum_unique_chunks_metadata, lambda chunk: chunk.csize),
|
||||||
'num_chunks': self.calculate_num_chunks,
|
'num_chunks': self.calculate_num_chunks,
|
||||||
'unique_chunks': self.calculate_unique_chunks,
|
'unique_chunks': self.calculate_unique_chunks,
|
||||||
'isomtime': partial(self.format_time, 'mtime'),
|
'isomtime': partial(self.format_time, 'mtime'),
|
||||||
|
@ -1531,6 +1531,20 @@ class ItemFormatter(BaseFormatter):
|
||||||
item_data[key] = self.call_keys[key](item)
|
item_data[key] = self.call_keys[key](item)
|
||||||
return item_data
|
return item_data
|
||||||
|
|
||||||
|
def sum_unique_chunks_metadata(self, metadata_func, item):
|
||||||
|
"""
|
||||||
|
sum unique chunks metadata, a unique chunk is a chunk which is referenced globally as often as it is in the
|
||||||
|
item
|
||||||
|
|
||||||
|
item: The item to sum its unique chunks' metadata
|
||||||
|
metadata_func: A function that takes a parameter of type ChunkIndexEntry and returns a number, used to return
|
||||||
|
the metadata needed from the chunk
|
||||||
|
"""
|
||||||
|
chunk_index = self.archive.cache.chunks
|
||||||
|
chunks = item.get('chunks', [])
|
||||||
|
chunks_counter = Counter(c.id for c in chunks)
|
||||||
|
return sum(metadata_func(c) for c in chunks if chunk_index[c.id].refcount == chunks_counter[c.id])
|
||||||
|
|
||||||
def calculate_num_chunks(self, item):
|
def calculate_num_chunks(self, item):
|
||||||
return len(item.get('chunks', []))
|
return len(item.get('chunks', []))
|
||||||
|
|
||||||
|
@ -1544,18 +1558,6 @@ class ItemFormatter(BaseFormatter):
|
||||||
def calculate_csize(self, item):
|
def calculate_csize(self, item):
|
||||||
return sum(c.csize for c in item.get('chunks', []))
|
return sum(c.csize for c in item.get('chunks', []))
|
||||||
|
|
||||||
def calculate_dsize(self, item):
|
|
||||||
chunk_index = self.archive.cache.chunks
|
|
||||||
chunks = item.get('chunks', [])
|
|
||||||
chunks_counter = Counter(c.id for c in chunks)
|
|
||||||
return sum(c.size for c in chunks if chunk_index[c.id].refcount == chunks_counter[c.id])
|
|
||||||
|
|
||||||
def calculate_dcsize(self, item):
|
|
||||||
chunk_index = self.archive.cache.chunks
|
|
||||||
chunks = item.get('chunks', [])
|
|
||||||
chunks_counter = Counter(c.id for c in chunks)
|
|
||||||
return sum(c.csize for c in chunks if chunk_index[c.id].refcount == chunks_counter[c.id])
|
|
||||||
|
|
||||||
def hash_item(self, hash_function, item):
|
def hash_item(self, hash_function, item):
|
||||||
if 'chunks' not in item:
|
if 'chunks' not in item:
|
||||||
return ""
|
return ""
|
||||||
|
|
Loading…
Reference in New Issue