mirror of
https://github.com/uqbar-dao/nectar.git
synced 2024-12-23 08:32:23 +03:00
fix spawn
This commit is contained in:
parent
b888191fb1
commit
afb4e50095
@ -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 {
|
||||||
|
Loading…
Reference in New Issue
Block a user