turns out with the switch to sync Mutex there's no reason for upgrade() to be async either

This commit is contained in:
Christian Schwarz
2025-01-14 14:53:41 +01:00
parent e4ea706424
commit 3b65465e10
2 changed files with 10 additions and 17 deletions
+5 -12
View File
@@ -967,14 +967,7 @@ impl PageServerHandler {
fail::fail_point!("ps::handle-pagerequest-message::exists");
(
vec![self
.handle_get_rel_exists_request(
&*shard
.upgrade()
// TODO: need sensitive to cancel()
.await?,
&req,
ctx,
)
.handle_get_rel_exists_request(&*shard.upgrade()?, &req, ctx)
.instrument(span.clone())
.await
.map(|msg| (msg, timer))
@@ -991,7 +984,7 @@ impl PageServerHandler {
fail::fail_point!("ps::handle-pagerequest-message::nblocks");
(
vec![self
.handle_get_nblocks_request(&*shard.upgrade().await?, &req, ctx)
.handle_get_nblocks_request(&*shard.upgrade()?, &req, ctx)
.instrument(span.clone())
.await
.map(|msg| (msg, timer))
@@ -1012,7 +1005,7 @@ impl PageServerHandler {
trace!(npages, "handling getpage request");
let res = self
.handle_get_page_at_lsn_request_batched(
&*shard.upgrade().await?,
&*shard.upgrade()?,
effective_request_lsn,
pages,
ctx,
@@ -1034,7 +1027,7 @@ impl PageServerHandler {
fail::fail_point!("ps::handle-pagerequest-message::dbsize");
(
vec![self
.handle_db_size_request(&*shard.upgrade().await?, &req, ctx)
.handle_db_size_request(&*shard.upgrade()?, &req, ctx)
.instrument(span.clone())
.await
.map(|msg| (msg, timer))
@@ -1051,7 +1044,7 @@ impl PageServerHandler {
fail::fail_point!("ps::handle-pagerequest-message::slrusegment");
(
vec![self
.handle_get_slru_segment_request(&*shard.upgrade().await?, &req, ctx)
.handle_get_slru_segment_request(&*shard.upgrade()?, &req, ctx)
.instrument(span.clone())
.await
.map(|msg| (msg, timer))
+5 -5
View File
@@ -264,11 +264,11 @@ impl<T: Types> Cache<T> {
tenant_manager: &T::TenantManager,
) -> Result<Handle<T>, GetError<T>> {
let miss: ShardSelector = {
let routing_state = self.shard_routing(timeline_id, shard_selector).await;
let routing_state = self.shard_routing(timeline_id, shard_selector);
match routing_state {
RoutingResult::FastPath(handle) => return Ok(handle),
RoutingResult::SlowPath(key) => match self.map.get(&key) {
Some(cached) => match cached.upgrade().await {
Some(cached) => match cached.upgrade() {
Ok(upgraded) => return Ok(upgraded),
Err(HandleUpgradeError::ShutDown) => {
// TODO: dedup with shard_routing()
@@ -286,7 +286,7 @@ impl<T: Types> Cache<T> {
}
#[inline(always)]
async fn shard_routing(
fn shard_routing(
&mut self,
timeline_id: TimelineId,
shard_selector: ShardSelector,
@@ -296,7 +296,7 @@ impl<T: Types> Cache<T> {
let Some((first_key, first_handle)) = self.map.iter().next() else {
return RoutingResult::NeedConsultTenantManager;
};
let Ok(first_handle) = first_handle.upgrade().await else {
let Ok(first_handle) = first_handle.upgrade() else {
// TODO: dedup with get_impl()
trace!("handle cache stale");
let first_key_owned = *first_key;
@@ -416,7 +416,7 @@ pub(crate) enum HandleUpgradeError {
}
impl<T: Types> WeakHandle<T> {
pub(crate) async fn upgrade(&self) -> Result<Handle<T>, HandleUpgradeError> {
pub(crate) fn upgrade(&self) -> Result<Handle<T>, HandleUpgradeError> {
let Some(inner) = Weak::upgrade(&self.inner) else {
return Err(HandleUpgradeError::ShutDown);
};