From 205fe94b87738193d8647b96ad87c07d0b3473de Mon Sep 17 00:00:00 2001 From: Oleksii Chuprykov Date: Wed, 8 Jul 2015 07:17:08 -0400 Subject: [PATCH] Wait until child process will be killed It might take a wile to kill worker after receiving of sighup because of worker can be busy at the time, so the check of the workers count can be failed during some amount of time. Add timeout for checking. Change-Id: Ibdd29b07960b2f765b03ea9458b6e85cd6786fd0 Closes-bug: #1472531 --- heat_integrationtests/common/config.py | 4 ++++ .../functional/test_reload_on_sighup.py | 17 +++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/heat_integrationtests/common/config.py b/heat_integrationtests/common/config.py index 4f6ea3df71..0de6480457 100644 --- a/heat_integrationtests/common/config.py +++ b/heat_integrationtests/common/config.py @@ -109,6 +109,10 @@ IntegrationTestGroup = [ default=120, help="Timeout in seconds to wait for connectivity to " "server."), + cfg.IntOpt('sighup_timeout', + default=30, + help="Timeout in seconds to wait for adding or removing child" + "process after receiving of sighup signal") ] diff --git a/heat_integrationtests/functional/test_reload_on_sighup.py b/heat_integrationtests/functional/test_reload_on_sighup.py index f987882c01..f149a581d4 100644 --- a/heat_integrationtests/functional/test_reload_on_sighup.py +++ b/heat_integrationtests/functional/test_reload_on_sighup.py @@ -10,6 +10,8 @@ # License for the specific language governing permissions and limitations # under the License. +import time + import eventlet from oslo_concurrency import processutils @@ -67,11 +69,18 @@ class ReloadOnSighupTest(test.HeatIntegrationTest): self._set_config_value(service, 'workers', new_workers) cmd = "kill -HUP %s" % pre_reload_parent processutils.execute(cmd, shell=True) - # wait till heat-api reloads - eventlet.sleep(2) - post_reload_parent, post_reload_children = self._get_heat_api_pids( - service) + # wait till heat-api reloads + start_time = time.time() + while time.time() - start_time < self.conf.sighup_timeout: + post_reload_parent, post_reload_children = self._get_heat_api_pids( + service) + intersect = set(post_reload_children) & set(pre_reload_children) + if (new_workers == len(post_reload_children) + and pre_reload_parent == post_reload_parent + and intersect == set()): + break + eventlet.sleep(1) self.assertEqual(pre_reload_parent, post_reload_parent) self.assertEqual(new_workers, len(post_reload_children)) # test if all child processes are newly created