From: JINMEI Tatuya Date: Wed, 20 Feb 2013 00:14:05 +0000 (-0800) Subject: [2689] eliminate the need for threads from update_statistics_data_pt2 X-Git-Tag: bind10-1.1.0beta1-release~76^2~9 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c8aea8a73e16028bb07d51caafe5bf8188d0ee14;p=thirdparty%2Fkea.git [2689] eliminate the need for threads from update_statistics_data_pt2 also fixed bugs in the main code; the previous one can cause unintentional key error because it - makes copy - updates the copy - refers to the original based on the assumption of updated data --- diff --git a/src/bin/stats/stats.py.in b/src/bin/stats/stats.py.in index a42242d369..bf3d33a9cb 100755 --- a/src/bin/stats/stats.py.in +++ b/src/bin/stats/stats.py.in @@ -268,8 +268,7 @@ class Stats: # examining the third value from the array result of # 'show_processes' of Init seq = self.cc_session.group_sendmsg( - isc.config.ccsession.create_command("show_processes"), - 'Init') + isc.config.ccsession.create_command("show_processes"), 'Init') (answer, env) = self.cc_session.group_recvmsg(False, seq) modules = [] if answer: @@ -550,8 +549,7 @@ class Stats: # merge recursively old value and new # value each other _data[owner][mid] = \ - merge_oldnew(_data[owner][mid], - {_key: _val}) + merge_oldnew(_data[owner][mid], {_key: _val}) continue # the key string might be a "xx/yy/zz[0]" # type. try it. @@ -561,9 +559,9 @@ class Stats: if errors: errors.pop() # try updata and check validation in adavance __data = _data.copy() - if owner not in _data: + if owner not in __data: __data[owner] = {} - if mid not in _data[owner]: + if mid not in __data[owner]: __data[owner][mid] = {} # use the isc.cc.data.set method try: @@ -572,10 +570,9 @@ class Stats: False, __data[owner][mid], errors): _data = __data except Exception as e: - errors.append( - "%s: %s" % (e.__class__.__name__, e)) + errors.append("%s: %s" % (e.__class__.__name__, e)) except KeyError: - errors.append("unknown module name: " + str(owner)) + errors.append("unknown module name: " + owner) if not errors: self.statistics_data_bymid = _data @@ -598,8 +595,7 @@ class Stats: # values are not replaced. self.statistics_data[m] = merge_oldnew( self.statistics_data[m], - _accum_bymodule( - self.statistics_data_bymid[m])) + _accum_bymodule(self.statistics_data_bymid[m])) if errors: return errors diff --git a/src/bin/stats/tests/b10-stats_test.py b/src/bin/stats/tests/b10-stats_test.py index 7906461910..072cf74146 100644 --- a/src/bin/stats/tests/b10-stats_test.py +++ b/src/bin/stats/tests/b10-stats_test.py @@ -624,42 +624,20 @@ class TestStats(unittest.TestCase): def test_update_statistics_data_pt2(self): """test for named_set-type statistics""" - self.stats = stats.Stats() - self.stats.do_polling() - _test_exp1 = { - 'test10.example': { - 'queries.tcp': 5, - 'queries.udp': 4 - } - } - _test_exp2 = { - 'test20.example': { - 'queries.tcp': 3, - 'queries.udp': 2 - } - } + self.stats = SimpleStats() + _test_exp1 = \ + { 'test10.example': { 'queries.tcp': 5, 'queries.udp': 4 } } + _test_exp2 = \ + { 'test20.example': { 'queries.tcp': 3, 'queries.udp': 2 } } _test_exp3 = {} - _test_exp4 = { - 'test20.example': { - 'queries.udp': 4 - } - } - _test_exp5_1 = { - 'test10.example': { - 'queries.udp': 5432 - } - } + _test_exp4 = { 'test20.example': { 'queries.udp': 4 } } + _test_exp5_1 = { 'test10.example': { 'queries.udp': 5432 } } _test_exp5_2 ={ 'nds_queries.perzone/test10.example/queries.udp': - isc.cc.data.find(_test_exp5_1, - 'test10.example/queries.udp') - } - _test_exp6 = { - 'foo/bar': 'brabra' - } - _test_exp7 = { - 'foo[100]': 'bar' + isc.cc.data.find(_test_exp5_1, 'test10.example/queries.udp') } + _test_exp6 = { 'foo/bar': 'brabra' } + _test_exp7 = { 'foo[100]': 'bar' } # Success cases self.assertIsNone(self.stats.update_statistics_data( 'Auth', 'foo1', {'nds_queries.perzone': _test_exp1})) @@ -672,13 +650,15 @@ class TestStats(unittest.TestCase): ['foo1']['nds_queries.perzone'],\ dict(_test_exp1,**_test_exp2)) self.assertIsNone(self.stats.update_statistics_data( - 'Auth', 'foo1', {'nds_queries.perzone': dict(_test_exp1,**_test_exp2)})) + 'Auth', 'foo1', {'nds_queries.perzone': + dict(_test_exp1, **_test_exp2)})) self.assertEqual(self.stats.statistics_data_bymid['Auth']\ ['foo1']['nds_queries.perzone'], - dict(_test_exp1,**_test_exp2)) + dict(_test_exp1, **_test_exp2)) # differential update self.assertIsNone(self.stats.update_statistics_data( - 'Auth', 'foo1', {'nds_queries.perzone': dict(_test_exp3,**_test_exp4)})) + 'Auth', 'foo1', {'nds_queries.perzone': + dict(_test_exp3, **_test_exp4)})) _new_val = dict(_test_exp1, **stats.merge_oldnew(_test_exp2,_test_exp4)) self.assertEqual(self.stats.statistics_data_bymid['Auth']\ @@ -698,7 +678,8 @@ class TestStats(unittest.TestCase): _test_exp5_1) # Error cases self.assertEqual(self.stats.update_statistics_data( - 'Auth', 'foo1', {'nds_queries.perzone': None}), ['None should be a map']) + 'Auth', 'foo1', {'nds_queries.perzone': None}), + ['None should be a map']) self.assertEqual(self.stats.statistics_data_bymid['Auth']\ ['foo1']['nds_queries.perzone'],\ _new_val)