From 04d54a379b8177cc1cd79e11500017b5c0e053ec Mon Sep 17 00:00:00 2001 From: elizabeth Date: Thu, 26 Jun 2025 17:19:28 -0400 Subject: [PATCH 1/2] change default task bridge socket file to be in home dir --- crates/worker/src/cli/command.rs | 16 +++++++-- crates/worker/src/docker/taskbridge/bridge.rs | 35 +++++++++---------- examples/python/taskbridge_basic.py | 6 ++-- 3 files changed, 34 insertions(+), 23 deletions(-) diff --git a/crates/worker/src/cli/command.rs b/crates/worker/src/cli/command.rs index 7ed1b3a3..0cc56910 100644 --- a/crates/worker/src/cli/command.rs +++ b/crates/worker/src/cli/command.rs @@ -422,7 +422,7 @@ pub async fn execute_command( .expect("Hardware check should have populated compute_specs") .storage_path .clone(); - let task_bridge = TaskBridge::new( + let task_bridge = match TaskBridge::new( None, metrics_store, Some(bridge_contracts), @@ -430,7 +430,13 @@ pub async fn execute_command( Some(bridge_wallet), docker_storage_path.clone(), state.clone(), - ); + ) { + Ok(bridge) => bridge, + Err(e) => { + error!("❌ Failed to create Task Bridge: {e}"); + std::process::exit(1); + } + }; let system_memory = node_config .compute_specs @@ -445,7 +451,11 @@ pub async fn execute_command( cancellation_token.clone(), gpu, system_memory, - task_bridge.socket_path.clone(), + task_bridge + .socket_path + .to_str() + .expect("path is valid utf-8 string") + .to_string(), docker_storage_path, node_wallet_instance .wallet diff --git a/crates/worker/src/docker/taskbridge/bridge.rs b/crates/worker/src/docker/taskbridge/bridge.rs index 29ea51e8..f6b07808 100644 --- a/crates/worker/src/docker/taskbridge/bridge.rs +++ b/crates/worker/src/docker/taskbridge/bridge.rs @@ -16,12 +16,10 @@ use std::{fs, path::Path}; use tokio::io::AsyncReadExt; use tokio::{io::BufReader, net::UnixListener}; -pub const SOCKET_NAME: &str = "metrics.sock"; -const DEFAULT_MACOS_SOCKET: &str = "/tmp/com.prime.worker/"; -const DEFAULT_LINUX_SOCKET: &str = "/tmp/com.prime.worker/"; +const DEFAULT_SOCKET_FILE: &str = "prime-worker/com.prime.worker/metrics.sock"; pub struct TaskBridge { - pub socket_path: String, + pub socket_path: std::path::PathBuf, pub metrics_store: Arc, pub contracts: Option>, pub node_config: Option, @@ -47,19 +45,20 @@ impl TaskBridge { node_wallet: Option, docker_storage_path: String, state: Arc, - ) -> Arc { + ) -> Result> { let path = match socket_path { - Some(path) => path.to_string(), + Some(path) => { + let path = std::path::PathBuf::from(path); + path + } None => { - if cfg!(target_os = "macos") { - format!("{DEFAULT_MACOS_SOCKET}{SOCKET_NAME}") - } else { - format!("{DEFAULT_LINUX_SOCKET}{SOCKET_NAME}") - } + let path = + std::env::home_dir().ok_or(anyhow::anyhow!("failed to get home directory"))?; + path.join(DEFAULT_SOCKET_FILE) } }; - Arc::new(Self { + Ok(Arc::new(Self { socket_path: path, metrics_store, contracts, @@ -67,7 +66,7 @@ impl TaskBridge { node_wallet, docker_storage_path, state, - }) + })) } async fn handle_metric(self: Arc, input: &MetricInput) -> Result<()> { @@ -357,7 +356,7 @@ mod tests { None, "test_storage_path".to_string(), state, - ); + ).unwrap(); // Run the bridge in background let bridge_handle = tokio::spawn(async move { bridge.run().await }); @@ -388,7 +387,7 @@ mod tests { None, "test_storage_path".to_string(), state, - ); + ).unwrap(); // Run bridge in background let bridge_handle = tokio::spawn(async move { bridge.run().await }); @@ -421,7 +420,7 @@ mod tests { None, "test_storage_path".to_string(), state, - ); + ).unwrap(); let bridge_handle = tokio::spawn(async move { bridge.run().await }); @@ -468,7 +467,7 @@ mod tests { None, "test_storage_path".to_string(), state, - ); + ).unwrap(); let bridge_handle = tokio::spawn(async move { bridge.run().await }); @@ -515,7 +514,7 @@ mod tests { None, "test_storage_path".to_string(), state, - ); + ).unwrap(); let bridge_handle = tokio::spawn(async move { bridge.run().await }); diff --git a/examples/python/taskbridge_basic.py b/examples/python/taskbridge_basic.py index 243ee820..ce9a0e44 100644 --- a/examples/python/taskbridge_basic.py +++ b/examples/python/taskbridge_basic.py @@ -4,10 +4,12 @@ import os import threading import platform +from pathlib import Path def get_default_socket_path(): """Returns the default socket path based on the operating system.""" - return "/tmp/com.prime.worker/metrics.sock" if platform.system() == "Darwin" else "/var/run/com.prime.worker/metrics.sock" + home = Path.home() + return str(home) + "/prime-worker/com.prime.worker/metrics.sock" def send_message(metrics, task_id=None): """Sends a message to the socket.""" @@ -88,4 +90,4 @@ def send_file_info(): for thread in threads: thread.join() - print("All messages sent!") \ No newline at end of file + print("All messages sent!") From d3de756568e3977df4fafb01c45e3aad60618887 Mon Sep 17 00:00:00 2001 From: elizabeth Date: Thu, 26 Jun 2025 17:43:57 -0400 Subject: [PATCH 2/2] clippy --- Cargo.lock | 66 +++++++++++++++++++ crates/worker/Cargo.toml | 1 + crates/worker/src/docker/taskbridge/bridge.rs | 22 ++++--- 3 files changed, 79 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cf744647..fbb76257 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3275,6 +3275,18 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "homedir" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bdbbd5bc8c5749697ccaa352fa45aff8730cf21c68029c0eef1ffed7c3d6ba2" +dependencies = [ + "cfg-if", + "nix 0.29.0", + "widestring", + "windows 0.57.0", +] + [[package]] name = "hostname-validator" version = "1.1.1" @@ -8053,6 +8065,16 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" +dependencies = [ + "windows-core 0.57.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows" version = "0.58.0" @@ -8082,6 +8104,18 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-core" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" +dependencies = [ + "windows-implement 0.57.0", + "windows-interface 0.57.0", + "windows-result 0.1.2", + "windows-targets 0.52.6", +] + [[package]] name = "windows-core" version = "0.58.0" @@ -8121,6 +8155,17 @@ dependencies = [ "windows-strings 0.4.0", ] +[[package]] +name = "windows-implement" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "windows-implement" version = "0.58.0" @@ -8154,6 +8199,17 @@ dependencies = [ "syn 2.0.101", ] +[[package]] +name = "windows-interface" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "windows-interface" version = "0.58.0" @@ -8193,6 +8249,15 @@ dependencies = [ "windows-targets 0.53.0", ] +[[package]] +name = "windows-result" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-result" version = "0.2.0" @@ -8515,6 +8580,7 @@ dependencies = [ "futures-core", "futures-util", "hex", + "homedir", "indicatif", "iroh", "lazy_static", diff --git a/crates/worker/Cargo.toml b/crates/worker/Cargo.toml index 2d2c8b44..506afc4c 100644 --- a/crates/worker/Cargo.toml +++ b/crates/worker/Cargo.toml @@ -55,3 +55,4 @@ iroh = { workspace = true } rand_v8 = { workspace = true } rand_core_v6 = { workspace = true } dashmap = "6.1.0" +homedir = "0.3" diff --git a/crates/worker/src/docker/taskbridge/bridge.rs b/crates/worker/src/docker/taskbridge/bridge.rs index f6b07808..adfe0508 100644 --- a/crates/worker/src/docker/taskbridge/bridge.rs +++ b/crates/worker/src/docker/taskbridge/bridge.rs @@ -47,13 +47,10 @@ impl TaskBridge { state: Arc, ) -> Result> { let path = match socket_path { - Some(path) => { - let path = std::path::PathBuf::from(path); - path - } + Some(path) => std::path::PathBuf::from(path), None => { let path = - std::env::home_dir().ok_or(anyhow::anyhow!("failed to get home directory"))?; + homedir::my_home()?.ok_or(anyhow::anyhow!("failed to get home directory"))?; path.join(DEFAULT_SOCKET_FILE) } }; @@ -356,7 +353,8 @@ mod tests { None, "test_storage_path".to_string(), state, - ).unwrap(); + ) + .unwrap(); // Run the bridge in background let bridge_handle = tokio::spawn(async move { bridge.run().await }); @@ -387,7 +385,8 @@ mod tests { None, "test_storage_path".to_string(), state, - ).unwrap(); + ) + .unwrap(); // Run bridge in background let bridge_handle = tokio::spawn(async move { bridge.run().await }); @@ -420,7 +419,8 @@ mod tests { None, "test_storage_path".to_string(), state, - ).unwrap(); + ) + .unwrap(); let bridge_handle = tokio::spawn(async move { bridge.run().await }); @@ -467,7 +467,8 @@ mod tests { None, "test_storage_path".to_string(), state, - ).unwrap(); + ) + .unwrap(); let bridge_handle = tokio::spawn(async move { bridge.run().await }); @@ -514,7 +515,8 @@ mod tests { None, "test_storage_path".to_string(), state, - ).unwrap(); + ) + .unwrap(); let bridge_handle = tokio::spawn(async move { bridge.run().await });