diff --git a/SOURCES/0003-Use-thread.join-timeout-to-avoid-busy-waiting-and-si.patch b/SOURCES/0003-Use-thread.join-timeout-to-avoid-busy-waiting-and-si.patch new file mode 100644 index 0000000..e62969b --- /dev/null +++ b/SOURCES/0003-Use-thread.join-timeout-to-avoid-busy-waiting-and-si.patch @@ -0,0 +1,41 @@ +From 90efeb281ee1f78f6ac1d83b659397f4ec82c1c6 Mon Sep 17 00:00:00 2001 +From: Derek Horton +Date: Fri, 5 Aug 2022 15:02:37 -0500 +Subject: [PATCH] Use thread.join(timeout) to avoid busy waiting and simplify + interval event posting logic + +Resolves: rhbz#2104199 + +(cherry picked from commit 478930cca7a8d4acf21aef0715e42052315cb24e) +--- + rhc_worker_playbook/server.py | 12 +++--------- + 1 file changed, 3 insertions(+), 9 deletions(-) + +diff --git a/rhc_worker_playbook/server.py b/rhc_worker_playbook/server.py +index 8e9826f..e41482d 100644 +--- a/rhc_worker_playbook/server.py ++++ b/rhc_worker_playbook/server.py +@@ -231,20 +231,14 @@ class WorkerService(yggdrasil_pb2_grpc.WorkerServicer): + artifact_dir=RUNNER_ARTIFACTS_DIR, + rotate_artifacts=RUNNER_ROTATE_ARTIFACTS) + +- # initialize elapsed counter +- elapsedTime = 0 +- startTime = time.time() ++ # wait for the thread to finish + while runnerThread.is_alive(): +- time.sleep(1) +- elapsedTime = time.time() - startTime +- if elapsedTime >= response_interval: ++ runnerThread.join(response_interval) ++ if runnerThread.is_alive(): + # hit the interval, post events + _log("Hit the response interval. Posting current status...") + returnedEvents = _composeDispatcherMessage(events, return_url, response_to) + response = self.dispatcher.Send(returnedEvents) +- # reset interval timer +- elapsedTime = 0 +- startTime = time.time() + + if runner.status == 'failed': + # last event sould be the failure, find the reason diff --git a/SPECS/rhc-worker-playbook.spec b/SPECS/rhc-worker-playbook.spec index 7091899..e10a928 100644 --- a/SPECS/rhc-worker-playbook.spec +++ b/SPECS/rhc-worker-playbook.spec @@ -5,7 +5,7 @@ Name: rhc-worker-playbook Summary: Red Hat connect worker for launching Ansible Runner Version: 0.1.8 -Release: 3%{?dist} +Release: 4%{?dist} License: GPLv2+ Source: rhc-worker-playbook-0.1.8.tar.gz Source1: https://github.com/ansible-collections/community.general/archive/%{community_general_version}/ansible-collection-community-general-%{community_general_version}.tar.gz @@ -16,6 +16,7 @@ Source2: https://github.com/ansible-collections/ansible.posix/archive/%{ansib # patches_base=8ddc5ccfc97290a021b4c4de673b92fedc38cbfb Patch0001: 0001-fix-Execute-playbook-asynchronously.patch Patch0002: 0002-Do-not-busy-wait-when-playbook-is-running.patch +Patch0003: 0003-Use-thread.join-timeout-to-avoid-busy-waiting-and-si.patch ExclusiveArch: %{go_arches} @@ -41,6 +42,7 @@ Python-based worker for Red Hat connect, used to launch Ansible playbooks via An %patch0001 -p1 %patch0002 -p1 +%patch0003 -p1 pushd community.general-%{community_general_version} rm -vr .github .azure-pipelines @@ -108,6 +110,9 @@ mkdir -p %{buildroot}%{_localstatedir}/log/rhc-worker-playbook/ansible %doc %changelog +* Thu Oct 20 2022 Gael Chamoulaud 0.1.8-4 +- Use thread.join(timeout) to avoid busy waiting and simplify interval event posting logic (rhbz#2104199) + * Fri Aug 05 2022 Gael Chamoulaud 0.1.8-3 - Do not busy-wait when playbook is running (rhbz#2104199)