]> xenbits.xensource.com Git - osstest/openstack-nova.git/commitdiff
Set 'last_checked' flag if start to check scheduler file
authorhuangtianhua <huangtianhua@huawei.com>
Tue, 19 Jul 2016 09:55:59 +0000 (17:55 +0800)
committerJohn Garbutt <john@johngarbutt.com>
Fri, 21 Oct 2016 10:29:21 +0000 (10:29 +0000)
Set 'last_checked' to make sure won't get scheduler json
configuration too fast.

Closes-Bug: #1625882
Change-Id: I97acefeacce7a8508d1eb9cb3205367a14be8d86

nova/scheduler/scheduler_options.py
nova/tests/unit/scheduler/test_scheduler_options.py

index a2ce218ea9f63f896418878713d1a1572b13d0a9..c31f9a5ae62f9d433418f9da9d5ffd49c1249da8 100644 (file)
@@ -87,9 +87,15 @@ class SchedulerOptions(object):
             if now - self.last_checked < datetime.timedelta(minutes=5):
                 return self.data
 
+        self.last_checked = self._get_time_now()
+        LOG.debug('Start to check scheduler configuration file at: %s',
+                  self.last_checked)
+
         last_modified = self._get_file_timestamp(filename)
         if (not last_modified or not self.last_modified or
                 last_modified > self.last_modified):
+            LOG.debug('Start to load scheduler configuration file which'
+                      'modified at: %s', last_modified)
             self.data = self._load_file(self._get_file_handle(filename))
             self.last_modified = last_modified
         if not self.data:
index 8da46f23093d22e1fc5530e96bde3dd2fbf7154f..6f98713fa8d5ed886070e48ecd143723a7b4d02e 100644 (file)
@@ -64,9 +64,11 @@ class SchedulerOptionsTestCase(test.NoDBTestCase):
         jdata = jsonutils.dumps(data)
 
         fake = FakeSchedulerOptions(last_checked, now, file_old, file_now,
-                                                                  {}, jdata)
+                                    {}, jdata)
+        self.assertIsNone(fake.last_checked)
         self.assertEqual({}, fake.get_configuration())
         self.assertFalse(fake.file_was_loaded)
+        self.assertIsNone(fake.last_checked)
 
     def test_get_configuration_first_time_empty_file(self):
         last_checked = None
@@ -77,9 +79,12 @@ class SchedulerOptionsTestCase(test.NoDBTestCase):
         jdata = ""
 
         fake = FakeSchedulerOptions(last_checked, now, file_old, file_now,
-                                                                  {}, jdata)
+                                    {}, jdata)
+
+        self.assertIsNone(fake.last_checked)
         self.assertEqual({}, fake.get_configuration('foo.json'))
         self.assertTrue(fake.file_was_loaded)
+        self.assertEqual(now, fake.last_checked)
 
     def test_get_configuration_first_time_happy_day(self):
         last_checked = None
@@ -91,9 +96,11 @@ class SchedulerOptionsTestCase(test.NoDBTestCase):
         jdata = jsonutils.dumps(data)
 
         fake = FakeSchedulerOptions(last_checked, now, file_old, file_now,
-                                                                  {}, jdata)
+                                    {}, jdata)
+        self.assertIsNone(fake.last_checked)
         self.assertEqual(data, fake.get_configuration('foo.json'))
         self.assertTrue(fake.file_was_loaded)
+        self.assertEqual(now, fake.last_checked)
 
     def test_get_configuration_second_time_no_change(self):
         last_checked = datetime.datetime(2011, 1, 1, 1, 1, 1)
@@ -105,24 +112,38 @@ class SchedulerOptionsTestCase(test.NoDBTestCase):
         jdata = jsonutils.dumps(data)
 
         fake = FakeSchedulerOptions(last_checked, now, file_old, file_now,
-                                                                 data, jdata)
+                                    data, jdata)
+
+        self.assertEqual(last_checked, fake.last_checked)
         self.assertEqual(data, fake.get_configuration('foo.json'))
         self.assertFalse(fake.file_was_loaded)
+        self.assertEqual(now, fake.last_checked)
 
     def test_get_configuration_second_time_too_fast(self):
-        last_checked = datetime.datetime(2011, 1, 1, 1, 1, 1)
-        now = datetime.datetime(2011, 1, 1, 1, 1, 2)
+        # first check
+        last_checked = None
+        fisrt_now = datetime.datetime(2013, 1, 1, 1, 1, 2)
         file_old = datetime.datetime(2012, 1, 1, 1, 1, 1)
         file_now = datetime.datetime(2013, 1, 1, 1, 1, 1)
-
         old_data = dict(a=1, b=2, c=3)
         data = dict(a=11, b=12, c=13)
         jdata = jsonutils.dumps(data)
+        fake = FakeSchedulerOptions(last_checked, fisrt_now, file_old,
+                                    file_now, old_data, jdata)
+        self.assertIsNone(fake.last_checked)
+        self.assertEqual(data, fake.get_configuration('foo.json'))
+        self.assertTrue(fake.file_was_loaded)
+        self.assertEqual(fisrt_now, fake.last_checked)
 
-        fake = FakeSchedulerOptions(last_checked, now, file_old, file_now,
-                                                            old_data, jdata)
-        self.assertEqual(old_data, fake.get_configuration('foo.json'))
+        # second time too fast, so won't check/load again
+        sec_now = datetime.datetime(2013, 1, 1, 1, 1, 3)
+        fake.file_was_loaded = False
+        fake._time_now = sec_now
+        fake._file_data = dict(a=21, b=22, c=23)
+
+        self.assertEqual(data, fake.get_configuration('foo.json'))
         self.assertFalse(fake.file_was_loaded)
+        self.assertEqual(fisrt_now, fake.last_checked)
 
     def test_get_configuration_second_time_change(self):
         last_checked = datetime.datetime(2011, 1, 1, 1, 1, 1)
@@ -135,6 +156,8 @@ class SchedulerOptionsTestCase(test.NoDBTestCase):
         jdata = jsonutils.dumps(data)
 
         fake = FakeSchedulerOptions(last_checked, now, file_old, file_now,
-                                                            old_data, jdata)
+                                    old_data, jdata)
+        self.assertEqual(last_checked, fake.last_checked)
         self.assertEqual(data, fake.get_configuration('foo.json'))
         self.assertTrue(fake.file_was_loaded)
+        self.assertEqual(now, fake.last_checked)