From 18b14203d8b30c9792d8c819f7993961b2ec8fc5 Mon Sep 17 00:00:00 2001 From: liyingjun Date: Sat, 23 Nov 2013 22:06:19 +0800 Subject: [PATCH] Make sure report_interval is less than service_down_time If service_down_time is less than report_interval, services will routinely be considered down, because they report in too rarely. Add check for service_down_time vs report_interval, if report_interval is larger than service_down_time, automatically change service_down_time to be report_interval * 2.5 DocImpact Closes bug #1255685 Change-Id: I9b291669ea201321b03a48d2a132810f3bace2dc --- cinder/service.py | 17 +++++++++++++++++ cinder/tests/test_service.py | 6 ++++++ 2 files changed, 23 insertions(+) diff --git a/cinder/service.py b/cinder/service.py index 40a51b395..5bf5e76e1 100644 --- a/cinder/service.py +++ b/cinder/service.py @@ -540,11 +540,28 @@ class WSGIService(object): self.app = self.loader.load_app(name) self.host = getattr(CONF, '%s_listen' % name, "0.0.0.0") self.port = getattr(CONF, '%s_listen_port' % name, 0) + self.basic_config_check() self.server = wsgi.Server(name, self.app, host=self.host, port=self.port) + def basic_config_check(self): + """Perform basic config checks before starting service.""" + # Make sure report interval is less than service down time + report_interval = CONF.report_interval + if CONF.service_down_time <= report_interval: + new_service_down_time = int(report_interval * 2.5) + LOG.warn(_("Report interval must be less than service down " + "time. Current config: . Setting service_down_time to: " + "%(new_service_down_time)s") % + {'service_down_time': CONF.service_down_time, + 'report_interval': report_interval, + 'new_service_down_time': new_service_down_time}) + CONF.set_override('service_down_time', new_service_down_time) + def _get_manager(self): """Initialize a Manager object appropriate for this service. diff --git a/cinder/tests/test_service.py b/cinder/tests/test_service.py index 9b4b7d51f..c385f90d0 100644 --- a/cinder/tests/test_service.py +++ b/cinder/tests/test_service.py @@ -210,6 +210,12 @@ class TestWSGIService(test.TestCase): self.assertNotEqual(0, test_service.port) test_service.stop() + def test_service_with_min_down_time(self): + CONF.set_override('service_down_time', 10) + CONF.set_override('report_interval', 10) + service.WSGIService("test_service") + self.assertEqual(CONF.service_down_time, 25) + class TestLauncher(test.TestCase): -- 2.45.2