Wait on a request to succeed (reach status completed)
(
dfx_orbit: &DfxOrbit,
request_id: UuidDTO,
timeout: Duration,
)
| 16 | |
| 17 | /// Wait on a request to succeed (reach status completed) |
| 18 | pub(super) async fn poll_request_completion( |
| 19 | dfx_orbit: &DfxOrbit, |
| 20 | request_id: UuidDTO, |
| 21 | timeout: Duration, |
| 22 | ) { |
| 23 | let timeout = Instant::now() + timeout; |
| 24 | |
| 25 | loop { |
| 26 | let request = dfx_orbit |
| 27 | .station |
| 28 | .review_id(GetRequestInput { |
| 29 | request_id: request_id.clone(), |
| 30 | with_full_info: None, |
| 31 | }) |
| 32 | .await |
| 33 | .unwrap(); |
| 34 | |
| 35 | match request.request.status { |
| 36 | RequestStatusDTO::Completed { .. } => return, |
| 37 | RequestStatusDTO::Rejected |
| 38 | | RequestStatusDTO::Cancelled { .. } |
| 39 | | RequestStatusDTO::Failed { .. } => { |
| 40 | panic!("Expected request {request_id} to succeed") |
| 41 | } |
| 42 | RequestStatusDTO::Approved |
| 43 | | RequestStatusDTO::Created |
| 44 | | RequestStatusDTO::Scheduled { .. } |
| 45 | | RequestStatusDTO::Processing { .. } => (), |
| 46 | } |
| 47 | |
| 48 | if Instant::now() > timeout { |
| 49 | panic!("Waiting for request {request_id} to succeed timed out"); |
| 50 | } |
| 51 | |
| 52 | tokio::time::sleep(Duration::from_secs(1)).await |
| 53 | } |
| 54 | } |
| 55 | |
| 56 | /// Fetches an asset from the local host and port |
| 57 | /// |