Rename put_unlink() to drop_relish() in Timeline trait.

Rename put_unlink() to drop_segment() in Layer trait.
This commit is contained in:
anastasia
2021-09-02 15:33:00 +03:00
parent 66174c0342
commit 2a4d405f96
4 changed files with 22 additions and 24 deletions

View File

@@ -675,14 +675,14 @@ impl Timeline for LayeredTimeline {
(relsize - 1) / RELISH_SEG_SIZE
};
// Unlink segments beyond the last remaining segment.
// Drop segments beyond the last remaining segment.
for remove_segno in (last_remain_seg + 1)..=old_last_seg {
let seg = SegmentTag {
rel,
segno: remove_segno,
};
let layer = self.get_layer_for_write(seg, lsn)?;
layer.put_unlink(lsn)?;
layer.drop_segment(lsn)?;
}
// Truncate the last remaining segment to the specified size
@@ -698,8 +698,8 @@ impl Timeline for LayeredTimeline {
Ok(())
}
fn put_unlink(&self, rel: RelishTag, lsn: Lsn) -> Result<()> {
trace!("put_unlink: {} at {}", rel, lsn);
fn drop_relish(&self, rel: RelishTag, lsn: Lsn) -> Result<()> {
trace!("drop_segment: {} at {}", rel, lsn);
if rel.is_blocky() {
let oldsize_opt = self.get_relish_size(rel, self.get_last_record_lsn())?;
@@ -710,25 +710,25 @@ impl Timeline for LayeredTimeline {
(oldsize - 1) / RELISH_SEG_SIZE
};
// Unlink all segments
// Drop all segments of the relish
for remove_segno in 0..=old_last_seg {
let seg = SegmentTag {
rel,
segno: remove_segno,
};
let layer = self.get_layer_for_write(seg, lsn)?;
layer.put_unlink(lsn)?;
layer.drop_segment(lsn)?;
}
} else {
warn!(
"put_unlink called on non-existent relish {} at {}",
"drop_segment called on non-existent relish {} at {}",
rel, lsn
);
}
} else {
let seg = SegmentTag::from_blknum(rel, 0);
let layer = self.get_layer_for_write(seg, lsn)?;
layer.put_unlink(lsn)?;
layer.drop_segment(lsn)?;
}
Ok(())
@@ -927,7 +927,6 @@ impl LayeredTimeline {
assert!(layer.get_start_lsn() <= lsn);
if layer.is_dropped() && layer.get_end_lsn() <= lsn {
// The segment was unlinked
return Ok(None);
}
@@ -1227,7 +1226,7 @@ impl LayeredTimeline {
//
// Determine for each file if it needs to be retained
// FIXME: also scan open in-memory layers. Normally we cannot remove the
// latest layer of any seg, but if it was unlinked it's possible
// latest layer of any seg, but if it was dropped it's possible
let mut layers = self.layers.lock().unwrap();
'outer: for l in layers.iter_historic_layers() {
let seg = l.get_seg_tag();

View File

@@ -380,7 +380,7 @@ impl InMemoryLayer {
}
/// Remember that the segment was dropped at given LSN
pub fn put_unlink(&self, lsn: Lsn) -> anyhow::Result<()> {
pub fn drop_segment(&self, lsn: Lsn) -> anyhow::Result<()> {
let mut inner = self.inner.lock().unwrap();
assert!(inner.drop_lsn.is_none());

View File

@@ -133,9 +133,8 @@ pub trait Timeline: Send + Sync {
/// Truncate relation
fn put_truncation(&self, rel: RelishTag, lsn: Lsn, nblocks: u32) -> Result<()>;
/// Unlink relish.
/// This method is used for marking dropped relations and truncated SLRU segments
fn put_unlink(&self, tag: RelishTag, lsn: Lsn) -> Result<()>;
/// This method is used for marking dropped relations and truncated SLRU files
fn drop_relish(&self, tag: RelishTag, lsn: Lsn) -> Result<()>;
/// Track end of the latest digested WAL record.
///

View File

@@ -395,15 +395,15 @@ pub fn save_decoded_record(
for tablespace_id in dropdb.tablespace_ids {
let rels = timeline.list_rels(tablespace_id, dropdb.db_id, lsn)?;
for rel in rels {
timeline.put_unlink(RelishTag::Relation(rel), lsn)?;
timeline.drop_relish(RelishTag::Relation(rel), lsn)?;
}
trace!(
"Unlink FileNodeMap {}, {} at lsn {}",
"Drop FileNodeMap {}, {} at lsn {}",
tablespace_id,
dropdb.db_id,
lsn
);
timeline.put_unlink(
timeline.drop_relish(
RelishTag::FileNodeMap {
spcnode: tablespace_id,
dbnode: dropdb.db_id,
@@ -446,12 +446,12 @@ pub fn save_decoded_record(
save_xact_record(timeline, lsn, &parsed_xact, decoded)?;
// Remove twophase file. see RemoveTwoPhaseFile() in postgres code
trace!(
"unlink twophaseFile for xid {} parsed_xact.xid {} here at {}",
"Drop twophaseFile for xid {} parsed_xact.xid {} here at {}",
decoded.xl_xid,
parsed_xact.xid,
lsn
);
timeline.put_unlink(
timeline.drop_relish(
RelishTag::TwoPhase {
xid: parsed_xact.xid,
},
@@ -731,7 +731,7 @@ fn save_xact_record(
dbnode: xnode.dbnode,
relnode: xnode.relnode,
};
timeline.put_unlink(RelishTag::Relation(rel), lsn)?;
timeline.drop_relish(RelishTag::Relation(rel), lsn)?;
}
}
Ok(())
@@ -773,7 +773,7 @@ fn save_clog_truncate_record(
return Ok(());
}
// Iterate via SLRU CLOG segments and unlink segments that we're ready to truncate
// Iterate via SLRU CLOG segments and drop segments that we're ready to truncate
// TODO This implementation is very inefficient -
// it scans all non-rels only to find Clog
//
@@ -788,8 +788,8 @@ fn save_clog_truncate_record(
if slru == SlruKind::Clog {
let segpage = segno * pg_constants::SLRU_PAGES_PER_SEGMENT;
if slru_may_delete_clogsegment(segpage, xlrec.pageno) {
timeline.put_unlink(RelishTag::Slru { slru, segno }, lsn)?;
trace!("unlink CLOG segment {:>04X} at lsn {}", segno, lsn);
timeline.drop_relish(RelishTag::Slru { slru, segno }, lsn)?;
trace!("Drop CLOG segment {:>04X} at lsn {}", segno, lsn);
}
}
}
@@ -892,7 +892,7 @@ fn save_multixact_truncate_record(
// Delete all the segments except the last one. The last segment can still
// contain, possibly partially, valid data.
while segment != endsegment {
timeline.put_unlink(
timeline.drop_relish(
RelishTag::Slru {
slru: SlruKind::MultiXactMembers,
segno: segment as u32,