From ddfe307ecade81835ce22cb5ff4c9fc089eb68a4 Mon Sep 17 00:00:00 2001 From: Daniel Vigovszky Date: Thu, 30 Jan 2025 16:36:57 +0100 Subject: [PATCH] Timeout, updated test-r, external epoch loop --- Cargo.lock | 12 ++++---- Cargo.toml | 2 +- golem-worker-executor-base/src/lib.rs | 30 +++++++++---------- .../tests/guest_languages2.rs | 3 +- 4 files changed, 23 insertions(+), 24 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index dac686ef7..bb1294392 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9554,9 +9554,9 @@ dependencies = [ [[package]] name = "test-r" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d8cb299f722f145e6379e79c8c406f923340f28b33497c3957ef9cf9fa2b225" +checksum = "5c752de9d8ad6913f1c869438aa9a3a5ce40fa65d5c0319e77f58d3208b492dc" dependencies = [ "ctor", "test-r-core", @@ -9566,9 +9566,9 @@ dependencies = [ [[package]] name = "test-r-core" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "065e701871bdcf15c796c9c12c7806b7f67b75603f54ddcf9531f927a54919bb" +checksum = "bc0d07b4ec88b97a69cb45b6a9cfb302872f7eb1269387370ad98555454d0bbd" dependencies = [ "anstream", "anstyle", @@ -9589,9 +9589,9 @@ dependencies = [ [[package]] name = "test-r-macro" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3356b06edde5f3c37f868e1113fb86347a0f4837814fe45c98d4dc778a2f2eb2" +checksum = "196317fa7e132bc12e40927b4e17f70e0379ed80505c753fd607b5936cc3cbeb" dependencies = [ "darling", "proc-macro2", diff --git a/Cargo.toml b/Cargo.toml index a9e18f52b..1acb43013 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -188,7 +188,7 @@ testcontainers-modules = { version = "0.11.4", features = [ "redis", "minio", ] } -test-r = { version = "2.0.1", default-features = true } +test-r = { version = "2.1.0", default-features = true } thiserror = "2.0.6" tokio = { version = "1.42", features = [ "macros", diff --git a/golem-worker-executor-base/src/lib.rs b/golem-worker-executor-base/src/lib.rs index d1d768341..aa31fdb2d 100644 --- a/golem-worker-executor-base/src/lib.rs +++ b/golem-worker-executor-base/src/lib.rs @@ -99,6 +99,7 @@ const VERSION: &str = golem_version!(); pub struct RunDetails { pub http_port: u16, pub grpc_port: u16, + pub epoch_thread: std::thread::JoinHandle<()>, } /// The Bootstrap trait should be implemented by all Worker Executors to customize the initialization @@ -249,12 +250,11 @@ pub trait Bootstrap { let lazy_worker_activator = Arc::new(LazyWorkerActivator::new()); - let worker_executor_impl = create_worker_executor_impl::( + let (worker_executor_impl, epoch_thread) = create_worker_executor_impl::( golem_config.clone(), self, runtime.clone(), &lazy_worker_activator, - join_set, ) .await?; @@ -272,6 +272,7 @@ pub trait Bootstrap { Ok(RunDetails { http_port, grpc_port: addr.port(), + epoch_thread, }) } } @@ -281,8 +282,7 @@ async fn create_worker_executor_impl + ?Sized> bootstrap: &A, runtime: Handle, lazy_worker_activator: &Arc>, - join_set: &mut JoinSet>, -) -> Result, anyhow::Error> { +) -> Result<(All, std::thread::JoinHandle<()>), anyhow::Error> { let (redis, sqlite, key_value_storage): ( Option, Option, @@ -473,17 +473,13 @@ async fn create_worker_executor_impl + ?Sized> let engine = Arc::new(Engine::new(&config)?); let linker = bootstrap.create_wasmtime_linker(&engine)?; - let mut epoch_interval = tokio::time::interval(golem_config.limits.epoch_interval); let engine_ref: Arc = engine.clone(); - join_set.spawn( - async move { - loop { - epoch_interval.tick().await; - engine_ref.increment_epoch(); - } - } - .in_current_span(), - ); + + let epoch_interval = golem_config.limits.epoch_interval; + let epoch_thread = std::thread::spawn(move || loop { + std::thread::sleep(epoch_interval); + engine_ref.increment_epoch(); + }); let linker = Arc::new(linker); @@ -539,7 +535,7 @@ async fn create_worker_executor_impl + ?Sized> golem_config.scheduler.refresh_interval, ); - bootstrap + let all = bootstrap .create_services( active_workers, engine, @@ -564,5 +560,7 @@ async fn create_worker_executor_impl + ?Sized> plugins, oplog_processor_plugin, ) - .await + .await?; + + Ok((all, epoch_thread)) } diff --git a/golem-worker-executor-base/tests/guest_languages2.rs b/golem-worker-executor-base/tests/guest_languages2.rs index 557bd1381..0e620ba3d 100644 --- a/golem-worker-executor-base/tests/guest_languages2.rs +++ b/golem-worker-executor-base/tests/guest_languages2.rs @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -use test_r::{inherit_test_dep, test}; +use test_r::{inherit_test_dep, test, timeout}; use crate::common::{start, TestContext}; use crate::{LastUniqueId, Tracing, WorkerExecutorTestDependencies}; @@ -28,6 +28,7 @@ inherit_test_dep!(Tracing); #[test] #[tracing::instrument] +#[timeout(180_000)] async fn javascript_example_3( last_unique_id: &LastUniqueId, deps: &WorkerExecutorTestDependencies,