def copy(self, oid, serial, data, prev_txn, txnpos, datapos): prev_pos = self._resolve_backpointer(prev_txn, oid, data) old = self._index.get(oid, 0) # Calculate the pos the record will have in the storage. here = datapos # And update the temp file index self._tindex[oid] = here if prev_pos: # If there is a valid prev_pos, don't write data. data = None if data is None: dlen = 0 else: dlen = len(data) # Write the recovery data record h = DataHeader(oid, serial, old, txnpos, 0, dlen) self._file.write(h.asString()) # Write the data or a backpointer if data is None: if prev_pos: self._file.write(p64(prev_pos)) else: # Write a zero backpointer, which indicates an # un-creation transaction. self._file.write(z64) else: self._file.write(data)
def copy(self, oid, serial, data, version, prev_txn, txnpos, datapos): prev_pos = self._resolve_backpointer(prev_txn, oid, data) old = self._index.get(oid, 0) # Calculate the pos the record will have in the storage. here = datapos # And update the temp file index self._tindex[oid] = here if prev_pos: # If there is a valid prev_pos, don't write data. data = None if data is None: dlen = 0 else: dlen = len(data) # Write the recovery data record h = DataHeader(oid, serial, old, txnpos, len(version), dlen) if version: h.version = version pnv = self._restore_pnv(oid, old, version, prev_pos) if pnv is not None: h.pnv = pnv else: h.pnv = old # Link to the last record for this version h.vprev = self._tvindex.get(version, 0) if not h.vprev: h.vprev = self._vindex.get(version, 0) self._tvindex[version] = here self._tfile.write(h.asString()) # Write the data or a backpointer if data is None: if prev_pos: self._tfile.write(p64(prev_pos)) else: # Write a zero backpointer, which indicates an # un-creation transaction. self._tfile.write(z64) else: self._tfile.write(data)