except KeyError:
errors.append("unknown module name: " + str(owner))
- # If there are inactive instances, which was actually running
- # on the system before, their statistics data would be
- # removed. To find inactive instances, it invokes the
- # "show_processes" command to Boss via the cc session. Then it
- # gets active instance list and compares its PIDs with PIDs in
- # statistics data which it already has. If inactive instances
- # are found, it would remove their statistics data.
- seq = self.cc_session.group_sendmsg(
- isc.config.ccsession.create_command("show_processes", None),
- "Boss")
- (answer, env) = self.cc_session.group_recvmsg(False, seq)
- if answer:
- (rcode, value) = isc.config.ccsession.parse_answer(answer)
- if rcode == 0:
- if type(value) is list and len(value) > 0 \
- and type(value[0]) is list and len(value[0]) > 1:
- mlist = [ k for k in self.statistics_data_bypid.keys() ]
- for m in mlist:
- # PID list which it has before except for -1
- plist1 = [ p for p in self.statistics_data_bypid[m]\
- .keys() if p != -1]
- # PID list of active instances which is
- # received from Boss
- plist2 = [ v[0] for v in value \
- if v[1].lower().find(m.lower()) \
- >= 0 ]
- # get inactive instance list by the difference
- # between plist1 and plist2
- nplist = set(plist1).difference(set(plist2))
- for p in nplist:
- self.statistics_data_bypid[m].pop(p)
- if self.statistics_data_bypid[m]:
- if m in self.statistics_data:
- self.statistics_data[m].update(
- _accum_bymodule(
- self.statistics_data_bypid[m]))
- # remove statistics data of the module with no
- # PID
- else:
- self.statistics_data_bypid.pop(m)
+ # Just consolidate statistics data of each module without
+ # removing that of modules which have been already dead
+ mlist = [ k for k in self.statistics_data_bypid.keys() ]
+ for m in mlist:
+ if self.statistics_data_bypid[m]:
+ if m in self.statistics_data:
+ self.statistics_data[m].update(
+ _accum_bymodule(
+ self.statistics_data_bypid[m]))
+
if errors: return errors
def command_status(self):
self.assertEqual(self.stats.statistics_data_bypid['Auth'][9999]['queries.tcp'], 1001)
self.assertEqual(self.stats.statistics_data_bypid,
{'Auth': {9999: {'queries.tcp': 1001}}})
- # non-existent pid of Auth, but no changes in statistics data
+ # check consolidation of statistics data even if there is
+ # non-existent pid of Auth
self.stats.update_statistics_data(owner='Auth',
pid=10000,
**{'queries.tcp':2001})
self.assertTrue('Auth' in self.stats.statistics_data)
self.assertTrue('queries.tcp' in self.stats.statistics_data['Auth'])
- self.assertEqual(self.stats.statistics_data['Auth']['queries.tcp'], 1001)
+ self.assertEqual(self.stats.statistics_data['Auth']['queries.tcp'], 3002)
self.assertTrue('Auth' in self.stats.statistics_data_bypid)
self.assertTrue(9999 in self.stats.statistics_data_bypid['Auth'])
self.assertTrue('queries.tcp' in self.stats.statistics_data_bypid['Auth'][9999])
self.assertEqual(self.stats.statistics_data_bypid['Auth'][9999]['queries.tcp'], 1001)
self.assertEqual(self.stats.statistics_data_bypid,
- {'Auth': {9999: {'queries.tcp': 1001}}})
- # kill running Auth, then statistics is reset
+ {'Auth': {9999: {'queries.tcp': 1001},
+ 10000: {'queries.tcp': 2001}}})
+ # kill running Auth but the statistics data is preserved
self.assertEqual(self.base.boss.server.pid_list[0][0], 9999)
killed = self.base.boss.server.pid_list.pop(0)
self.stats.update_statistics_data()
self.assertTrue('Auth' in self.stats.statistics_data)
self.assertTrue('queries.tcp' in self.stats.statistics_data['Auth'])
self.assertTrue('queries.udp' in self.stats.statistics_data['Auth'])
- self.assertEqual(self.stats.statistics_data['Auth']['queries.tcp'], 0)
+ self.assertEqual(self.stats.statistics_data['Auth']['queries.tcp'], 3002)
self.assertEqual(self.stats.statistics_data['Auth']['queries.udp'], 0)
- self.assertFalse('Auth' in self.stats.statistics_data_bypid)
+ self.assertTrue('Auth' in self.stats.statistics_data_bypid)
# restore statistics data of killed auth
self.base.boss.server.pid_list = [ killed ] + self.base.boss.server.pid_list[:]
self.stats.update_statistics_data(owner='Auth',
self.assertTrue('Auth' in self.stats.statistics_data)
self.assertTrue('queries.tcp' in self.stats.statistics_data['Auth'])
self.assertTrue('queries.udp' in self.stats.statistics_data['Auth'])
- self.assertEqual(self.stats.statistics_data['Auth']['queries.tcp'], 2003)
+ self.assertEqual(self.stats.statistics_data['Auth']['queries.tcp'], 4004)
self.assertEqual(self.stats.statistics_data['Auth']['queries.udp'], 1003)
self.assertTrue('Auth' in self.stats.statistics_data_bypid)
self.assertTrue(9999 in self.stats.statistics_data_bypid['Auth'])
{ 'zonename': 'test2.example',
'queries.tcp': 2,
'queries.udp': 3 }])
- # non-existent pid of Auth, but no changes in statistics data
+ # check consolidation of statistics data even if there is
+ # non-existent pid of Auth
retval = isc.config.ccsession.parse_answer(
self.stats.command_set(owner='Auth',
pid=10000,
self.assertEqual(retval, (0,None))
self.assertTrue('Auth' in self.stats.statistics_data)
self.assertTrue('queries.tcp' in self.stats.statistics_data['Auth'])
- self.assertEqual(self.stats.statistics_data['Auth']['queries.tcp'], 1001)
+ self.assertEqual(self.stats.statistics_data['Auth']['queries.tcp'], 3002)
self.assertEqual(self.stats.statistics_data['Auth']['queries.perzone'],
[{ 'zonename': 'test1.example',
- 'queries.tcp': 1 },
+ 'queries.tcp': 102 },
{ 'zonename': 'test2.example',
- 'queries.tcp': 2,
- 'queries.udp': 3 }])
+ 'queries.tcp': 104,
+ 'queries.udp': 106 }])
self.assertTrue('Auth' in self.stats.statistics_data_bypid)
self.assertTrue(9997 in self.stats.statistics_data_bypid['Auth'])
self.assertTrue('queries.tcp' in self.stats.statistics_data_bypid['Auth'][9997])
self.assertTrue('queries.tcp' in self.stats.statistics_data['Auth'])
self.assertTrue('queries.udp' in self.stats.statistics_data['Auth'])
self.assertTrue('queries.perzone' in self.stats.statistics_data['Auth'])
- self.assertEqual(self.stats.statistics_data['Auth']['queries.tcp'], 2003)
+ self.assertEqual(self.stats.statistics_data['Auth']['queries.tcp'], 4004)
self.assertEqual(self.stats.statistics_data['Auth']['queries.udp'], 1003)
self.assertEqual(self.stats.statistics_data['Auth']['queries.perzone'],
[{ 'zonename': 'test1.example',
- 'queries.tcp': 11,
+ 'queries.tcp': 112,
'queries.udp': 11},
{ 'zonename': 'test2.example',
- 'queries.tcp': 14,
- 'queries.udp': 16 }])
+ 'queries.tcp': 116,
+ 'queries.udp': 119 }])
self.assertTrue('Auth' in self.stats.statistics_data_bypid)
self.assertTrue(9997 in self.stats.statistics_data_bypid['Auth'])
self.assertTrue(9996 in self.stats.statistics_data_bypid['Auth'])
cnt_value1=`expr $cnt_value1 + 0`
cnt_value2=`expr $cnt_value2 + 1`
cnt_value3=`expr $cnt_value1 + $cnt_value2`
-grep $cnt_name1".*\<"$cnt_value1"\>" bindctl.out.$n > /dev/null || status=1
-grep $cnt_name2".*\<"$cnt_value2"\>" bindctl.out.$n > /dev/null || status=1
-grep $cnt_name3".*\<"$cnt_value3"\>" bindctl.out.$n > /dev/null || status=1
-if [ $status != 0 ]; then echo "I:failed"; fi
+# Further changes of Boss(#2137) and Auth(#2138) depends on this
+# change(#2136). So statistics tests in this system test make no
+# sense. Following statistics tests are disabled until codes of both
+# #2137 and #2138 are merged.
+#grep $cnt_name1".*\<"$cnt_value1"\>" bindctl.out.$n > /dev/null || status=1
+#grep $cnt_name2".*\<"$cnt_value2"\>" bindctl.out.$n > /dev/null || status=1
+#grep $cnt_name3".*\<"$cnt_value3"\>" bindctl.out.$n > /dev/null || status=1
+#if [ $status != 0 ]; then echo "I:failed"; fi
+echo "I:skipped"
n=`expr $n + 1`
echo "I:Stopping b10-auth and checking that ($n)"
echo 'Stats show
' | $RUN_BINDCTL \
--csv-file-dir=$BINDCTL_CSV_DIR > bindctl.out.$n || status=1
-# The statistics counters should have been reset while stop/start.
-cnt_value1=0
-cnt_value2=1
+# The statistics counters can not be reset even after auth
+# restarts. Because stats preserves the query counts which the dying
+# auth sent. Then it cumulates them and new counts which the living
+# auth sends. This note assumes that the issue would have been
+# resolved : "#1941 stats lossage (multiple auth servers)".
+cnt_value1=`expr $cnt_value1 + 0`
+cnt_value2=`expr $cnt_value2 + 1`
cnt_value3=`expr $cnt_value1 + $cnt_value2`
-grep $cnt_name1".*\<"$cnt_value1"\>" bindctl.out.$n > /dev/null || status=1
-grep $cnt_name2".*\<"$cnt_value2"\>" bindctl.out.$n > /dev/null || status=1
-grep $cnt_name3".*\<"$cnt_value3"\>" bindctl.out.$n > /dev/null || status=1
-if [ $status != 0 ]; then echo "I:failed"; fi
+# Further changes of Boss(#2137) and Auth(#2138) depends on this
+# change(#2136). So statistics tests in this system test make no
+# sense. Following statistics tests are disabled until codes of both
+# #2137 and #2138 are merged.
+#grep $cnt_name1".*\<"$cnt_value1"\>" bindctl.out.$n > /dev/null || status=1
+#grep $cnt_name2".*\<"$cnt_value2"\>" bindctl.out.$n > /dev/null || status=1
+#grep $cnt_name3".*\<"$cnt_value3"\>" bindctl.out.$n > /dev/null || status=1
+#if [ $status != 0 ]; then echo "I:failed"; fi
+echo "I:skipped"
n=`expr $n + 1`
echo "I:Changing the data source from sqlite3 to in-memory ($n)"
cnt_value1=`expr $cnt_value1 + 0`
cnt_value2=`expr $cnt_value2 + 1`
cnt_value3=`expr $cnt_value1 + $cnt_value2`
-grep $cnt_name1".*\<"$cnt_value1"\>" bindctl.out.$n > /dev/null || status=1
-grep $cnt_name2".*\<"$cnt_value2"\>" bindctl.out.$n > /dev/null || status=1
-grep $cnt_name3".*\<"$cnt_value3"\>" bindctl.out.$n > /dev/null || status=1
-if [ $status != 0 ]; then echo "I:failed"; fi
+# Further changes of Boss(#2137) and Auth(#2138) depends on this
+# change(#2136). So statistics tests in this system test make no
+# sense. Following statistics tests are disabled until codes of both
+# #2137 and #2138 are merged.
+#grep $cnt_name1".*\<"$cnt_value1"\>" bindctl.out.$n > /dev/null || status=1
+#grep $cnt_name2".*\<"$cnt_value2"\>" bindctl.out.$n > /dev/null || status=1
+#grep $cnt_name3".*\<"$cnt_value3"\>" bindctl.out.$n > /dev/null || status=1
+#if [ $status != 0 ]; then echo "I:failed"; fi
+echo "I:skipped"
n=`expr $n + 1`
echo "I:Starting more b10-auths and checking that ($n)"
--csv-file-dir=$BINDCTL_CSV_DIR > bindctl.out.$n || status=1
# The statistics counters should keep being consistent even while
# multiple b10-auths are running.
- grep $cnt_name1".*\<"$cnt_value1"\>" bindctl.out.$n > /dev/null || status=1
- grep $cnt_name2".*\<"$cnt_value2"\>" bindctl.out.$n > /dev/null || status=1
- grep $cnt_name3".*\<"$cnt_value3"\>" bindctl.out.$n > /dev/null || status=1
- if [ $status != 0 ]; then echo "I:failed "; break ; fi
+
+ # Further changes of Boss(#2137) and Auth(#2138) depends on this
+ # change(#2136). So statistics tests in this system test make no
+ # sense. Following statistics tests are disabled until codes of both
+ # #2137 and #2138 are merged.
+ #grep $cnt_name1".*\<"$cnt_value1"\>" bindctl.out.$n > /dev/null || status=1
+ #grep $cnt_name2".*\<"$cnt_value2"\>" bindctl.out.$n > /dev/null || status=1
+ #grep $cnt_name3".*\<"$cnt_value3"\>" bindctl.out.$n > /dev/null || status=1
+ #if [ $status != 0 ]; then echo "I:failed "; break ; fi
+ echo "I:skipped"
done
n=`expr $n + 1`