Set 'last_checked' flag if start to check scheduler file
Set 'last_checked' to make sure won't get scheduler json configuration too fast. Closes-Bug: #1625882 Change-Id: I97acefeacce7a8508d1eb9cb3205367a14be8d86
This commit is contained in:
parent
85868295a5
commit
95d56a89b1
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue