[svn] commit: r2620 - /branches/trac289/src/bin/xfrin/xfrin.py.in

BIND 10 source code commits bind10-changes at lists.isc.org
Tue Aug 3 03:48:29 UTC 2010


Author: zhanglikun
Date: Tue Aug  3 03:48:29 2010
New Revision: 2620

Log:
Also send the 'xfrin_failed' command to zone manager when xfrin failed, so that zone manager can reset the zone timer.

Modified:
    branches/trac289/src/bin/xfrin/xfrin.py.in

Modified: branches/trac289/src/bin/xfrin/xfrin.py.in
==============================================================================
--- branches/trac289/src/bin/xfrin/xfrin.py.in (original)
+++ branches/trac289/src/bin/xfrin/xfrin.py.in Tue Aug  3 03:48:29 2010
@@ -52,6 +52,7 @@
 
 XFROUT_MODULE_NAME = 'Xfrout'
 ZONE_MANAGER_MODULE_NAME = 'Zonemgr'
+ZONE_XFRIN_FAILED = 'zone_xfrin_failed'
 __version__ = 'BIND10'
 # define xfrin rcode
 XFRIN_OK = 0
@@ -68,7 +69,7 @@
 class XfrinConnection(asyncore.dispatcher):
     '''Do xfrin in this class. '''    
 
-    def __init__(self, server_,
+    def __init__(self,
                  sock_map, zone_name, rrclass, db_file, shutdown_event,
                  master_addrinfo, verbose = False, idle_timeout = 60): 
         ''' idle_timeout: max idle time for read data from socket.
@@ -79,7 +80,6 @@
         asyncore.dispatcher.__init__(self, map=sock_map)
         self.create_socket(master_addrinfo[0], master_addrinfo[1])
         self._zone_name = zone_name
-        self._server = server_
         self._sock_map = sock_map
         self._rrclass = rrclass
         self._db_file = db_file
@@ -195,7 +195,6 @@
                                             self._handle_xfrin_response)
 
                 self.log_msg(logstr + 'succeeded')
-                self._server.publish_xfr_finish_news(self._zone_name)
                 ret = XFRIN_OK
 
         except XfrinException as e:
@@ -324,10 +323,11 @@
                   shutdown_event, master_addrinfo, check_soa, verbose):
     xfrin_recorder.increment(zone_name)
     sock_map = {}
-    conn = XfrinConnection(server, sock_map, zone_name, rrclass, db_file,
+    conn = XfrinConnection(sock_map, zone_name, rrclass, db_file,
                            shutdown_event, master_addrinfo, verbose)
     if conn.connect_to_master():
-        conn.do_xfrin(check_soa)
+        ret = conn.do_xfrin(check_soa)
+        server.publish_xfrin_news(zone_name, ret)
 
     xfrin_recorder.decrement(zone_name)
 
@@ -450,13 +450,20 @@
 
         return answer
 
-    def publish_xfr_finish_news(self, zone_name):
-        '''Send command to xfrout/zone manager module, that 
-        xfr has finished for one zone, new zone data is ready.'''
+    def publish_xfrin_news(self, zone_name, xfr_result):
+        '''Send command to xfrout/zone manager module.
+        If xfrin has finished successfully for one zone, tell the good 
+        news(command: zone_new_data_ready) to zone manager and xfrout.
+        if xfrin failed, just tell the bad news to zone manager, so that 
+        it can reset the refresh timer for that zone. '''
         param = {'zone_name': zone_name}
-        msg = create_command(notify_out.ZONE_NEW_DATA_READY_CMD, param)
-        self._send_cc_session.group_sendmsg(msg, XFROUT_MODULE_NAME)
-        self._send_cc_session.group_sendmsg(msg, ZONE_MANAGER_MODULE_NAME)
+        if xfr_result == XFRIN_OK:
+            msg = create_command(notify_out.ZONE_NEW_DATA_READY_CMD, param)
+            self._send_cc_session.group_sendmsg(msg, XFROUT_MODULE_NAME)
+            self._send_cc_session.group_sendmsg(msg, ZONE_MANAGER_MODULE_NAME)
+        else:
+            msg = create_command(ZONE_XFRIN_FAILED, param)
+            self._send_cc_session.group_sendmsg(msg, ZONE_MANAGER_MODULE_NAME)
 
     def _parse_cmd_params(self, args):
         zone_name = args.get('zone_name')




More information about the bind10-changes mailing list