From 3127a4a13b78ccebee66266f9dfb2dca164695a0 Mon Sep 17 00:00:00 2001 From: Egor Suvorov Date: Wed, 29 Sep 2021 19:58:30 +0300 Subject: [PATCH] Safekeeper::Storage::write_wal: clarify behavior (#679) It previously took &SafeKeeperState similar to persist(), but only for its `server` member. Now it takes &ServerInfo only, so there it's clear the state is not persisted. Also added a comment about sync. --- walkeeper/src/safekeeper.rs | 8 ++++---- walkeeper/src/timeline.rs | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/walkeeper/src/safekeeper.rs b/walkeeper/src/safekeeper.rs index bbcc2649db..8cb629774e 100644 --- a/walkeeper/src/safekeeper.rs +++ b/walkeeper/src/safekeeper.rs @@ -275,8 +275,8 @@ impl AcceptorProposerMessage { pub trait Storage { /// Persist safekeeper state on disk, optionally syncing it. fn persist(&mut self, s: &SafeKeeperState, sync: bool) -> Result<()>; - /// Write piece of wal in buf to disk. - fn write_wal(&mut self, s: &SafeKeeperState, startpos: Lsn, buf: &[u8]) -> Result<()>; + /// Write piece of wal in buf to disk and sync it. + fn write_wal(&mut self, server: &ServerInfo, startpos: Lsn, buf: &[u8]) -> Result<()>; } /// SafeKeeper which consumes events (messages from compute) and provides @@ -423,7 +423,7 @@ where let mut last_rec_lsn = Lsn(0); if !msg.wal_data.is_empty() { self.storage - .write_wal(&self.s, msg.h.begin_lsn, &msg.wal_data)?; + .write_wal(&self.s.server, msg.h.begin_lsn, &msg.wal_data)?; // figure out last record's end lsn for reporting (if we got the // whole record) @@ -546,7 +546,7 @@ mod tests { Ok(()) } - fn write_wal(&mut self, _s: &SafeKeeperState, _startpos: Lsn, _buf: &[u8]) -> Result<()> { + fn write_wal(&mut self, _server: &ServerInfo, _startpos: Lsn, _buf: &[u8]) -> Result<()> { Ok(()) } } diff --git a/walkeeper/src/timeline.rs b/walkeeper/src/timeline.rs index 6e6bc8f97c..2c110d9087 100644 --- a/walkeeper/src/timeline.rs +++ b/walkeeper/src/timeline.rs @@ -18,8 +18,8 @@ use zenith_utils::zid::{ZTenantId, ZTimelineId}; use crate::replication::{HotStandbyFeedback, END_REPLICATION_MARKER}; use crate::safekeeper::{ - AcceptorProposerMessage, ProposerAcceptorMessage, SafeKeeper, SafeKeeperState, Storage, - SK_FORMAT_VERSION, SK_MAGIC, + AcceptorProposerMessage, ProposerAcceptorMessage, SafeKeeper, SafeKeeperState, ServerInfo, + Storage, SK_FORMAT_VERSION, SK_MAGIC, }; use crate::WalAcceptorConf; use postgres_ffi::xlog_utils::{XLogFileName, XLOG_BLCKSZ}; @@ -337,14 +337,14 @@ impl Storage for FileStorage { Ok(()) } - fn write_wal(&mut self, s: &SafeKeeperState, startpos: Lsn, buf: &[u8]) -> Result<()> { + fn write_wal(&mut self, server: &ServerInfo, startpos: Lsn, buf: &[u8]) -> Result<()> { let mut bytes_left: usize = buf.len(); let mut bytes_written: usize = 0; let mut partial; let mut start_pos = startpos; const ZERO_BLOCK: &[u8] = &[0u8; XLOG_BLCKSZ]; - let wal_seg_size = s.server.wal_seg_size as usize; - let ztli = s.server.ztli; + let wal_seg_size = server.wal_seg_size as usize; + let ztli = server.ztli; /* Extract WAL location for this block */ let mut xlogoff = start_pos.segment_offset(wal_seg_size) as usize; @@ -365,7 +365,7 @@ impl Storage for FileStorage { /* Open file */ let segno = start_pos.segment_number(wal_seg_size); // note: we basically don't support changing pg timeline - let wal_file_name = XLogFileName(s.server.tli, segno, wal_seg_size); + let wal_file_name = XLogFileName(server.tli, segno, wal_seg_size); let wal_file_path = self .conf .data_dir