forked from Deuxfleurs/garage
Fix in rpc_client (see comment in code)
This commit is contained in:
parent
897fafa8db
commit
73574ab43e
1 changed files with 11 additions and 1 deletions
|
@ -117,10 +117,20 @@ impl<M: RpcMessage + 'static> RpcClient<M> {
|
||||||
if results.len() >= stop_after {
|
if results.len() >= stop_after {
|
||||||
// Continue requests in background
|
// Continue requests in background
|
||||||
// TODO: make this optionnal (only usefull for write requests)
|
// TODO: make this optionnal (only usefull for write requests)
|
||||||
self.clone().background.spawn_cancellable(async move {
|
|
||||||
|
// Continue the remaining requests immediately using tokio::spawn
|
||||||
|
// but enqueue a task in the background runner
|
||||||
|
// to ensure that the process won't exit until the requests are done
|
||||||
|
// (if we had just enqueued the resp_stream.collect directly in the background runner,
|
||||||
|
// the requests might have been put on hold in the background runner's queue,
|
||||||
|
// in which case they might timeout or otherwise fail)
|
||||||
|
let wait_finished_fut = tokio::spawn(async move {
|
||||||
resp_stream.collect::<Vec<_>>().await;
|
resp_stream.collect::<Vec<_>>().await;
|
||||||
Ok(())
|
Ok(())
|
||||||
});
|
});
|
||||||
|
self.clone().background.spawn(wait_finished_fut.map(|x| {
|
||||||
|
x.unwrap_or_else(|e| Err(Error::Message(format!("Await failed: {}", e))))
|
||||||
|
}));
|
||||||
|
|
||||||
Ok(results)
|
Ok(results)
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue