Skip to content

Commit 3edf60c

Browse files
shuowang12claude
andcommitted
refactor: use unwrap_or_resume_unwind for spawn_blocking panic handling
Replace .expect("spawn_blocking task panicked") with the existing unwrap_or_resume_unwind utility to match codebase conventions and properly propagate panics with their original backtraces. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 7af01b9 commit 3edf60c

File tree

3 files changed

+26
-23
lines changed

3 files changed

+26
-23
lines changed

crates/walrus-service/src/node.rs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ use self::{
174174
system_events::EventManager,
175175
};
176176
use crate::{
177-
common::config::SuiConfig,
177+
common::{config::SuiConfig, utils::unwrap_or_resume_unwind},
178178
event::{
179179
event_blob_downloader::{EventBlobDownloader, LastCertifiedEventBlob},
180180
event_processor::{
@@ -2633,8 +2633,8 @@ impl StorageNodeInner {
26332633
let metadata_result = {
26342634
let storage = self.storage.clone();
26352635
tokio::task::spawn_blocking(move || storage.get_metadata(&blob_id))
2636+
.map(unwrap_or_resume_unwind)
26362637
.await
2637-
.expect("spawn_blocking task panicked")
26382638
};
26392639
let deferral_from_size = match metadata_result {
26402640
Ok(Some(metadata)) => {
@@ -2905,8 +2905,8 @@ impl StorageNodeInner {
29052905
let storage = self.storage.clone();
29062906
let blob_id = *blob_id;
29072907
tokio::task::spawn_blocking(move || storage.get_metadata(&blob_id))
2908-
.await
2909-
.expect("spawn_blocking task panicked")?
2908+
.map(unwrap_or_resume_unwind)
2909+
.await?
29102910
};
29112911
if let Some(metadata) = existing {
29122912
tracing::debug!(%blob_id, "not syncing metadata: already stored");
@@ -3142,8 +3142,8 @@ impl StorageNodeInner {
31423142
let storage = self.storage.clone();
31433143
let blob_id = *blob_id;
31443144
tokio::task::spawn_blocking(move || storage.has_metadata(&blob_id))
3145+
.map(unwrap_or_resume_unwind)
31453146
.await
3146-
.expect("spawn_blocking task panicked")
31473147
.context("could not check metadata existence")?
31483148
};
31493149
if has_metadata {
@@ -3180,8 +3180,8 @@ impl StorageNodeInner {
31803180
let storage = self.storage.clone();
31813181
let blob_id = *blob_id;
31823182
tokio::task::spawn_blocking(move || storage.get_metadata(&blob_id))
3183+
.map(unwrap_or_resume_unwind)
31833184
.await
3184-
.expect("spawn_blocking task panicked")
31853185
.context("database error when storing sliver")?
31863186
};
31873187
if let Some(metadata) = persisted {
@@ -3206,8 +3206,8 @@ impl StorageNodeInner {
32063206
let storage = self.storage.clone();
32073207
let blob_id = *blob_id;
32083208
tokio::task::spawn_blocking(move || storage.has_metadata(&blob_id))
3209+
.map(unwrap_or_resume_unwind)
32093210
.await
3210-
.expect("spawn_blocking task panicked")
32113211
.context("could not check metadata existence")?
32123212
};
32133213
if has_metadata {
@@ -3281,8 +3281,8 @@ impl StorageNodeInner {
32813281
let storage = self.storage.clone();
32823282
let blob_id = *blob_id;
32833283
tokio::task::spawn_blocking(move || storage.get_metadata(&blob_id))
3284+
.map(unwrap_or_resume_unwind)
32843285
.await
3285-
.expect("spawn_blocking task panicked")
32863286
.context("unable to fetch metadata while flushing pending slivers")
32873287
.map_err(|error| PendingCacheError::Sliver(StoreSliverError::Internal(error)))?
32883288
};
@@ -3348,8 +3348,8 @@ impl StorageNodeInner {
33483348
let storage = self.storage.clone();
33493349
let blob_id = *blob_id;
33503350
let blob_info = tokio::task::spawn_blocking(move || storage.get_blob_info(&blob_id))
3351+
.map(unwrap_or_resume_unwind)
33513352
.await
3352-
.expect("spawn_blocking task panicked")
33533353
.context("could not retrieve blob info")?;
33543354
let epoch = self.current_committee_epoch();
33553355
Ok(blob_info.is_some_and(|blob_info| blob_info.is_registered(epoch)))
@@ -3653,8 +3653,8 @@ impl StorageNodeInner {
36533653
.get_metadata(&blob_id)
36543654
.map(|option| option.map(|metadata| metadata.metadata().encoding_type()))
36553655
})
3656+
.map(unwrap_or_resume_unwind)
36563657
.await
3657-
.expect("spawn_blocking task panicked")
36583658
}
36593659
}
36603660
}
@@ -4063,8 +4063,8 @@ impl ServiceState for StorageNodeInner {
40634063
let storage = self.storage.clone();
40644064
let blob_id = *blob_id;
40654065
let metadata = tokio::task::spawn_blocking(move || storage.get_metadata(&blob_id))
4066+
.map(unwrap_or_resume_unwind)
40664067
.await
4067-
.expect("spawn_blocking task panicked")
40684068
.context("database error when retrieving metadata")?
40694069
.ok_or(RetrieveMetadataError::Unavailable)?;
40704070
self.metrics.metadata_retrieved_total.inc();
@@ -4085,8 +4085,8 @@ impl ServiceState for StorageNodeInner {
40854085
let blob_info = {
40864086
let storage = self.storage.clone();
40874087
tokio::task::spawn_blocking(move || storage.get_blob_info(&blob_id))
4088+
.map(unwrap_or_resume_unwind)
40884089
.await
4089-
.expect("spawn_blocking task panicked")
40904090
.context("could not retrieve blob info")?
40914091
};
40924092

@@ -4100,8 +4100,8 @@ impl ServiceState for StorageNodeInner {
41004100
let has_metadata = {
41014101
let storage = self.storage.clone();
41024102
tokio::task::spawn_blocking(move || storage.has_metadata(&blob_id))
4103+
.map(unwrap_or_resume_unwind)
41034104
.await
4104-
.expect("spawn_blocking task panicked")
41054105
.context("could not check metadata existence")?
41064106
};
41074107
if has_metadata {
@@ -4175,8 +4175,8 @@ impl ServiceState for StorageNodeInner {
41754175
let storage = self.storage.clone();
41764176
let blob_id = *blob_id;
41774177
match tokio::task::spawn_blocking(move || storage.has_metadata(&blob_id))
4178+
.map(unwrap_or_resume_unwind)
41784179
.await
4179-
.expect("spawn_blocking task panicked")
41804180
{
41814181
Ok(true) => Ok(StoredOnNodeStatus::Stored),
41824182
Ok(false) => Ok(StoredOnNodeStatus::Nonexistent),
@@ -4325,8 +4325,8 @@ impl ServiceState for StorageNodeInner {
43254325
let storage = self.storage.clone();
43264326
let oid = sui_object_id;
43274327
tokio::task::spawn_blocking(move || storage.get_per_object_info(&oid))
4328+
.map(unwrap_or_resume_unwind)
43284329
.await
4329-
.expect("spawn_blocking task panicked")
43304330
.context("database error when checking per object info")?
43314331
};
43324332
if let Some(per_object_info) = per_object_info {
@@ -4341,8 +4341,8 @@ impl ServiceState for StorageNodeInner {
43414341
tokio::task::spawn_blocking(move || {
43424342
storage.get_per_object_pooled_info(&oid)
43434343
})
4344+
.map(unwrap_or_resume_unwind)
43444345
.await
4345-
.expect("spawn_blocking task panicked")
43464346
.context(
43474347
"database error when checking per object pooled info",
43484348
)?
@@ -4386,8 +4386,8 @@ impl ServiceState for StorageNodeInner {
43864386
let storage = self.storage.clone();
43874387
let blob_id = *blob_id;
43884388
let blob_info = tokio::task::spawn_blocking(move || storage.get_blob_info(&blob_id))
4389+
.map(unwrap_or_resume_unwind)
43894390
.await
4390-
.expect("spawn_blocking task panicked")
43914391
.context("could not retrieve blob info")?;
43924392
Ok(blob_info
43934393
.map(|blob_info| blob_info.to_blob_status(self.current_committee_epoch()))

crates/walrus-service/src/node/blob_sync.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,10 @@ use super::{
4343
storage::Storage,
4444
system_events::{CompletableHandle, EventHandle},
4545
};
46-
use crate::{common::utils::FutureHelpers as _, node::NodeStatus};
46+
use crate::{
47+
common::utils::{self, FutureHelpers as _},
48+
node::NodeStatus,
49+
};
4750

4851
#[derive(Debug, Clone)]
4952
struct Permits {
@@ -795,9 +798,9 @@ impl BlobSynchronizer {
795798
let existing = {
796799
let storage = self.storage().clone();
797800
let blob_id = self.blob_id;
798-
tokio::task::spawn_blocking(move || storage.get_metadata(&blob_id))
799-
.await
800-
.expect("spawn_blocking task panicked")?
801+
utils::unwrap_or_resume_unwind(
802+
tokio::task::spawn_blocking(move || storage.get_metadata(&blob_id)).await,
803+
)?
801804
};
802805
if let Some(metadata) = existing {
803806
tracing::debug!("not syncing metadata: already stored");

crates/walrus-service/src/node/storage.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1229,8 +1229,8 @@ impl Storage {
12291229
}
12301230
Ok::<_, TypedStoreError>(fetched_blobs)
12311231
})
1232-
.await
1233-
.expect("spawn_blocking task panicked")?;
1232+
.map(utils::unwrap_or_resume_unwind)
1233+
.await?;
12341234

12351235
Ok(fetched_blobs.into())
12361236
}

0 commit comments

Comments
 (0)