diff --git a/pageserver/src/layered_repository.rs b/pageserver/src/layered_repository.rs index 287c04f3e0..2e22df3f9f 100644 --- a/pageserver/src/layered_repository.rs +++ b/pageserver/src/layered_repository.rs @@ -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(); diff --git a/pageserver/src/layered_repository/inmemory_layer.rs b/pageserver/src/layered_repository/inmemory_layer.rs index d2c574881b..a32a0927ba 100644 --- a/pageserver/src/layered_repository/inmemory_layer.rs +++ b/pageserver/src/layered_repository/inmemory_layer.rs @@ -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()); diff --git a/pageserver/src/repository.rs b/pageserver/src/repository.rs index ff2d40182e..29abe8cf8e 100644 --- a/pageserver/src/repository.rs +++ b/pageserver/src/repository.rs @@ -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. /// diff --git a/pageserver/src/restore_local_repo.rs b/pageserver/src/restore_local_repo.rs index edf6a7549b..d5b2d77a40 100644 --- a/pageserver/src/restore_local_repo.rs +++ b/pageserver/src/restore_local_repo.rs @@ -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,