Skip to content

Commit d13815a

Browse files
emmaling27Convex, Inc.
authored andcommitted
Inline try_join so we do not recapture stacktrace before retries (#41178)
Commit retries added in #40938 weren't working because the stacktrace from the `Persistence::write` call was getting recaptured in `tokio_spawn`. This inlines `tokio_spawn` to retry if it is a `DatabaseTimeout`. GitOrigin-RevId: bfd9d5b40b8c2f17c5975b0bff282b5ef7a67ae2
1 parent 1e25751 commit d13815a

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

crates/database/src/committer.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ use common::{
5757
},
5858
runtime::{
5959
block_in_place,
60-
try_join,
60+
tokio_spawn,
6161
Runtime,
6262
SpawnHandle,
6363
},
@@ -100,6 +100,7 @@ use tokio::sync::{
100100
},
101101
oneshot,
102102
};
103+
use tokio_util::task::AbortOnDropHandle;
103104
use usage_tracking::FunctionUsageTracker;
104105
use value::{
105106
heap_size::{
@@ -946,16 +947,18 @@ impl<RT: Runtime> Committer<RT> {
946947
.collect_vec(),
947948
);
948949
loop {
949-
if let Err(mut e) = try_join(
950-
"Committer::write_to_persistence",
950+
// Inline try_join so we don't recapture the stacktrace on error
951+
let name = "Commit::write_to_persistence";
952+
let handle = AbortOnDropHandle::new(tokio_spawn(
953+
name,
951954
Self::write_to_persistence(
952955
persistence.clone(),
953956
index_writes.clone(),
954957
document_writes.clone(),
955-
),
956-
)
957-
.await
958-
{
958+
)
959+
.in_span(Span::enter_with_local_parent(name)),
960+
));
961+
if let Err(mut e) = handle.await? {
959962
if e.is::<DatabaseTimeoutError>() {
960963
let delay = backoff.fail(&mut rt.rng());
961964
tracing::error!(

0 commit comments

Comments
 (0)