Skip to content

Commit a3b601e

Browse files
committed
Fix redis-rs#436 (async): Read remaining responses in case of an error
1 parent 62c4aca commit a3b601e

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

src/aio.rs

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -505,16 +505,37 @@ where
505505
cmd.write_packed_pipeline(&mut self.buf);
506506
self.con.write_all(&self.buf).await?;
507507

508+
let mut first_err = None;
509+
508510
for _ in 0..offset {
509-
self.read_response().await?;
511+
let response = self.read_response().await;
512+
if let Err(err) = response {
513+
if first_err.is_none() {
514+
first_err = Some(err);
515+
}
516+
}
510517
}
511518

512519
let mut rv = Vec::with_capacity(count);
513520
for _ in 0..count {
514-
rv.push(self.read_response().await?);
521+
let response = self.read_response().await;
522+
match response {
523+
Ok(item) => {
524+
rv.push(item);
525+
}
526+
Err(err) => {
527+
if first_err.is_none() {
528+
first_err = Some(err);
529+
}
530+
}
531+
}
515532
}
516533

517-
Ok(rv)
534+
if let Some(err) = first_err {
535+
Err(err)
536+
} else {
537+
Ok(rv)
538+
}
518539
})
519540
.boxed()
520541
}

0 commit comments

Comments
 (0)