From 959b5c32c96c07d02d36ca8714fda59a6a964b97 Mon Sep 17 00:00:00 2001 From: Ramil_Algayev Date: Mon, 23 Dec 2024 17:39:54 +0400 Subject: [PATCH 01/13] created update functionality --- cli-mock/brain.proto | 22 +++++- cli-mock/src/main.rs | 27 ++++++- daemon-mock/Cargo.lock | 162 ++++++++++++++++++++++++++++++++++++++++ daemon-mock/Cargo.toml | 1 + daemon-mock/brain.proto | 22 +++++- daemon-mock/src/main.rs | 56 +++++++++++++- 6 files changed, 283 insertions(+), 7 deletions(-) diff --git a/cli-mock/brain.proto b/cli-mock/brain.proto index 05d8e4e..62224e3 100644 --- a/cli-mock/brain.proto +++ b/cli-mock/brain.proto @@ -40,6 +40,23 @@ message NewVMRequest { string dtrfs_sha = 14; } +message UpdateVMRequest { + string uuid = 1; + uint32 disk_size_gb = 2; + uint32 vcpus = 3; + uint32 memory_mb = 4; + string kernel_url = 5; + string kernel_sha = 6; + string dtrfs_url = 7; + string dtrfs_sha = 8; +} + +message UpdateVMResp { + string uuid = 1; + string timestamp = 2; + string error = 3; +} + message VMContract { string uuid = 1; string hostname = 2; @@ -79,6 +96,7 @@ service BrainDaemonService { rpc SendVMConfirmations (stream NewVMConfirmation) returns (Empty); rpc DeletedVMUpdates (NodePubkey) returns (stream DeletedVMUpdate); rpc ListVMContracts (ListVMContractsReq) returns (stream VMContract); + rpc UpdateVMs (NodePubkey) returns (stream UpdateVMRequest); } message NodeFilters { @@ -105,5 +123,5 @@ service BrainCliService { rpc ListVMContracts (ListVMContractsReq) returns (stream VMContract); rpc ListNodes (NodeFilters) returns (stream NodeListResp); rpc DeleteVM (DeletedVMUpdate) returns (Empty); -} - + rpc UpdateVM (UpdateVMRequest) returns (UpdateVMResp); +} \ No newline at end of file diff --git a/cli-mock/src/main.rs b/cli-mock/src/main.rs index 0e51c7f..1e73b7b 100644 --- a/cli-mock/src/main.rs +++ b/cli-mock/src/main.rs @@ -6,7 +6,7 @@ pub mod brain { use anyhow::Result; use brain::{ brain_cli_service_client::BrainCliServiceClient, DeletedVmUpdate, ListVmContractsReq, - NewVmRequest, NodeFilters, NodeListResp, VmContract, + NewVmRequest, NodeFilters, NodeListResp, VmContract, UpdateVmRequest, UpdateVmResp, }; use lazy_static::lazy_static; use log::{debug, info, warn}; @@ -135,6 +135,24 @@ async fn delete_vm(mut client: BrainCliServiceClient, uuid: &str) -> Re Ok(()) } +async fn update_vm(mut client: BrainCliServiceClient, uuid: &str) -> Result { + info!("Updatind VM {uuid}"); + let req = UpdateVmRequest { + uuid: String::new(), + vcpus: 4, + memory_mb: 4096, + disk_size_gb: 40, + kernel_url: "thisIsMyNewURL".to_string(), + kernel_sha: "thisIsMyNewSha".to_string(), + dtrfs_url: "thisIsMyNewURL".to_string(), + dtrfs_sha: "thisIsMyNewSha".to_string(), + }; + + let result = client.update_vm(req).await; + + result.map(|msg| msg.into_inner()).map_err(|e| anyhow::Error::new(e)) +} + #[tokio::main] async fn main() -> Result<()> { env_logger::builder() @@ -154,6 +172,13 @@ async fn main() -> Result<()> { } } + let contracts = list_contracts(client.clone()).await?; + for contract in contracts { + if let Err(e) = update_vm(client.clone(), &contract.uuid).await { + log::error!("Received error when updating VM {}: {e:?}", &contract.uuid); + } + } + if std::env::var("DELETE_VMS").is_err() { return Ok(()); } diff --git a/daemon-mock/Cargo.lock b/daemon-mock/Cargo.lock index 572553c..db2be90 100644 --- a/daemon-mock/Cargo.lock +++ b/daemon-mock/Cargo.lock @@ -26,6 +26,21 @@ dependencies = [ "memchr", ] +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anstream" version = "0.6.18" @@ -200,6 +215,12 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + [[package]] name = "byteorder" version = "1.5.0" @@ -212,23 +233,53 @@ version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" +[[package]] +name = "cc" +version = "1.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31a0499c1dc64f458ad13872de75c0eb7e3fdb0e67964610c914b034fc5956e" +dependencies = [ + "shlex", +] + [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-targets", +] + [[package]] name = "colorchoice" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + [[package]] name = "daemon-mock" version = "0.1.0" dependencies = [ "anyhow", + "chrono", "env_logger", "lazy_static", "log", @@ -502,6 +553,29 @@ dependencies = [ "tracing", ] +[[package]] +name = "iana-time-zone" +version = "0.1.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + [[package]] name = "indexmap" version = "1.9.3" @@ -543,6 +617,16 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +[[package]] +name = "js-sys" +version = "0.3.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + [[package]] name = "lazy_static" version = "1.5.0" @@ -611,6 +695,15 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + [[package]] name = "object" version = "0.36.7" @@ -867,6 +960,12 @@ dependencies = [ "syn", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "slab" version = "0.4.9" @@ -1127,6 +1226,69 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasm-bindgen" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" +dependencies = [ + "cfg-if", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets", +] + [[package]] name = "windows-sys" version = "0.52.0" diff --git a/daemon-mock/Cargo.toml b/daemon-mock/Cargo.toml index 955420f..938d7b0 100644 --- a/daemon-mock/Cargo.toml +++ b/daemon-mock/Cargo.toml @@ -5,6 +5,7 @@ edition = "2021" [dependencies] anyhow = "1.0.94" +chrono = "0.4.39" env_logger = "0.11.6" lazy_static = "1.5.0" log = "0.4.22" diff --git a/daemon-mock/brain.proto b/daemon-mock/brain.proto index 05d8e4e..62224e3 100644 --- a/daemon-mock/brain.proto +++ b/daemon-mock/brain.proto @@ -40,6 +40,23 @@ message NewVMRequest { string dtrfs_sha = 14; } +message UpdateVMRequest { + string uuid = 1; + uint32 disk_size_gb = 2; + uint32 vcpus = 3; + uint32 memory_mb = 4; + string kernel_url = 5; + string kernel_sha = 6; + string dtrfs_url = 7; + string dtrfs_sha = 8; +} + +message UpdateVMResp { + string uuid = 1; + string timestamp = 2; + string error = 3; +} + message VMContract { string uuid = 1; string hostname = 2; @@ -79,6 +96,7 @@ service BrainDaemonService { rpc SendVMConfirmations (stream NewVMConfirmation) returns (Empty); rpc DeletedVMUpdates (NodePubkey) returns (stream DeletedVMUpdate); rpc ListVMContracts (ListVMContractsReq) returns (stream VMContract); + rpc UpdateVMs (NodePubkey) returns (stream UpdateVMRequest); } message NodeFilters { @@ -105,5 +123,5 @@ service BrainCliService { rpc ListVMContracts (ListVMContractsReq) returns (stream VMContract); rpc ListNodes (NodeFilters) returns (stream NodeListResp); rpc DeleteVM (DeletedVMUpdate) returns (Empty); -} - + rpc UpdateVM (UpdateVMRequest) returns (UpdateVMResp); +} \ No newline at end of file diff --git a/daemon-mock/src/main.rs b/daemon-mock/src/main.rs index a07da74..d8a5914 100644 --- a/daemon-mock/src/main.rs +++ b/daemon-mock/src/main.rs @@ -6,7 +6,7 @@ pub mod brain { use anyhow::Result; use brain::{ brain_daemon_service_client::BrainDaemonServiceClient, DeletedVmUpdate, NewVmConfirmation, - NewVmRequest, NodePubkey, RegisterNodeRequest, + NewVmRequest, NodePubkey, RegisterNodeRequest, UpdateVmRequest, UpdateVmResp }; use lazy_static::lazy_static; use log::{debug, error, info, warn}; @@ -16,6 +16,7 @@ use tokio::{sync::mpsc::Receiver, sync::mpsc::Sender, task::JoinSet}; use tokio_stream::wrappers::ReceiverStream; use tokio_stream::StreamExt; use tonic::transport::Channel; +use chrono; lazy_static! { static ref SECURE_PUBLIC_KEY: String = generate_random_string(); @@ -115,6 +116,48 @@ async fn listen_for_deleted_vms( Ok(()) } +async fn listen_for_update_vm_reqs( + mut client: BrainDaemonServiceClient, + tx: Sender, +) -> Result<()> { + debug!("starting listen_for_update_vm_reqs"); + let node_pubkey = SECURE_PUBLIC_KEY.clone(); + let mut grpc_stream = client + .update_v_ms(NodePubkey { node_pubkey }) + .await? + .into_inner(); + while let Some(stream_update) = grpc_stream.next().await { + match stream_update { + Ok(req) => { + info!("Received update vm request: {req:?}"); + let _ = tx.send(req).await; + } + Err(e) => { + warn!("Brain disconnected from listen_for_update_vm_reqs: {e}"); + } + } + } + debug!("listen_for_update_vm_reqs is about to exit"); + Ok(()) +} + +async fn handle_update_vm_requests( + mut req: Receiver, + resp: Sender, +) { + info!("Started to handle update vm requests."); + while let Some(update_vm) = req.recv().await { + let response = UpdateVmResp { + uuid: update_vm.uuid.clone(), + timestamp: chrono::Utc::now().to_rfc3339(), + error: String::new(), + }; + info!("Sending UpdateVmResp: {response:?}"); + let _ = resp.send(response).await; + } + warn!("update vm request handler is ending"); +} + async fn handle_vm_requests(mut req: Receiver, resp: Sender) { info!("Started to handle vm requests. 1 out of 5 requests will return error."); let mut i = 0; @@ -178,6 +221,15 @@ async fn connect_and_run() -> Result<()> { handle_vm_requests(newvm_rx, confirm_tx).await; }); + let updatevm_client = client.clone(); + let (update_tx, update_rx) = tokio::sync::mpsc::channel(6); + streaming_tasks.spawn(listen_for_update_vm_reqs(updatevm_client, update_tx)); + + let (update_resp_tx, _) = tokio::sync::mpsc::channel(6); + tokio::spawn(async move { + handle_update_vm_requests(update_rx, update_resp_tx).await; + }); + let deletevms_client = client.clone(); let (tx, _deletevm_rx) = tokio::sync::mpsc::channel(6); streaming_tasks.spawn(listen_for_deleted_vms(deletevms_client, tx)); @@ -204,4 +256,4 @@ async fn main() { .init(); info!("Hello! My name is {}", SECURE_PUBLIC_KEY.clone()); connection_wrapper().await; -} +} \ No newline at end of file -- 2.43.0 From 5e916803b366fd79535ca170ef7fa96fde817301 Mon Sep 17 00:00:00 2001 From: Ramil_Algayev Date: Tue, 24 Dec 2024 03:21:04 +0400 Subject: [PATCH 02/13] created update functionality?? --- cli-mock/brain.proto | 15 ++++++++------- cli-mock/src/main.rs | 1 + daemon-mock/brain.proto | 15 ++++++++------- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/cli-mock/brain.proto b/cli-mock/brain.proto index 62224e3..4d93e73 100644 --- a/cli-mock/brain.proto +++ b/cli-mock/brain.proto @@ -42,13 +42,14 @@ message NewVMRequest { message UpdateVMRequest { string uuid = 1; - uint32 disk_size_gb = 2; - uint32 vcpus = 3; - uint32 memory_mb = 4; - string kernel_url = 5; - string kernel_sha = 6; - string dtrfs_url = 7; - string dtrfs_sha = 8; + string node_pubkey = 2; + uint32 disk_size_gb = 3; + uint32 vcpus = 4; + uint32 memory_mb = 5; + string kernel_url = 6; + string kernel_sha = 7; + string dtrfs_url = 8; + string dtrfs_sha = 9; } message UpdateVMResp { diff --git a/cli-mock/src/main.rs b/cli-mock/src/main.rs index 1e73b7b..cf9ec95 100644 --- a/cli-mock/src/main.rs +++ b/cli-mock/src/main.rs @@ -139,6 +139,7 @@ async fn update_vm(mut client: BrainCliServiceClient, uuid: &str) -> Re info!("Updatind VM {uuid}"); let req = UpdateVmRequest { uuid: String::new(), + node_pubkey: String::new(), vcpus: 4, memory_mb: 4096, disk_size_gb: 40, diff --git a/daemon-mock/brain.proto b/daemon-mock/brain.proto index 62224e3..4d93e73 100644 --- a/daemon-mock/brain.proto +++ b/daemon-mock/brain.proto @@ -42,13 +42,14 @@ message NewVMRequest { message UpdateVMRequest { string uuid = 1; - uint32 disk_size_gb = 2; - uint32 vcpus = 3; - uint32 memory_mb = 4; - string kernel_url = 5; - string kernel_sha = 6; - string dtrfs_url = 7; - string dtrfs_sha = 8; + string node_pubkey = 2; + uint32 disk_size_gb = 3; + uint32 vcpus = 4; + uint32 memory_mb = 5; + string kernel_url = 6; + string kernel_sha = 7; + string dtrfs_url = 8; + string dtrfs_sha = 9; } message UpdateVMResp { -- 2.43.0 From c0e5acbf241823e4ecac98ffc11f7838928475e1 Mon Sep 17 00:00:00 2001 From: Ramil_Algayev Date: Tue, 24 Dec 2024 19:07:18 +0400 Subject: [PATCH 03/13] created update functionality?? sequel --- cli-mock/brain.proto | 3 ++- cli-mock/src/main.rs | 4 ++-- daemon-mock/brain.proto | 3 ++- daemon-mock/src/main.rs | 3 ++- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/cli-mock/brain.proto b/cli-mock/brain.proto index 4d93e73..bdeb91e 100644 --- a/cli-mock/brain.proto +++ b/cli-mock/brain.proto @@ -97,7 +97,8 @@ service BrainDaemonService { rpc SendVMConfirmations (stream NewVMConfirmation) returns (Empty); rpc DeletedVMUpdates (NodePubkey) returns (stream DeletedVMUpdate); rpc ListVMContracts (ListVMContractsReq) returns (stream VMContract); - rpc UpdateVMs (NodePubkey) returns (stream UpdateVMRequest); + rpc GetUpdateVM (NodePubkey) returns (stream UpdateVMRequest); + rpc SendUpdateVM (stream UpdateVMResp) returns (Empty); } message NodeFilters { diff --git a/cli-mock/src/main.rs b/cli-mock/src/main.rs index cf9ec95..41ddfac 100644 --- a/cli-mock/src/main.rs +++ b/cli-mock/src/main.rs @@ -138,8 +138,8 @@ async fn delete_vm(mut client: BrainCliServiceClient, uuid: &str) -> Re async fn update_vm(mut client: BrainCliServiceClient, uuid: &str) -> Result { info!("Updatind VM {uuid}"); let req = UpdateVmRequest { - uuid: String::new(), - node_pubkey: String::new(), + uuid: uuid.to_string(), + node_pubkey: SECURE_PUBLIC_KEY.to_string(), vcpus: 4, memory_mb: 4096, disk_size_gb: 40, diff --git a/daemon-mock/brain.proto b/daemon-mock/brain.proto index 4d93e73..bdeb91e 100644 --- a/daemon-mock/brain.proto +++ b/daemon-mock/brain.proto @@ -97,7 +97,8 @@ service BrainDaemonService { rpc SendVMConfirmations (stream NewVMConfirmation) returns (Empty); rpc DeletedVMUpdates (NodePubkey) returns (stream DeletedVMUpdate); rpc ListVMContracts (ListVMContractsReq) returns (stream VMContract); - rpc UpdateVMs (NodePubkey) returns (stream UpdateVMRequest); + rpc GetUpdateVM (NodePubkey) returns (stream UpdateVMRequest); + rpc SendUpdateVM (stream UpdateVMResp) returns (Empty); } message NodeFilters { diff --git a/daemon-mock/src/main.rs b/daemon-mock/src/main.rs index d8a5914..379ee2e 100644 --- a/daemon-mock/src/main.rs +++ b/daemon-mock/src/main.rs @@ -123,7 +123,7 @@ async fn listen_for_update_vm_reqs( debug!("starting listen_for_update_vm_reqs"); let node_pubkey = SECURE_PUBLIC_KEY.clone(); let mut grpc_stream = client - .update_v_ms(NodePubkey { node_pubkey }) + .get_update_vm(NodePubkey { node_pubkey }) .await? .into_inner(); while let Some(stream_update) = grpc_stream.next().await { @@ -147,6 +147,7 @@ async fn handle_update_vm_requests( ) { info!("Started to handle update vm requests."); while let Some(update_vm) = req.recv().await { + info!("Updating vm: {update_vm:?}"); let response = UpdateVmResp { uuid: update_vm.uuid.clone(), timestamp: chrono::Utc::now().to_rfc3339(), -- 2.43.0 From a3740a1e1199fa628c41121fe85d568036ee1e6f Mon Sep 17 00:00:00 2001 From: Ramil_Algayev Date: Tue, 24 Dec 2024 23:29:34 +0400 Subject: [PATCH 04/13] created update functionality fr this time, I swear --- cli-mock/src/main.rs | 30 +++++++++++++++++++--------- daemon-mock/src/main.rs | 44 +++++++++++++++++++++++++++-------------- 2 files changed, 50 insertions(+), 24 deletions(-) diff --git a/cli-mock/src/main.rs b/cli-mock/src/main.rs index 41ddfac..a30efc4 100644 --- a/cli-mock/src/main.rs +++ b/cli-mock/src/main.rs @@ -6,7 +6,7 @@ pub mod brain { use anyhow::Result; use brain::{ brain_cli_service_client::BrainCliServiceClient, DeletedVmUpdate, ListVmContractsReq, - NewVmRequest, NodeFilters, NodeListResp, VmContract, UpdateVmRequest, UpdateVmResp, + NewVmRequest, NodeFilters, NodeListResp, VmContract, UpdateVmRequest, }; use lazy_static::lazy_static; use log::{debug, info, warn}; @@ -135,11 +135,13 @@ async fn delete_vm(mut client: BrainCliServiceClient, uuid: &str) -> Re Ok(()) } -async fn update_vm(mut client: BrainCliServiceClient, uuid: &str) -> Result { - info!("Updatind VM {uuid}"); +async fn update_vm_request( + mut client: BrainCliServiceClient, + node_pubkey: &str, +) -> Result<()> { let req = UpdateVmRequest { - uuid: uuid.to_string(), - node_pubkey: SECURE_PUBLIC_KEY.to_string(), + uuid: String::new(), + node_pubkey: node_pubkey.to_string(), vcpus: 4, memory_mb: 4096, disk_size_gb: 40, @@ -148,10 +150,20 @@ async fn update_vm(mut client: BrainCliServiceClient, uuid: &str) -> Re dtrfs_url: "thisIsMyNewURL".to_string(), dtrfs_sha: "thisIsMyNewSha".to_string(), }; - + info!("Creating VM {req:?}"); let result = client.update_vm(req).await; - - result.map(|msg| msg.into_inner()).map_err(|e| anyhow::Error::new(e)) + match result { + Ok(confirmation) => { + let confirmation = confirmation.into_inner(); + if confirmation.error.is_empty() { + info!("Got VM confirmation: {confirmation:?}"); + } else { + warn!("Got VM confirmation error: {}", confirmation.error); + }; + } + Err(e) => log::error!("Could not create vm: {e:?}"), + }; + Ok(()) } #[tokio::main] @@ -175,7 +187,7 @@ async fn main() -> Result<()> { let contracts = list_contracts(client.clone()).await?; for contract in contracts { - if let Err(e) = update_vm(client.clone(), &contract.uuid).await { + if let Err(e) = update_vm_request(client.clone(), &contract.uuid).await { log::error!("Received error when updating VM {}: {e:?}", &contract.uuid); } } diff --git a/daemon-mock/src/main.rs b/daemon-mock/src/main.rs index 379ee2e..3a2caad 100644 --- a/daemon-mock/src/main.rs +++ b/daemon-mock/src/main.rs @@ -125,7 +125,7 @@ async fn listen_for_update_vm_reqs( let mut grpc_stream = client .get_update_vm(NodePubkey { node_pubkey }) .await? - .into_inner(); + .into_inner(); while let Some(stream_update) = grpc_stream.next().await { match stream_update { Ok(req) => { @@ -143,20 +143,30 @@ async fn listen_for_update_vm_reqs( async fn handle_update_vm_requests( mut req: Receiver, - resp: Sender, -) { + resp: Sender + ) { info!("Started to handle update vm requests."); while let Some(update_vm) = req.recv().await { - info!("Updating vm: {update_vm:?}"); - let response = UpdateVmResp { - uuid: update_vm.uuid.clone(), + let confirmation = UpdateVmResp { + uuid: update_vm.uuid, timestamp: chrono::Utc::now().to_rfc3339(), - error: String::new(), + error: "No errors yet".to_string(), }; - info!("Sending UpdateVmResp: {response:?}"); - let _ = resp.send(response).await; - } - warn!("update vm request handler is ending"); + info!("Sending UpdateVmResp: {confirmation:?}"); + let _ = resp.send(confirmation).await; + }; + warn!("vm request handler is ending"); +} + +async fn send_confirmations_update( + mut client: BrainDaemonServiceClient, + rx: Receiver, +) -> Result<()> { + debug!("starting send_confirmations_update stream"); + let rx_stream = ReceiverStream::new(rx); + client.send_update_vm(rx_stream).await?; + debug!("send_confirmations_update is about to exit"); + Ok(()) } async fn handle_vm_requests(mut req: Receiver, resp: Sender) { @@ -223,14 +233,18 @@ async fn connect_and_run() -> Result<()> { }); let updatevm_client = client.clone(); - let (update_tx, update_rx) = tokio::sync::mpsc::channel(6); - streaming_tasks.spawn(listen_for_update_vm_reqs(updatevm_client, update_tx)); + let (tx, updatevm_rx) = tokio::sync::mpsc::channel(6); + streaming_tasks.spawn(listen_for_update_vm_reqs(updatevm_client, tx)); + + let resp_client = client.clone(); + let (resp_tx, rx) = tokio::sync::mpsc::channel(6); + streaming_tasks.spawn(send_confirmations_update(resp_client, rx)); - let (update_resp_tx, _) = tokio::sync::mpsc::channel(6); tokio::spawn(async move { - handle_update_vm_requests(update_rx, update_resp_tx).await; + handle_update_vm_requests(updatevm_rx, resp_tx).await; }); + let deletevms_client = client.clone(); let (tx, _deletevm_rx) = tokio::sync::mpsc::channel(6); streaming_tasks.spawn(listen_for_deleted_vms(deletevms_client, tx)); -- 2.43.0 From d43fdc06a188184d6162e404c0043d8405c38bb4 Mon Sep 17 00:00:00 2001 From: Ramil_Algayev Date: Wed, 25 Dec 2024 00:50:46 +0400 Subject: [PATCH 05/13] created update functionality, :P --- cli-mock/src/main.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cli-mock/src/main.rs b/cli-mock/src/main.rs index a30efc4..879fb3b 100644 --- a/cli-mock/src/main.rs +++ b/cli-mock/src/main.rs @@ -138,9 +138,10 @@ async fn delete_vm(mut client: BrainCliServiceClient, uuid: &str) -> Re async fn update_vm_request( mut client: BrainCliServiceClient, node_pubkey: &str, + uuid: &str, ) -> Result<()> { let req = UpdateVmRequest { - uuid: String::new(), + uuid: uuid.to_string(), node_pubkey: node_pubkey.to_string(), vcpus: 4, memory_mb: 4096, @@ -187,7 +188,7 @@ async fn main() -> Result<()> { let contracts = list_contracts(client.clone()).await?; for contract in contracts { - if let Err(e) = update_vm_request(client.clone(), &contract.uuid).await { + if let Err(e) = update_vm_request(client.clone(), &use_default_string(), &contract.uuid).await { log::error!("Received error when updating VM {}: {e:?}", &contract.uuid); } } -- 2.43.0 From 1d0b7157c74840375e073857c499b3adf64a0d61 Mon Sep 17 00:00:00 2001 From: Ramil_Algayev Date: Wed, 25 Dec 2024 01:51:14 +0400 Subject: [PATCH 06/13] updating logging for update --- cli-mock/src/main.rs | 8 ++++---- daemon-mock/src/main.rs | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cli-mock/src/main.rs b/cli-mock/src/main.rs index 879fb3b..27e9f83 100644 --- a/cli-mock/src/main.rs +++ b/cli-mock/src/main.rs @@ -151,18 +151,18 @@ async fn update_vm_request( dtrfs_url: "thisIsMyNewURL".to_string(), dtrfs_sha: "thisIsMyNewSha".to_string(), }; - info!("Creating VM {req:?}"); + info!("Updating VM {req:?}"); let result = client.update_vm(req).await; match result { Ok(confirmation) => { let confirmation = confirmation.into_inner(); if confirmation.error.is_empty() { - info!("Got VM confirmation: {confirmation:?}"); + info!("Got VM update confirmation: {confirmation:?}"); } else { - warn!("Got VM confirmation error: {}", confirmation.error); + warn!("Got VM update confirmation error: {}", confirmation.error); }; } - Err(e) => log::error!("Could not create vm: {e:?}"), + Err(e) => log::error!("Could not update vm: {e:?}"), }; Ok(()) } diff --git a/daemon-mock/src/main.rs b/daemon-mock/src/main.rs index 3a2caad..a9439ad 100644 --- a/daemon-mock/src/main.rs +++ b/daemon-mock/src/main.rs @@ -155,7 +155,7 @@ async fn handle_update_vm_requests( info!("Sending UpdateVmResp: {confirmation:?}"); let _ = resp.send(confirmation).await; }; - warn!("vm request handler is ending"); + warn!("update vm request handler is ending"); } async fn send_confirmations_update( -- 2.43.0 From dc8977e89b7857c701d0fc92aede1e4ec84945d2 Mon Sep 17 00:00:00 2001 From: Ramil_Algayev Date: Thu, 26 Dec 2024 00:35:25 +0400 Subject: [PATCH 07/13] this issue made me almost change my career, I need more sleep prob --- cli-mock/src/main.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/cli-mock/src/main.rs b/cli-mock/src/main.rs index 27e9f83..9acd4fe 100644 --- a/cli-mock/src/main.rs +++ b/cli-mock/src/main.rs @@ -186,10 +186,16 @@ async fn main() -> Result<()> { } } - let contracts = list_contracts(client.clone()).await?; - for contract in contracts { - if let Err(e) = update_vm_request(client.clone(), &use_default_string(), &contract.uuid).await { - log::error!("Received error when updating VM {}: {e:?}", &contract.uuid); + let nodes = get_node_list(client.clone()).await?; + for node in nodes { + let contracts = list_contracts(client.clone()).await?; + for contract in contracts { + if let Err(e) = update_vm_request(client.clone(), &node.node_pubkey, &contract.uuid).await { + log::error!( + "Received error when updating VM on node {}: {e:?}", + &node.node_pubkey + ); + } } } -- 2.43.0 From 6d8cf4f1e0eeb8a224c32530ce71478dee04c0db Mon Sep 17 00:00:00 2001 From: Ramil_Algayev Date: Thu, 26 Dec 2024 01:14:52 +0400 Subject: [PATCH 08/13] some name changes --- daemon-mock/src/main.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/daemon-mock/src/main.rs b/daemon-mock/src/main.rs index a9439ad..0c9abfa 100644 --- a/daemon-mock/src/main.rs +++ b/daemon-mock/src/main.rs @@ -55,14 +55,14 @@ async fn listen_for_new_vm_reqs( Ok(()) } -async fn send_confirmations( +async fn send_newvm_resp( mut client: BrainDaemonServiceClient, rx: Receiver, ) -> Result<()> { - debug!("starting send_confirmations stream"); + debug!("starting send_newvm_resp stream"); let rx_stream = ReceiverStream::new(rx); client.send_vm_confirmations(rx_stream).await?; - debug!("send_confirmations is about to exit"); + debug!("send_newvm_resp is about to exit"); Ok(()) } @@ -158,14 +158,14 @@ async fn handle_update_vm_requests( warn!("update vm request handler is ending"); } -async fn send_confirmations_update( +async fn send_updatevm_resp( mut client: BrainDaemonServiceClient, rx: Receiver, ) -> Result<()> { - debug!("starting send_confirmations_update stream"); + debug!("starting send_updatevm_resp stream"); let rx_stream = ReceiverStream::new(rx); client.send_update_vm(rx_stream).await?; - debug!("send_confirmations_update is about to exit"); + debug!("send_updatevm_resp is about to exit"); Ok(()) } @@ -226,7 +226,7 @@ async fn connect_and_run() -> Result<()> { let confirm_client = client.clone(); let (confirm_tx, rx) = tokio::sync::mpsc::channel(6); - streaming_tasks.spawn(send_confirmations(confirm_client, rx)); + streaming_tasks.spawn(send_newvm_resp(confirm_client, rx)); tokio::spawn(async move { handle_vm_requests(newvm_rx, confirm_tx).await; @@ -238,7 +238,7 @@ async fn connect_and_run() -> Result<()> { let resp_client = client.clone(); let (resp_tx, rx) = tokio::sync::mpsc::channel(6); - streaming_tasks.spawn(send_confirmations_update(resp_client, rx)); + streaming_tasks.spawn(send_updatevm_resp(resp_client, rx)); tokio::spawn(async move { handle_update_vm_requests(updatevm_rx, resp_tx).await; -- 2.43.0 From faeacf67ebbb1c6d171ab2df68d032ceda5d2184 Mon Sep 17 00:00:00 2001 From: Ramil_Algayev Date: Thu, 26 Dec 2024 01:17:10 +0400 Subject: [PATCH 09/13] letting brain to do the timestampping and removing chrono --- daemon-mock/Cargo.lock | 162 ---------------------------------------- daemon-mock/Cargo.toml | 1 - daemon-mock/src/main.rs | 3 +- 3 files changed, 1 insertion(+), 165 deletions(-) diff --git a/daemon-mock/Cargo.lock b/daemon-mock/Cargo.lock index db2be90..572553c 100644 --- a/daemon-mock/Cargo.lock +++ b/daemon-mock/Cargo.lock @@ -26,21 +26,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - [[package]] name = "anstream" version = "0.6.18" @@ -215,12 +200,6 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" -[[package]] -name = "bumpalo" -version = "3.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" - [[package]] name = "byteorder" version = "1.5.0" @@ -233,53 +212,23 @@ version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" -[[package]] -name = "cc" -version = "1.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31a0499c1dc64f458ad13872de75c0eb7e3fdb0e67964610c914b034fc5956e" -dependencies = [ - "shlex", -] - [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "chrono" -version = "0.4.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "js-sys", - "num-traits", - "wasm-bindgen", - "windows-targets", -] - [[package]] name = "colorchoice" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - [[package]] name = "daemon-mock" version = "0.1.0" dependencies = [ "anyhow", - "chrono", "env_logger", "lazy_static", "log", @@ -553,29 +502,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "iana-time-zone" -version = "0.1.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows-core", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - [[package]] name = "indexmap" version = "1.9.3" @@ -617,16 +543,6 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" -[[package]] -name = "js-sys" -version = "0.3.76" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" -dependencies = [ - "once_cell", - "wasm-bindgen", -] - [[package]] name = "lazy_static" version = "1.5.0" @@ -695,15 +611,6 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", -] - [[package]] name = "object" version = "0.36.7" @@ -960,12 +867,6 @@ dependencies = [ "syn", ] -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - [[package]] name = "slab" version = "0.4.9" @@ -1226,69 +1127,6 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" -[[package]] -name = "wasm-bindgen" -version = "0.2.99" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" -dependencies = [ - "cfg-if", - "once_cell", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.99" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.99" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.99" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.99" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" - -[[package]] -name = "windows-core" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" -dependencies = [ - "windows-targets", -] - [[package]] name = "windows-sys" version = "0.52.0" diff --git a/daemon-mock/Cargo.toml b/daemon-mock/Cargo.toml index 938d7b0..955420f 100644 --- a/daemon-mock/Cargo.toml +++ b/daemon-mock/Cargo.toml @@ -5,7 +5,6 @@ edition = "2021" [dependencies] anyhow = "1.0.94" -chrono = "0.4.39" env_logger = "0.11.6" lazy_static = "1.5.0" log = "0.4.22" diff --git a/daemon-mock/src/main.rs b/daemon-mock/src/main.rs index 0c9abfa..ea6eb8d 100644 --- a/daemon-mock/src/main.rs +++ b/daemon-mock/src/main.rs @@ -16,7 +16,6 @@ use tokio::{sync::mpsc::Receiver, sync::mpsc::Sender, task::JoinSet}; use tokio_stream::wrappers::ReceiverStream; use tokio_stream::StreamExt; use tonic::transport::Channel; -use chrono; lazy_static! { static ref SECURE_PUBLIC_KEY: String = generate_random_string(); @@ -149,7 +148,7 @@ async fn handle_update_vm_requests( while let Some(update_vm) = req.recv().await { let confirmation = UpdateVmResp { uuid: update_vm.uuid, - timestamp: chrono::Utc::now().to_rfc3339(), + timestamp: "brain's job".to_string(), error: "No errors yet".to_string(), }; info!("Sending UpdateVmResp: {confirmation:?}"); -- 2.43.0 From 5713152d03f9cdbdfed1e62cacf7b3b71093b00b Mon Sep 17 00:00:00 2001 From: Ramil_Algayev Date: Thu, 26 Dec 2024 01:40:09 +0400 Subject: [PATCH 10/13] updated the namings for clients --- cli-mock/brain.proto | 29 +++++++++++++++-------------- cli-mock/src/main.rs | 10 +++++----- daemon-mock/brain.proto | 29 +++++++++++++++-------------- daemon-mock/src/main.rs | 30 +++++++++++++++--------------- 4 files changed, 50 insertions(+), 48 deletions(-) diff --git a/cli-mock/brain.proto b/cli-mock/brain.proto index bdeb91e..303b390 100644 --- a/cli-mock/brain.proto +++ b/cli-mock/brain.proto @@ -8,7 +8,7 @@ message NodePubkey { string node_pubkey = 1; } -message RegisterNodeRequest { +message RegisterNodeReq { string node_pubkey = 1; string owner_pubkey = 2; string ip = 3; @@ -23,7 +23,7 @@ message RegisterNodeRequest { uint32 max_ports_per_vm = 12; } -message NewVMRequest { +message NewVMReq { string uuid = 1; // UUID is empty when CLI sends request; brain sets UUID string hostname = 2; string admin_pubkey = 3; @@ -40,7 +40,7 @@ message NewVMRequest { string dtrfs_sha = 14; } -message UpdateVMRequest { +message UpdateVMReq { string uuid = 1; string node_pubkey = 2; uint32 disk_size_gb = 3; @@ -79,7 +79,7 @@ message ListVMContractsReq { string node_pubkey = 2; } -message NewVMConfirmation { +message NewVMResp { string uuid = 1; repeated uint32 exposed_ports = 2; string public_ipv4 = 3; @@ -87,20 +87,21 @@ message NewVMConfirmation { string error = 5; } -message DeletedVMUpdate { +message DeleteVMReq { string uuid = 1; } service BrainDaemonService { - rpc RegisterNode (RegisterNodeRequest) returns (Empty); - rpc GetNewVMReqs (NodePubkey) returns (stream NewVMRequest); - rpc SendVMConfirmations (stream NewVMConfirmation) returns (Empty); - rpc DeletedVMUpdates (NodePubkey) returns (stream DeletedVMUpdate); + rpc RegisterNode (RegisterNodeReq) returns (Empty); + rpc GetNewVMReqs (NodePubkey) returns (stream NewVMReq); + rpc SendNewVMResp (stream NewVMResp) returns (Empty); + rpc GetDeleteVMReq (NodePubkey) returns (stream DeleteVMReq); rpc ListVMContracts (ListVMContractsReq) returns (stream VMContract); - rpc GetUpdateVM (NodePubkey) returns (stream UpdateVMRequest); - rpc SendUpdateVM (stream UpdateVMResp) returns (Empty); + rpc GetUpdateVMReq (NodePubkey) returns (stream UpdateVMReq); + rpc SendUpdateVMResp (stream UpdateVMResp) returns (Empty); } + message NodeFilters { uint32 free_ports = 1; bool offers_ipv4 = 2; @@ -121,9 +122,9 @@ message NodeListResp { } service BrainCliService { - rpc CreateVMContract (NewVMRequest) returns (NewVMConfirmation); + rpc CreateVMContract (NewVMReq) returns (NewVMResp); rpc ListVMContracts (ListVMContractsReq) returns (stream VMContract); rpc ListNodes (NodeFilters) returns (stream NodeListResp); - rpc DeleteVM (DeletedVMUpdate) returns (Empty); - rpc UpdateVM (UpdateVMRequest) returns (UpdateVMResp); + rpc DeleteVM (DeleteVMReq) returns (Empty); + rpc UpdateVM (UpdateVMReq) returns (UpdateVMResp); } \ No newline at end of file diff --git a/cli-mock/src/main.rs b/cli-mock/src/main.rs index 9acd4fe..31a4d54 100644 --- a/cli-mock/src/main.rs +++ b/cli-mock/src/main.rs @@ -5,8 +5,8 @@ pub mod brain { use anyhow::Result; use brain::{ - brain_cli_service_client::BrainCliServiceClient, DeletedVmUpdate, ListVmContractsReq, - NewVmRequest, NodeFilters, NodeListResp, VmContract, UpdateVmRequest, + brain_cli_service_client::BrainCliServiceClient, DeleteVmReq, ListVmContractsReq, + NewVmReq, NodeFilters, NodeListResp, VmContract, UpdateVmReq, }; use lazy_static::lazy_static; use log::{debug, info, warn}; @@ -65,7 +65,7 @@ async fn submit_vm_request( mut client: BrainCliServiceClient, node_pubkey: &str, ) -> Result<()> { - let req = NewVmRequest { + let req = NewVmReq { uuid: String::new(), admin_pubkey: SECURE_PUBLIC_KEY.clone(), node_pubkey: node_pubkey.to_string(), @@ -123,7 +123,7 @@ async fn list_contracts(mut client: BrainCliServiceClient) -> Result, uuid: &str) -> Result<()> { - let req = DeletedVmUpdate { + let req = DeleteVmReq { uuid: uuid.to_string(), }; info!("Creating VM {req:?}"); @@ -140,7 +140,7 @@ async fn update_vm_request( node_pubkey: &str, uuid: &str, ) -> Result<()> { - let req = UpdateVmRequest { + let req = UpdateVmReq { uuid: uuid.to_string(), node_pubkey: node_pubkey.to_string(), vcpus: 4, diff --git a/daemon-mock/brain.proto b/daemon-mock/brain.proto index bdeb91e..303b390 100644 --- a/daemon-mock/brain.proto +++ b/daemon-mock/brain.proto @@ -8,7 +8,7 @@ message NodePubkey { string node_pubkey = 1; } -message RegisterNodeRequest { +message RegisterNodeReq { string node_pubkey = 1; string owner_pubkey = 2; string ip = 3; @@ -23,7 +23,7 @@ message RegisterNodeRequest { uint32 max_ports_per_vm = 12; } -message NewVMRequest { +message NewVMReq { string uuid = 1; // UUID is empty when CLI sends request; brain sets UUID string hostname = 2; string admin_pubkey = 3; @@ -40,7 +40,7 @@ message NewVMRequest { string dtrfs_sha = 14; } -message UpdateVMRequest { +message UpdateVMReq { string uuid = 1; string node_pubkey = 2; uint32 disk_size_gb = 3; @@ -79,7 +79,7 @@ message ListVMContractsReq { string node_pubkey = 2; } -message NewVMConfirmation { +message NewVMResp { string uuid = 1; repeated uint32 exposed_ports = 2; string public_ipv4 = 3; @@ -87,20 +87,21 @@ message NewVMConfirmation { string error = 5; } -message DeletedVMUpdate { +message DeleteVMReq { string uuid = 1; } service BrainDaemonService { - rpc RegisterNode (RegisterNodeRequest) returns (Empty); - rpc GetNewVMReqs (NodePubkey) returns (stream NewVMRequest); - rpc SendVMConfirmations (stream NewVMConfirmation) returns (Empty); - rpc DeletedVMUpdates (NodePubkey) returns (stream DeletedVMUpdate); + rpc RegisterNode (RegisterNodeReq) returns (Empty); + rpc GetNewVMReqs (NodePubkey) returns (stream NewVMReq); + rpc SendNewVMResp (stream NewVMResp) returns (Empty); + rpc GetDeleteVMReq (NodePubkey) returns (stream DeleteVMReq); rpc ListVMContracts (ListVMContractsReq) returns (stream VMContract); - rpc GetUpdateVM (NodePubkey) returns (stream UpdateVMRequest); - rpc SendUpdateVM (stream UpdateVMResp) returns (Empty); + rpc GetUpdateVMReq (NodePubkey) returns (stream UpdateVMReq); + rpc SendUpdateVMResp (stream UpdateVMResp) returns (Empty); } + message NodeFilters { uint32 free_ports = 1; bool offers_ipv4 = 2; @@ -121,9 +122,9 @@ message NodeListResp { } service BrainCliService { - rpc CreateVMContract (NewVMRequest) returns (NewVMConfirmation); + rpc CreateVMContract (NewVMReq) returns (NewVMResp); rpc ListVMContracts (ListVMContractsReq) returns (stream VMContract); rpc ListNodes (NodeFilters) returns (stream NodeListResp); - rpc DeleteVM (DeletedVMUpdate) returns (Empty); - rpc UpdateVM (UpdateVMRequest) returns (UpdateVMResp); + rpc DeleteVM (DeleteVMReq) returns (Empty); + rpc UpdateVM (UpdateVMReq) returns (UpdateVMResp); } \ No newline at end of file diff --git a/daemon-mock/src/main.rs b/daemon-mock/src/main.rs index ea6eb8d..79f064a 100644 --- a/daemon-mock/src/main.rs +++ b/daemon-mock/src/main.rs @@ -5,8 +5,8 @@ pub mod brain { use anyhow::Result; use brain::{ - brain_daemon_service_client::BrainDaemonServiceClient, DeletedVmUpdate, NewVmConfirmation, - NewVmRequest, NodePubkey, RegisterNodeRequest, UpdateVmRequest, UpdateVmResp + brain_daemon_service_client::BrainDaemonServiceClient, DeleteVmReq, NewVmResp, + NewVmReq, NodePubkey, RegisterNodeReq, UpdateVmReq, UpdateVmResp, }; use lazy_static::lazy_static; use log::{debug, error, info, warn}; @@ -31,7 +31,7 @@ fn generate_random_string() -> String { async fn listen_for_new_vm_reqs( mut client: BrainDaemonServiceClient, - tx: Sender, + tx: Sender, ) -> Result<()> { debug!("starting listen_for_new_vm_reqs"); let node_pubkey = SECURE_PUBLIC_KEY.clone(); @@ -56,18 +56,18 @@ async fn listen_for_new_vm_reqs( async fn send_newvm_resp( mut client: BrainDaemonServiceClient, - rx: Receiver, + rx: Receiver, ) -> Result<()> { debug!("starting send_newvm_resp stream"); let rx_stream = ReceiverStream::new(rx); - client.send_vm_confirmations(rx_stream).await?; + client.send_new_vm_resp(rx_stream).await?; debug!("send_newvm_resp is about to exit"); Ok(()) } async fn register_node(mut client: BrainDaemonServiceClient) { debug!("Starting node registration..."); - let req = RegisterNodeRequest { + let req = RegisterNodeReq { node_pubkey: SECURE_PUBLIC_KEY.clone(), owner_pubkey: "IamTheOwnerOf".to_string() + &SECURE_PUBLIC_KEY, ip: "10.0.10.1".to_string(), @@ -92,12 +92,12 @@ async fn register_node(mut client: BrainDaemonServiceClient) { async fn listen_for_deleted_vms( mut client: BrainDaemonServiceClient, - tx: Sender, + tx: Sender, ) -> Result<()> { debug!("starting listen_for_new_vm_reqs"); let node_pubkey = SECURE_PUBLIC_KEY.clone(); let mut grpc_stream = client - .deleted_vm_updates(NodePubkey { node_pubkey }) + .get_delete_vm_req(NodePubkey { node_pubkey }) .await? .into_inner(); while let Some(stream_update) = grpc_stream.next().await { @@ -117,12 +117,12 @@ async fn listen_for_deleted_vms( async fn listen_for_update_vm_reqs( mut client: BrainDaemonServiceClient, - tx: Sender, + tx: Sender, ) -> Result<()> { debug!("starting listen_for_update_vm_reqs"); let node_pubkey = SECURE_PUBLIC_KEY.clone(); let mut grpc_stream = client - .get_update_vm(NodePubkey { node_pubkey }) + .get_update_vm_req(NodePubkey { node_pubkey }) .await? .into_inner(); while let Some(stream_update) = grpc_stream.next().await { @@ -141,7 +141,7 @@ async fn listen_for_update_vm_reqs( } async fn handle_update_vm_requests( - mut req: Receiver, + mut req: Receiver, resp: Sender ) { info!("Started to handle update vm requests."); @@ -163,12 +163,12 @@ async fn send_updatevm_resp( ) -> Result<()> { debug!("starting send_updatevm_resp stream"); let rx_stream = ReceiverStream::new(rx); - client.send_update_vm(rx_stream).await?; + client.send_update_vm_resp(rx_stream).await?; debug!("send_updatevm_resp is about to exit"); Ok(()) } -async fn handle_vm_requests(mut req: Receiver, resp: Sender) { +async fn handle_vm_requests(mut req: Receiver, resp: Sender) { info!("Started to handle vm requests. 1 out of 5 requests will return error."); let mut i = 0; while let Some(new_vm) = req.recv().await { @@ -185,7 +185,7 @@ async fn handle_vm_requests(mut req: Receiver, resp: Sender String::new(), }; if i != 3 { - let confirmation = NewVmConfirmation { + let confirmation = NewVmResp{ uuid: new_vm.uuid, exposed_ports, public_ipv4, @@ -195,7 +195,7 @@ async fn handle_vm_requests(mut req: Receiver, resp: Sender Date: Thu, 26 Dec 2024 01:55:37 +0400 Subject: [PATCH 11/13] updated for brain --- cli-mock/brain.proto | 4 ++-- daemon-mock/brain.proto | 4 ++-- daemon-mock/src/main.rs | 1 - 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/cli-mock/brain.proto b/cli-mock/brain.proto index 303b390..fd8662f 100644 --- a/cli-mock/brain.proto +++ b/cli-mock/brain.proto @@ -54,7 +54,6 @@ message UpdateVMReq { message UpdateVMResp { string uuid = 1; - string timestamp = 2; string error = 3; } @@ -72,6 +71,7 @@ message VMContract { string kernel_sha = 11; string dtrfs_sha = 12; string created_at = 13; + string updated_at = 14; } message ListVMContractsReq { @@ -127,4 +127,4 @@ service BrainCliService { rpc ListNodes (NodeFilters) returns (stream NodeListResp); rpc DeleteVM (DeleteVMReq) returns (Empty); rpc UpdateVM (UpdateVMReq) returns (UpdateVMResp); -} \ No newline at end of file +} diff --git a/daemon-mock/brain.proto b/daemon-mock/brain.proto index 303b390..fd8662f 100644 --- a/daemon-mock/brain.proto +++ b/daemon-mock/brain.proto @@ -54,7 +54,6 @@ message UpdateVMReq { message UpdateVMResp { string uuid = 1; - string timestamp = 2; string error = 3; } @@ -72,6 +71,7 @@ message VMContract { string kernel_sha = 11; string dtrfs_sha = 12; string created_at = 13; + string updated_at = 14; } message ListVMContractsReq { @@ -127,4 +127,4 @@ service BrainCliService { rpc ListNodes (NodeFilters) returns (stream NodeListResp); rpc DeleteVM (DeleteVMReq) returns (Empty); rpc UpdateVM (UpdateVMReq) returns (UpdateVMResp); -} \ No newline at end of file +} diff --git a/daemon-mock/src/main.rs b/daemon-mock/src/main.rs index 79f064a..6646859 100644 --- a/daemon-mock/src/main.rs +++ b/daemon-mock/src/main.rs @@ -148,7 +148,6 @@ async fn handle_update_vm_requests( while let Some(update_vm) = req.recv().await { let confirmation = UpdateVmResp { uuid: update_vm.uuid, - timestamp: "brain's job".to_string(), error: "No errors yet".to_string(), }; info!("Sending UpdateVmResp: {confirmation:?}"); -- 2.43.0 From b7c2211d32c8285d5a76c6af53c2c22f113d9592 Mon Sep 17 00:00:00 2001 From: Ramil_Algayev Date: Thu, 26 Dec 2024 02:04:13 +0400 Subject: [PATCH 12/13] very smoll tiny fix to be consistent --- daemon-mock/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daemon-mock/src/main.rs b/daemon-mock/src/main.rs index 6646859..783f4a9 100644 --- a/daemon-mock/src/main.rs +++ b/daemon-mock/src/main.rs @@ -148,7 +148,7 @@ async fn handle_update_vm_requests( while let Some(update_vm) = req.recv().await { let confirmation = UpdateVmResp { uuid: update_vm.uuid, - error: "No errors yet".to_string(), + error: "".to_string(), }; info!("Sending UpdateVmResp: {confirmation:?}"); let _ = resp.send(confirmation).await; -- 2.43.0 From eb9d8f921f218b4243d8fef91b72d14d845d9192 Mon Sep 17 00:00:00 2001 From: ghe0 Date: Thu, 26 Dec 2024 00:56:56 +0200 Subject: [PATCH 13/13] remove node_pubkey from UpdateVmReq --- cli-mock/brain.proto | 1 - cli-mock/src/main.rs | 45 ++++++++++++++++++----------------------- daemon-mock/brain.proto | 1 - daemon-mock/src/main.rs | 12 +++++------ 4 files changed, 26 insertions(+), 33 deletions(-) diff --git a/cli-mock/brain.proto b/cli-mock/brain.proto index fd8662f..9a9e84f 100644 --- a/cli-mock/brain.proto +++ b/cli-mock/brain.proto @@ -42,7 +42,6 @@ message NewVMReq { message UpdateVMReq { string uuid = 1; - string node_pubkey = 2; uint32 disk_size_gb = 3; uint32 vcpus = 4; uint32 memory_mb = 5; diff --git a/cli-mock/src/main.rs b/cli-mock/src/main.rs index 31a4d54..2b4655b 100644 --- a/cli-mock/src/main.rs +++ b/cli-mock/src/main.rs @@ -5,8 +5,8 @@ pub mod brain { use anyhow::Result; use brain::{ - brain_cli_service_client::BrainCliServiceClient, DeleteVmReq, ListVmContractsReq, - NewVmReq, NodeFilters, NodeListResp, VmContract, UpdateVmReq, + brain_cli_service_client::BrainCliServiceClient, DeleteVmReq, ListVmContractsReq, NewVmReq, + NodeFilters, NodeListResp, UpdateVmReq, VmContract, }; use lazy_static::lazy_static; use log::{debug, info, warn}; @@ -84,12 +84,12 @@ async fn submit_vm_request( info!("Creating VM {req:?}"); let result = client.create_vm_contract(req).await; match result { - Ok(confirmation) => { - let confirmation = confirmation.into_inner(); - if confirmation.error.is_empty() { - info!("Got VM confirmation: {confirmation:?}"); + Ok(resp) => { + let resp = resp.into_inner(); + if resp.error.is_empty() { + info!("Got NewVMResp: {resp:?}"); } else { - warn!("Got VM confirmation error: {}", confirmation.error); + warn!("Got new VM error: {}", resp.error); }; } Err(e) => log::error!("Could not create vm: {e:?}"), @@ -137,12 +137,10 @@ async fn delete_vm(mut client: BrainCliServiceClient, uuid: &str) -> Re async fn update_vm_request( mut client: BrainCliServiceClient, - node_pubkey: &str, - uuid: &str, + uuid: &str, ) -> Result<()> { let req = UpdateVmReq { uuid: uuid.to_string(), - node_pubkey: node_pubkey.to_string(), vcpus: 4, memory_mb: 4096, disk_size_gb: 40, @@ -154,12 +152,12 @@ async fn update_vm_request( info!("Updating VM {req:?}"); let result = client.update_vm(req).await; match result { - Ok(confirmation) => { - let confirmation = confirmation.into_inner(); - if confirmation.error.is_empty() { - info!("Got VM update confirmation: {confirmation:?}"); + Ok(resp) => { + let resp = resp.into_inner(); + if resp.error.is_empty() { + info!("Got VM update response: {resp:?}"); } else { - warn!("Got VM update confirmation error: {}", confirmation.error); + warn!("Got VM update error: {}", resp.error); }; } Err(e) => log::error!("Could not update vm: {e:?}"), @@ -186,16 +184,13 @@ async fn main() -> Result<()> { } } - let nodes = get_node_list(client.clone()).await?; - for node in nodes { - let contracts = list_contracts(client.clone()).await?; - for contract in contracts { - if let Err(e) = update_vm_request(client.clone(), &node.node_pubkey, &contract.uuid).await { - log::error!( - "Received error when updating VM on node {}: {e:?}", - &node.node_pubkey - ); - } + let contracts = list_contracts(client.clone()).await?; + for contract in contracts { + if let Err(e) = update_vm_request(client.clone(), &contract.uuid).await { + log::error!( + "Received error when updating VM on node {}: {e:?}", + &contract.node_pubkey + ); } } diff --git a/daemon-mock/brain.proto b/daemon-mock/brain.proto index fd8662f..9a9e84f 100644 --- a/daemon-mock/brain.proto +++ b/daemon-mock/brain.proto @@ -42,7 +42,6 @@ message NewVMReq { message UpdateVMReq { string uuid = 1; - string node_pubkey = 2; uint32 disk_size_gb = 3; uint32 vcpus = 4; uint32 memory_mb = 5; diff --git a/daemon-mock/src/main.rs b/daemon-mock/src/main.rs index 783f4a9..1233265 100644 --- a/daemon-mock/src/main.rs +++ b/daemon-mock/src/main.rs @@ -142,16 +142,16 @@ async fn listen_for_update_vm_reqs( async fn handle_update_vm_requests( mut req: Receiver, - resp: Sender + resp_chan: Sender ) { info!("Started to handle update vm requests."); while let Some(update_vm) = req.recv().await { - let confirmation = UpdateVmResp { + let update_vm_resp = UpdateVmResp { uuid: update_vm.uuid, error: "".to_string(), }; - info!("Sending UpdateVmResp: {confirmation:?}"); - let _ = resp.send(confirmation).await; + info!("Sending UpdateVmResp: {update_vm_resp:?}"); + let _ = resp_chan.send(update_vm_resp).await; }; warn!("update vm request handler is ending"); } @@ -180,7 +180,7 @@ async fn handle_vm_requests(mut req: Receiver, resp: Sender false => String::new(), }; let public_ipv6 = match new_vm.public_ipv6 { - true => " 2a02:2f2d:d301:3100:afe8:a85e:54a0:dd28".to_string(), + true => "2a02:2f2d:d301:3100:afe8:a85e:54a0:dd28".to_string(), false => String::new(), }; if i != 3 { @@ -269,4 +269,4 @@ async fn main() { .init(); info!("Hello! My name is {}", SECURE_PUBLIC_KEY.clone()); connection_wrapper().await; -} \ No newline at end of file +} -- 2.43.0