(&self, sandbox: Sandbox, state_dir: PathBuf)
| 1220 | } |
| 1221 | |
| 1222 | async fn restore_persisted_sandbox(&self, sandbox: Sandbox, state_dir: PathBuf) { |
| 1223 | let Some(image_ref) = self.resolved_sandbox_image(&sandbox) else { |
| 1224 | warn!( |
| 1225 | sandbox_id = %sandbox.id, |
| 1226 | sandbox_name = %sandbox.name, |
| 1227 | "vm driver: cannot restore persisted sandbox without image" |
| 1228 | ); |
| 1229 | return; |
| 1230 | }; |
| 1231 | let tls_paths = match self.config.tls_paths() { |
| 1232 | Ok(paths) => paths, |
| 1233 | Err(err) => { |
| 1234 | warn!( |
| 1235 | sandbox_id = %sandbox.id, |
| 1236 | sandbox_name = %sandbox.name, |
| 1237 | error = %err, |
| 1238 | "vm driver: cannot restore persisted sandbox TLS configuration" |
| 1239 | ); |
| 1240 | return; |
| 1241 | } |
| 1242 | }; |
| 1243 | |
| 1244 | if let Err(err) = self.ensure_extension_state_dirs(&state_dir).await { |
| 1245 | warn!( |
| 1246 | sandbox_id = %sandbox.id, |
| 1247 | sandbox_name = %sandbox.name, |
| 1248 | state_dir = %state_dir.display(), |
| 1249 | error = %err.message(), |
| 1250 | "vm driver: cannot restore persisted sandbox extension state" |
| 1251 | ); |
| 1252 | return; |
| 1253 | } |
| 1254 | |
| 1255 | let persisted = RestoreContext { |
| 1256 | sandbox: sandbox.clone(), |
| 1257 | state_dir: state_dir.clone(), |
| 1258 | }; |
| 1259 | if let Err(err) = self.lifecycle_extensions.before_restore(&persisted).await { |
| 1260 | warn!( |
| 1261 | sandbox_id = %sandbox.id, |
| 1262 | sandbox_name = %sandbox.name, |
| 1263 | state_dir = %state_dir.display(), |
| 1264 | error = %err, |
| 1265 | "vm driver: lifecycle extension rejected persisted sandbox restore" |
| 1266 | ); |
| 1267 | return; |
| 1268 | } |
| 1269 | |
| 1270 | let snapshot = sandbox_snapshot(&sandbox, provisioning_condition(), false); |
| 1271 | { |
| 1272 | let mut registry = self.registry.lock().await; |
| 1273 | if registry.contains_key(&sandbox.id) { |
| 1274 | return; |
| 1275 | } |
| 1276 | registry.insert( |
| 1277 | sandbox.id.clone(), |
| 1278 | SandboxRecord { |
| 1279 | snapshot: snapshot.clone(), |
no test coverage detected