]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[2136] Separated the updating process from the receiving process
authorNaoki Kambe <kambe@jprs.co.jp>
Wed, 1 Aug 2012 06:37:23 +0000 (15:37 +0900)
committerNaoki Kambe <kambe@jprs.co.jp>
Wed, 8 Aug 2012 12:06:29 +0000 (21:06 +0900)
In the updating process, it communicates with the cfgmgr module for updating
statistics specification of each module. This fix is for separating such mixed
communication process.

src/bin/stats/stats.py.in

index 34f255577ac2bc3a4f61a8d233f1f5ea48c14faf..4ca674f103da2b5d71b7d3c4f77fcfaa1109c418 100755 (executable)
@@ -207,6 +207,7 @@ class Stats:
                 sequences = sequences + [ (module_name, seq) \
                                               for i in range(cnt-1) ]
         # start receiving statistics data
+        _statistics_data = []
         while len(sequences) > 0:
             try:
                 (module_name, seq) = sequences.pop(0)
@@ -216,23 +217,28 @@ class Stats:
                     rcode, args = isc.config.ccsession.parse_answer(
                         answer)
                     if rcode == 0:
-                        if self.update_statistics_data(
-                            module_name, env['from'], args):
-                            logger.warn(
-                                STATS_RECEIVED_INVALID_STATISTICS_DATA,
-                                module_name)
-                        else:
-                            if self.update_statistics_data(
-                                self.module_name,
-                                self.cc_session.lname,
-                                {'last_update_time': get_datetime()}):
-                                logger.warn(
-                                    STATS_RECEIVED_INVALID_STATISTICS_DATA,
-                                    self.module_name)
+                        _statistics_data.append(
+                            (module_name, env['from'], args))
             # skip this module if SessionTimeout raised
             except isc.cc.session.SessionTimeout:
                 pass
 
+        # update statistics data
+        while len(_statistics_data) > 0:
+            (_module_name, _lname, _args) = _statistics_data.pop(0)
+            if self.update_statistics_data(_module_name, _lname, _args):
+                logger.warn(
+                STATS_RECEIVED_INVALID_STATISTICS_DATA,
+                _module_name)
+            else:
+                if self.update_statistics_data(
+                    self.module_name,
+                    self.cc_session.lname,
+                    {'last_update_time': get_datetime()}):
+                    logger.warn(
+                        STATS_RECEIVED_INVALID_STATISTICS_DATA,
+                        self.module_name)
+
     def start(self):
         """
         Start stats module