MCPcopy
hub / github.com/borgbackup/borg / get_many

Method get_many

src/borg/remote.py:1201–1231  ·  view source on GitHub ↗
(self, keys, read_data=True, raise_missing=True, cache=True)

Source from the content-addressed store, hash-verified

1199 shutil.rmtree(self.basedir)
1200
1201 def get_many(self, keys, read_data=True, raise_missing=True, cache=True):
1202 # It could use different cache keys depending on read_data and cache full vs. meta-only chunks.
1203 unknown_keys = [key for key in keys if self.prefixed_key(key, complete=read_data) not in self.cache]
1204 repository_iterator = zip(
1205 unknown_keys, self.repository.get_many(unknown_keys, read_data=read_data, raise_missing=raise_missing)
1206 )
1207 for key in keys:
1208 pkey = self.prefixed_key(key, complete=read_data)
1209 if pkey in self.cache:
1210 file = self.key_filename(pkey)
1211 with open(file, "rb") as fd:
1212 self.hits += 1
1213 yield self.unpack(fd.read())
1214 else:
1215 for key_, data in repository_iterator:
1216 if key_ == key:
1217 transformed = self.add_entry(key, data, cache, complete=read_data)
1218 self.misses += 1
1219 yield transformed
1220 break
1221 else:
1222 # slow path: eviction during this get_many removed this key from the cache
1223 t0 = time.perf_counter()
1224 data = self.repository.get(key, read_data=read_data, raise_missing=raise_missing)
1225 self.slow_lat += time.perf_counter() - t0
1226 transformed = self.add_entry(key, data, cache, complete=read_data)
1227 self.slow_misses += 1
1228 yield transformed
1229 # Consume any pending requests
1230 for _ in repository_iterator:
1231 pass
1232
1233
1234def cache_if_remote(repository, *, decrypted_cache=False, pack=None, unpack=None, transform=None, force_cache=False):

Callers 1

get_manyMethod · 0.45

Calls 6

prefixed_keyMethod · 0.95
key_filenameMethod · 0.95
add_entryMethod · 0.95
unpackMethod · 0.80
readMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected