From d16e024d490ce5583dd13363e9fa94a953e36e4b Mon Sep 17 00:00:00 2001 From: Christian Schwarz Date: Wed, 4 Jun 2025 20:46:48 +0200 Subject: [PATCH] treat storage more likea n actor itself; dead end also --- libs/sk_ps_discovery/src/completion.rs | 11 ---------- libs/sk_ps_discovery/src/lib.rs | 30 ++++++++++++-------------- libs/sk_ps_discovery/src/storage.rs | 5 +++++ 3 files changed, 19 insertions(+), 27 deletions(-) delete mode 100644 libs/sk_ps_discovery/src/completion.rs diff --git a/libs/sk_ps_discovery/src/completion.rs b/libs/sk_ps_discovery/src/completion.rs deleted file mode 100644 index 45d95214b5..0000000000 --- a/libs/sk_ps_discovery/src/completion.rs +++ /dev/null @@ -1,11 +0,0 @@ -pub struct Waiter { - inner: Arc, -} - -struct Inner { - next: Box, -} - -impl Waiter { - pub fn -} diff --git a/libs/sk_ps_discovery/src/lib.rs b/libs/sk_ps_discovery/src/lib.rs index 014e4299f7..622239638b 100644 --- a/libs/sk_ps_discovery/src/lib.rs +++ b/libs/sk_ps_discovery/src/lib.rs @@ -2,7 +2,6 @@ mod tests; mod storage; -mod completion; use std::collections::{HashMap, HashSet, hash_map}; @@ -51,15 +50,11 @@ pub struct RemoteConsistentLsnAdv { pub remote_consistent_lsn: Lsn, } -pub enum Effect { - UnoffloadTimeline { - tenant_timeline_id: TenantTimelineId, - }, - OffloadTimeline { - tenant_timeline_id: TenantTimelineId, - }, +pub struct WaitForStorage { + } + pub struct EffectCompletionUnoffloadTimeline { pub tenant_timeline_id: TenantTimelineId, pub loaded: storage::Timeline, @@ -70,8 +65,8 @@ pub struct EffectCompletionOffloadTimeline { } enum OffloadState { - Unoffloading(completion::Waiter), - Offloading(completion::Waiter), + Unoffloading(storage::Waiter), + Offloading(storage::Waiter), Offloaded, } @@ -104,7 +99,7 @@ impl World { pub fn handle_remote_consistent_lsn_advertisement( &mut self, adv: RemoteConsistentLsnAdv, - ) -> Result<(), Effect> { + ) -> Result<(), storage::Waiter> { let RemoteConsistentLsnAdv { attachment, remote_consistent_lsn, @@ -172,13 +167,16 @@ impl World { commit_lsn_advertisements_by_node } - fn unoffload_timeline(&mut self, ttid: TenantTimelineId) -> Result<(), Effect> { - let Some(state) = self.offloaded_timelines.get(&ttid) else { + fn unoffload_timeline(&mut self, ttid: TenantTimelineId) -> Result<(), WaitForStorage> { + let Some(state) = self.offloaded_timelines.get_mut(&ttid) else { return Ok(()); }; match state { - OffloadState::InProgress(receiver) => return Err(Effect::WaitForOffload), - OffloadState::Offloaded => todo!(), + OffloadState::Unoffloading(waiter) | + OffloadState::Offloading(waiter) => waiter.clone(), + OffloadState::Offloaded => { + *state = &mut OffloadState::Unoffloading(); + }, } Err(Effect::UnoffloadTimeline { tenant_timeline_id: ttid, @@ -228,7 +226,7 @@ impl World { hash_map::Entry::Occupied(occupied_entry) => { match occupied_entry.get() { OffloadState::Unoffloading | - OffloadState::Offloading => + OffloadState::Offloading => OffloadState::Offloaded => todo!(), } }, diff --git a/libs/sk_ps_discovery/src/storage.rs b/libs/sk_ps_discovery/src/storage.rs index 8c017c14ef..12c885dcaa 100644 --- a/libs/sk_ps_discovery/src/storage.rs +++ b/libs/sk_ps_discovery/src/storage.rs @@ -9,6 +9,11 @@ pub trait Storage { fn store_timeline(&self, ttid: TenantTimelineId, timeline: Timeline); } +#[derive(Clone)] +pub struct Waiter { + +} + pub struct Timeline { pub remote_consistent_lsns: HashMap, }