(&self)
| 1146 | } |
| 1147 | |
| 1148 | async fn restore_persisted_sandboxes(&self) { |
| 1149 | let state_root = sandboxes_root_dir(&self.config.state_dir); |
| 1150 | let mut entries = match tokio::fs::read_dir(&state_root).await { |
| 1151 | Ok(entries) => entries, |
| 1152 | Err(err) if err.kind() == std::io::ErrorKind::NotFound => return, |
| 1153 | Err(err) => { |
| 1154 | warn!( |
| 1155 | state_root = %state_root.display(), |
| 1156 | error = %err, |
| 1157 | "vm driver: failed to scan persisted sandboxes" |
| 1158 | ); |
| 1159 | return; |
| 1160 | } |
| 1161 | }; |
| 1162 | |
| 1163 | loop { |
| 1164 | let entry = match entries.next_entry().await { |
| 1165 | Ok(Some(entry)) => entry, |
| 1166 | Ok(None) => break, |
| 1167 | Err(err) => { |
| 1168 | warn!( |
| 1169 | state_root = %state_root.display(), |
| 1170 | error = %err, |
| 1171 | "vm driver: failed to continue scanning persisted sandboxes" |
| 1172 | ); |
| 1173 | break; |
| 1174 | } |
| 1175 | }; |
| 1176 | let state_dir = entry.path(); |
| 1177 | let is_dir = match entry.file_type().await { |
| 1178 | Ok(file_type) => file_type.is_dir(), |
| 1179 | Err(err) => { |
| 1180 | warn!( |
| 1181 | state_dir = %state_dir.display(), |
| 1182 | error = %err, |
| 1183 | "vm driver: failed to inspect persisted sandbox state dir" |
| 1184 | ); |
| 1185 | continue; |
| 1186 | } |
| 1187 | }; |
| 1188 | if !is_dir { |
| 1189 | continue; |
| 1190 | } |
| 1191 | |
| 1192 | let request_path = state_dir.join(SANDBOX_REQUEST_FILE); |
| 1193 | let sandbox = match read_sandbox_request(&request_path).await { |
| 1194 | Ok(sandbox) => sandbox, |
| 1195 | Err(err) if err.kind() == std::io::ErrorKind::NotFound => continue, |
| 1196 | Err(err) => { |
| 1197 | warn!( |
| 1198 | state_dir = %state_dir.display(), |
| 1199 | error = %err, |
| 1200 | "vm driver: failed to read persisted sandbox request" |
| 1201 | ); |
| 1202 | continue; |
| 1203 | } |
| 1204 | }; |
| 1205 |
no test coverage detected