diff --git a/pageserver/src/layered_repository.rs b/pageserver/src/layered_repository.rs index 392aa52844..cc8f8d6b68 100644 --- a/pageserver/src/layered_repository.rs +++ b/pageserver/src/layered_repository.rs @@ -1640,7 +1640,7 @@ impl LayeredTimeline { Ok(layer) } - fn put_value(&self, key: Key, lsn: Lsn, val: Value) -> Result<()> { + fn put_value(&self, key: Key, lsn: Lsn, val: &Value) -> Result<()> { //info!("PUT: key {} at {}", key, lsn); let layer = self.get_layer_for_write(lsn)?; layer.put_value(key, lsn, val)?; @@ -2555,7 +2555,7 @@ impl Deref for LayeredTimelineWriter<'_> { } impl<'a> TimelineWriter<'_> for LayeredTimelineWriter<'a> { - fn put(&self, key: Key, lsn: Lsn, value: Value) -> Result<()> { + fn put(&self, key: Key, lsn: Lsn, value: &Value) -> Result<()> { self.tl.put_value(key, lsn, value) } @@ -2697,7 +2697,7 @@ pub mod tests { let TEST_KEY: Key = Key::from_hex("112222222233333333444444445500000001").unwrap(); let writer = tline.writer(); - writer.put(TEST_KEY, Lsn(0x10), Value::Image(TEST_IMG("foo at 0x10")))?; + writer.put(TEST_KEY, Lsn(0x10), &Value::Image(TEST_IMG("foo at 0x10")))?; writer.finish_write(Lsn(0x10)); drop(writer); @@ -2705,7 +2705,7 @@ pub mod tests { tline.compact()?; let writer = tline.writer(); - writer.put(TEST_KEY, Lsn(0x20), Value::Image(TEST_IMG("foo at 0x20")))?; + writer.put(TEST_KEY, Lsn(0x20), &Value::Image(TEST_IMG("foo at 0x20")))?; writer.finish_write(Lsn(0x20)); drop(writer); @@ -2713,7 +2713,7 @@ pub mod tests { tline.compact()?; let writer = tline.writer(); - writer.put(TEST_KEY, Lsn(0x30), Value::Image(TEST_IMG("foo at 0x30")))?; + writer.put(TEST_KEY, Lsn(0x30), &Value::Image(TEST_IMG("foo at 0x30")))?; writer.finish_write(Lsn(0x30)); drop(writer); @@ -2721,7 +2721,7 @@ pub mod tests { tline.compact()?; let writer = tline.writer(); - writer.put(TEST_KEY, Lsn(0x40), Value::Image(TEST_IMG("foo at 0x40")))?; + writer.put(TEST_KEY, Lsn(0x40), &Value::Image(TEST_IMG("foo at 0x40")))?; writer.finish_write(Lsn(0x40)); drop(writer); @@ -2759,7 +2759,7 @@ pub mod tests { writer.put( test_key, lsn, - Value::Image(TEST_IMG(&format!("{} at {}", blknum, lsn))), + &Value::Image(TEST_IMG(&format!("{} at {}", blknum, lsn))), )?; writer.finish_write(lsn); drop(writer); @@ -2805,7 +2805,7 @@ pub mod tests { writer.put( test_key, lsn, - Value::Image(TEST_IMG(&format!("{} at {}", blknum, lsn))), + &Value::Image(TEST_IMG(&format!("{} at {}", blknum, lsn))), )?; writer.finish_write(lsn); updated[blknum] = lsn; @@ -2823,7 +2823,7 @@ pub mod tests { writer.put( test_key, lsn, - Value::Image(TEST_IMG(&format!("{} at {}", blknum, lsn))), + &Value::Image(TEST_IMG(&format!("{} at {}", blknum, lsn))), )?; writer.finish_write(lsn); drop(writer); @@ -2875,7 +2875,7 @@ pub mod tests { writer.put( test_key, lsn, - Value::Image(TEST_IMG(&format!("{} at {}", blknum, lsn))), + &Value::Image(TEST_IMG(&format!("{} at {}", blknum, lsn))), )?; writer.finish_write(lsn); updated[blknum] = lsn; @@ -2899,7 +2899,7 @@ pub mod tests { writer.put( test_key, lsn, - Value::Image(TEST_IMG(&format!("{} at {}", blknum, lsn))), + &Value::Image(TEST_IMG(&format!("{} at {}", blknum, lsn))), )?; println!("updating {} at {}", blknum, lsn); writer.finish_write(lsn); @@ -2958,7 +2958,7 @@ pub mod tests { writer.put( test_key, lsn, - Value::Image(TEST_IMG(&format!("{} {} at {}", idx, blknum, lsn))), + &Value::Image(TEST_IMG(&format!("{} {} at {}", idx, blknum, lsn))), )?; println!("updating [{}][{}] at {}", idx, blknum, lsn); writer.finish_write(lsn); diff --git a/pageserver/src/layered_repository/inmemory_layer.rs b/pageserver/src/layered_repository/inmemory_layer.rs index bffb946f7e..87e6877520 100644 --- a/pageserver/src/layered_repository/inmemory_layer.rs +++ b/pageserver/src/layered_repository/inmemory_layer.rs @@ -267,13 +267,13 @@ impl InMemoryLayer { /// Common subroutine of the public put_wal_record() and put_page_image() functions. /// Adds the page version to the in-memory tree - pub fn put_value(&self, key: Key, lsn: Lsn, val: Value) -> Result<()> { + pub fn put_value(&self, key: Key, lsn: Lsn, val: &Value) -> Result<()> { trace!("put_value key {} at {}/{}", key, self.timelineid, lsn); let mut inner = self.inner.write().unwrap(); inner.assert_writeable(); - let off = inner.file.write_blob(&Value::ser(&val)?)?; + let off = inner.file.write_blob(&Value::ser(val)?)?; let vec_map = inner.index.entry(key).or_default(); let old = vec_map.append_or_update_last(lsn, off).unwrap().0; diff --git a/pageserver/src/pgdatadir_mapping.rs b/pageserver/src/pgdatadir_mapping.rs index 9dbae74074..23850169d8 100644 --- a/pageserver/src/pgdatadir_mapping.rs +++ b/pageserver/src/pgdatadir_mapping.rs @@ -912,7 +912,7 @@ impl<'a, R: Repository> DatadirModification<'a, R> { let pending_nblocks = self.pending_nblocks; for (key, value) in self.pending_updates { - writer.put(key, self.lsn, value)?; + writer.put(key, self.lsn, &value)?; } for key_range in self.pending_deletions { writer.delete(key_range.clone(), self.lsn)?; diff --git a/pageserver/src/repository.rs b/pageserver/src/repository.rs index 17e8806899..359c704e81 100644 --- a/pageserver/src/repository.rs +++ b/pageserver/src/repository.rs @@ -393,7 +393,7 @@ pub trait TimelineWriter<'a> { /// /// This will implicitly extend the relation, if the page is beyond the /// current end-of-file. - fn put(&self, key: Key, lsn: Lsn, value: Value) -> Result<()>; + fn put(&self, key: Key, lsn: Lsn, value: &Value) -> Result<()>; fn delete(&self, key_range: Range, lsn: Lsn) -> Result<()>; @@ -603,12 +603,12 @@ mod tests { let tline = repo.create_empty_timeline(TIMELINE_ID, Lsn(0))?; let writer = tline.writer(); - writer.put(*TEST_KEY, Lsn(0x10), Value::Image(TEST_IMG("foo at 0x10")))?; + writer.put(*TEST_KEY, Lsn(0x10), &Value::Image(TEST_IMG("foo at 0x10")))?; writer.finish_write(Lsn(0x10)); drop(writer); let writer = tline.writer(); - writer.put(*TEST_KEY, Lsn(0x20), Value::Image(TEST_IMG("foo at 0x20")))?; + writer.put(*TEST_KEY, Lsn(0x20), &Value::Image(TEST_IMG("foo at 0x20")))?; writer.finish_write(Lsn(0x20)); drop(writer); @@ -655,13 +655,13 @@ mod tests { let TEST_KEY_B: Key = Key::from_hex("112222222233333333444444445500000002").unwrap(); // Insert a value on the timeline - writer.put(TEST_KEY_A, Lsn(0x20), test_value("foo at 0x20"))?; - writer.put(TEST_KEY_B, Lsn(0x20), test_value("foobar at 0x20"))?; + writer.put(TEST_KEY_A, Lsn(0x20), &test_value("foo at 0x20"))?; + writer.put(TEST_KEY_B, Lsn(0x20), &test_value("foobar at 0x20"))?; writer.finish_write(Lsn(0x20)); - writer.put(TEST_KEY_A, Lsn(0x30), test_value("foo at 0x30"))?; + writer.put(TEST_KEY_A, Lsn(0x30), &test_value("foo at 0x30"))?; writer.finish_write(Lsn(0x30)); - writer.put(TEST_KEY_A, Lsn(0x40), test_value("foo at 0x40"))?; + writer.put(TEST_KEY_A, Lsn(0x40), &test_value("foo at 0x40"))?; writer.finish_write(Lsn(0x40)); //assert_current_logical_size(&tline, Lsn(0x40)); @@ -672,7 +672,7 @@ mod tests { .get_timeline_load(NEW_TIMELINE_ID) .expect("Should have a local timeline"); let new_writer = newtline.writer(); - new_writer.put(TEST_KEY_A, Lsn(0x40), test_value("bar at 0x40"))?; + new_writer.put(TEST_KEY_A, Lsn(0x40), &test_value("bar at 0x40"))?; new_writer.finish_write(Lsn(0x40)); // Check page contents on both branches @@ -703,14 +703,14 @@ mod tests { writer.put( *TEST_KEY, lsn, - Value::Image(TEST_IMG(&format!("foo at {}", lsn))), + &Value::Image(TEST_IMG(&format!("foo at {}", lsn))), )?; writer.finish_write(lsn); lsn += 0x10; writer.put( *TEST_KEY, lsn, - Value::Image(TEST_IMG(&format!("foo at {}", lsn))), + &Value::Image(TEST_IMG(&format!("foo at {}", lsn))), )?; writer.finish_write(lsn); lsn += 0x10; @@ -721,14 +721,14 @@ mod tests { writer.put( *TEST_KEY, lsn, - Value::Image(TEST_IMG(&format!("foo at {}", lsn))), + &Value::Image(TEST_IMG(&format!("foo at {}", lsn))), )?; writer.finish_write(lsn); lsn += 0x10; writer.put( *TEST_KEY, lsn, - Value::Image(TEST_IMG(&format!("foo at {}", lsn))), + &Value::Image(TEST_IMG(&format!("foo at {}", lsn))), )?; writer.finish_write(lsn); }