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

Method iter_objects

src/borg/legacyrepository.py:1479–1510  ·  view source on GitHub ↗

Return object iterator for *segment*. See the _read() docstring about confidence in the returned data. The iterator returns five-tuples of (tag, key, offset, size, data).

(self, segment, read_data=True)

Source from the content-addressed store, hash-verified

1477 return fd.read(MAGIC_LEN)
1478
1479 def iter_objects(self, segment, read_data=True):
1480 """
1481 Return object iterator for *segment*.
1482
1483 See the _read() docstring about confidence in the returned data.
1484
1485 The iterator returns five-tuples of (tag, key, offset, size, data).
1486 """
1487 fd = self.get_fd(segment)
1488 offset = 0
1489 fd.seek(offset)
1490 if fd.read(MAGIC_LEN) != MAGIC:
1491 raise IntegrityError(f"Invalid segment magic [segment {segment}, offset {offset}]")
1492 offset = MAGIC_LEN
1493 header = fd.read(self.header_fmt.size)
1494 while header:
1495 size, tag, key, data = self._read(
1496 fd, header, segment, offset, (TAG_PUT2, TAG_DELETE, TAG_COMMIT, TAG_PUT), read_data=read_data
1497 )
1498 # tuple[3]: corresponds to len(data) == length of the full chunk payload (meta_len+enc_meta+enc_data)
1499 # tuple[4]: data will be None if read_data is False.
1500 yield tag, key, offset, size - header_size(tag), data
1501 assert size >= 0
1502 offset += size
1503 # we must get the fd via get_fd() here again as we yielded to our caller and it might
1504 # have triggered closing of the fd we had before (e.g. by calling io.read() for
1505 # different segment(s)).
1506 # by calling get_fd() here again we also make our fd "recently used" so it likely
1507 # does not get kicked out of self.fds LRUcache.
1508 fd = self.get_fd(segment)
1509 fd.seek(offset)
1510 header = fd.read(self.header_fmt.size)
1511
1512 def recover_segment(self, segment, filename):
1513 logger.info("Attempting to recover " + filename)

Callers 7

is_committed_segmentMethod · 0.95
compact_segmentsMethod · 0.80
replay_segmentsMethod · 0.80
_rebuild_sparseMethod · 0.80
checkMethod · 0.80
repo_dumpFunction · 0.80

Calls 6

get_fdMethod · 0.95
_readMethod · 0.95
IntegrityErrorClass · 0.85
header_sizeFunction · 0.85
seekMethod · 0.45
readMethod · 0.45

Tested by 2

repo_dumpFunction · 0.64