MCPcopy Create free account
hub / github.com/NVIDIA/OpenShell / set_supervisor_session_state

Method set_supervisor_session_state

crates/openshell-server/src/compute/mod.rs:1292–1345  ·  view source on GitHub ↗
(
        &self,
        sandbox_id: &str,
        connected: bool,
    )

Source from the content-addressed store, hash-verified

1290 }
1291
1292 async fn set_supervisor_session_state(
1293 &self,
1294 sandbox_id: &str,
1295 connected: bool,
1296 ) -> Result<(), String> {
1297 let _guard = self.sync_lock.lock().await;
1298
1299 // Use CAS to update sandbox phase based on supervisor session state
1300 let result = self
1301 .store
1302 .update_message_cas::<Sandbox, _>(sandbox_id, 0, |sandbox| {
1303 let current_phase =
1304 SandboxPhase::try_from(sandbox.phase()).unwrap_or(SandboxPhase::Unknown);
1305
1306 // Skip if sandbox is in terminal state
1307 if current_phase == SandboxPhase::Deleting || current_phase == SandboxPhase::Error {
1308 return;
1309 }
1310
1311 let sandbox_name = sandbox.object_name().to_string();
1312 if connected {
1313 ensure_supervisor_ready_status(&mut sandbox.status, &sandbox_name);
1314 sandbox.set_phase(SandboxPhase::Ready as i32);
1315 } else if current_phase == SandboxPhase::Ready {
1316 ensure_supervisor_not_ready_status(&mut sandbox.status, &sandbox_name);
1317 sandbox.set_phase(SandboxPhase::Provisioning as i32);
1318 }
1319 })
1320 .await;
1321
1322 // Handle not found gracefully (sandbox may have been deleted)
1323 let sandbox = match result {
1324 Ok(s) => s,
1325 Err(crate::persistence::PersistenceError::Database(ref msg))
1326 if msg.contains("not found") =>
1327 {
1328 return Ok(());
1329 }
1330 Err(crate::persistence::PersistenceError::Conflict {
1331 current_resource_version,
1332 }) => {
1333 return Err(format!(
1334 "concurrent modification detected (current resource_version: {})",
1335 current_resource_version
1336 .map_or_else(|| "unknown".to_string(), |v| v.to_string())
1337 ));
1338 }
1339 Err(e) => return Err(e.to_string()),
1340 };
1341
1342 self.sandbox_index.update_from_sandbox(&sandbox);
1343 self.sandbox_watch_bus.notify(sandbox_id);
1344 Ok(())
1345 }
1346
1347 async fn apply_deleted(&self, sandbox_id: &str) -> Result<(), String> {
1348 let _guard = self.sync_lock.lock().await;

Calls 7

object_nameMethod · 0.80
set_phaseMethod · 0.80
update_from_sandboxMethod · 0.80
notifyMethod · 0.80
phaseMethod · 0.45

Tested by

no test coverage detected