fix spawn

This commit is contained in:
hosted-fornet 2023-10-11 09:56:32 -07:00
parent b888191fb1
commit afb4e50095

View File

@ -336,7 +336,7 @@ impl UqProcessImports for ProcessWasi {
node: self.process.metadata.our.node.clone(), node: self.process.metadata.our.node.clone(),
process: VFS_PROCESS_ID.en_wit(), process: VFS_PROCESS_ID.en_wit(),
}; };
let hash_response = match send_and_await_response( let Ok(Ok((_, hash_response))) = send_and_await_response(
self, self,
None, None,
vfs_address.clone(), vfs_address.clone(),
@ -355,40 +355,10 @@ impl UqProcessImports for ProcessWasi {
None, None,
) )
.await .await
{ else {
Ok(Ok((_, hash_response))) => hash_response, println!("spawn: GetHash fail");
Err(e) => { return Ok(Err(wit::SpawnError::NoFileAtPath));
println!("spawn: GetHash fail {}\r", e);
return Ok(Err(wit::SpawnError::NoFileAtPath));
}
_ => {
println!("spawn: GetHash fail\r");
return Ok(Err(wit::SpawnError::NoFileAtPath));
}
}; };
// let Ok(Ok((_, hash_response))) = send_and_await_response(
// self,
// None,
// vfs_address.clone(),
// wit::Request {
// inherit: false,
// expects_response: Some(5),
// ipc: Some(
// serde_json::to_string(&t::VfsRequest {
// drive: self.process.metadata.our.process.package().to_string(),
// action: t::VfsAction::GetHash(wasm_path.clone()),
// })
// .unwrap(),
// ),
// metadata: None,
// },
// None,
// )
// .await
// else {
// println!("spawn: GetHash fail");
// return Ok(Err(wit::SpawnError::NoFileAtPath));
// };
let wit::Message::Response((wit::Response { ipc: Some(ipc), .. }, _)) = hash_response let wit::Message::Response((wit::Response { ipc: Some(ipc), .. }, _)) = hash_response
else { else {
return Ok(Err(wit::SpawnError::NoFileAtPath)); return Ok(Err(wit::SpawnError::NoFileAtPath));
@ -437,7 +407,7 @@ impl UqProcessImports for ProcessWasi {
); );
println!("spawn 2\r"); println!("spawn 2\r");
let start_response = send_and_await_response( let Ok(Ok((_, response))) = send_and_await_response(
self, self,
Some(t::Address { Some(t::Address {
node: self.process.metadata.our.node.clone(), node: self.process.metadata.our.node.clone(),
@ -460,14 +430,10 @@ impl UqProcessImports for ProcessWasi {
wit::Capabilities::None => HashSet::new(), wit::Capabilities::None => HashSet::new(),
wit::Capabilities::All => { wit::Capabilities::All => {
let (tx, rx) = tokio::sync::oneshot::channel(); let (tx, rx) = tokio::sync::oneshot::channel();
let _ = self let _ = self.process.caps_oracle.send(t::CapMessage::GetAll {
.process on: self.process.metadata.our.process.clone(),
.caps_oracle responder: tx,
.send(t::CapMessage::GetAll { }).await;
on: self.process.metadata.our.process.clone(),
responder: tx,
})
.await;
rx.await rx.await
.unwrap() .unwrap()
.into_iter() .into_iter()
@ -503,82 +469,18 @@ impl UqProcessImports for ProcessWasi {
bytes: bytes.to_vec(), bytes: bytes.to_vec(),
}), }),
) )
.await; .await
println!("spawn: {:?}", start_response); else {
// let Ok(Ok((_, response))) = send_and_await_response( return Ok(Err(wit::SpawnError::NameTaken));
// self, };
// Some(t::Address {
// node: self.process.metadata.our.node.clone(),
// process: KERNEL_PROCESS_ID.clone(),
// }),
// wit::Address {
// node: self.process.metadata.our.node.clone(),
// process: KERNEL_PROCESS_ID.en_wit(),
// },
// wit::Request {
// inherit: false,
// expects_response: Some(5), // TODO evaluate
// ipc: Some(
// serde_json::to_string(&t::KernelCommand::StartProcess {
// id: new_process_id.clone(),
// wasm_bytes_handle: hash,
// on_panic: de_wit_on_panic(on_panic),
// // TODO
// initial_capabilities: match capabilities {
// wit::Capabilities::None => HashSet::new(),
// wit::Capabilities::All => {
// let (tx, rx) = tokio::sync::oneshot::channel();
// let _ = self.process.caps_oracle.send(t::CapMessage::GetAll {
// on: self.process.metadata.our.process.clone(),
// responder: tx,
// }).await;
// rx.await
// .unwrap()
// .into_iter()
// .map(|cap| t::SignedCapability {
// issuer: cap.issuer.clone(),
// params: cap.params.clone(),
// signature: self
// .process
// .keypair
// .sign(&bincode::serialize(&cap).unwrap())
// .as_ref()
// .to_vec(),
// })
// .collect()
// }
// wit::Capabilities::Some(caps) => caps
// .into_iter()
// .map(|cap| t::SignedCapability {
// issuer: t::Address::de_wit(cap.issuer),
// params: cap.params,
// signature: cap.signature,
// })
// .collect(),
// },
// public,
// })
// .unwrap(),
// ),
// metadata: None,
// },
// Some(wit::Payload {
// mime: None,
// bytes: bytes.to_vec(),
// }),
// )
// .await
// else {
// return Ok(Err(wit::SpawnError::NameTaken));
// };
println!("spawn 3\r"); println!("spawn 3\r");
// let wit::Message::Response((wit::Response { ipc: Some(ipc), .. }, _)) = response else { let wit::Message::Response((wit::Response { ipc: Some(ipc), .. }, _)) = response else {
// return Ok(Err(wit::SpawnError::NoFileAtPath)); return Ok(Err(wit::SpawnError::NoFileAtPath));
// }; };
// let t::KernelResponse::StartedProcess = serde_json::from_str(&ipc).unwrap() else { let t::KernelResponse::StartedProcess = serde_json::from_str(&ipc).unwrap() else {
// return Ok(Err(wit::SpawnError::NoFileAtPath)); return Ok(Err(wit::SpawnError::NoFileAtPath));
// }; };
// child processes are always able to Message parent // child processes are always able to Message parent
let (tx, rx) = tokio::sync::oneshot::channel(); let (tx, rx) = tokio::sync::oneshot::channel();
@ -606,12 +508,6 @@ impl UqProcessImports for ProcessWasi {
issuer: t::Address { issuer: t::Address {
node: self.process.metadata.our.node.clone(), node: self.process.metadata.our.node.clone(),
process: new_process_id.clone(), process: new_process_id.clone(),
// process: t::ProcessId::de_wit(new_process_id),
// process: t::ProcessId::new(
// new_process_id,
// self.process.metadata.our.process.package(),
// self.process.metadata.our.process.publisher_node(),
// ),
}, },
params: "\"messaging\"".into(), params: "\"messaging\"".into(),
}, },
@ -1530,7 +1426,11 @@ async fn handle_kernel_request(
engine, engine,
caps_oracle, caps_oracle,
StartProcessMetadata { StartProcessMetadata {
source: km.source, source: if let Some(rsvp) = km.rsvp {
rsvp
} else {
km.source
},
process_id: Some(id), process_id: Some(id),
persisted: t::PersistedProcess { persisted: t::PersistedProcess {
wasm_bytes_handle, wasm_bytes_handle,
@ -1657,7 +1557,7 @@ async fn handle_kernel_request(
.await .await
.unwrap(); .unwrap();
println!("kernel GC: awaiting\r"); println!("kernel GC: awaiting\r");
let _ = rx.await; // let _ = rx.await;
println!("kernel GC: responding\r"); println!("kernel GC: responding\r");
send_to_loop send_to_loop
.send(t::KernelMessage { .send(t::KernelMessage {