diff --git a/golem-test-framework/src/dsl/mod.rs b/golem-test-framework/src/dsl/mod.rs index 74cb90f586..e6cc418e50 100644 --- a/golem-test-framework/src/dsl/mod.rs +++ b/golem-test-framework/src/dsl/mod.rs @@ -558,6 +558,29 @@ pub trait TestDsl { )) } + #[tracing::instrument(level = "info", skip(self, timeout), fields(%worker_id))] + async fn wait_for_component_revision( + &self, + worker_id: &WorkerId, + target_revision: ComponentRevision, + timeout: Duration, + ) -> anyhow::Result { + let start = Instant::now(); + while start.elapsed() < timeout { + let metadata = self.get_worker_metadata(worker_id).await?; + + if metadata.component_revision >= target_revision { + return Ok(metadata); + } + + tokio::time::sleep(Duration::from_millis(50)).await; + } + + Err(anyhow!( + "Timeout waiting for worker {worker_id} to reach component revision {target_revision}" + )) + } + async fn cancel_invocation( &self, worker_id: &WorkerId, diff --git a/golem-worker-executor/src/grpc/mod.rs b/golem-worker-executor/src/grpc/mod.rs index 146cc8949e..dfc9892e41 100644 --- a/golem-worker-executor/src/grpc/mod.rs +++ b/golem-worker-executor/src/grpc/mod.rs @@ -365,14 +365,9 @@ impl + UsesAllDeps + Send + Sync + .await?; info!("Interrupting worker before deletion"); - if let Some(mut rx) = worker + worker .set_interrupting(InterruptKind::Interrupt(Timestamp::now_utc())) - .await - { - info!("Awaiting interruption"); - let _ = rx.recv().await; - info!("Interrupted"); - } + .await; info!("Marking worker for deletion"); worker.start_deleting().await?; diff --git a/golem-worker-executor/tests/api.rs b/golem-worker-executor/tests/api.rs index c9d5314d5c..89ae5d14df 100644 --- a/golem-worker-executor/tests/api.rs +++ b/golem-worker-executor/tests/api.rs @@ -1099,6 +1099,14 @@ async fn component_env_variables_update( .auto_update_worker(&worker_id, updated_component.revision, false) .await?; + executor + .wait_for_component_revision( + &worker_id, + updated_component.revision, + Duration::from_secs(30), + ) + .await?; + let env = executor .invoke_and_await_agent(&component, &agent_id, "get_environment", data_value!()) .await?