BIND 10 #2934: xfrout session can be broken due to EAGAIN

BIND 10 Development do-not-reply at isc.org
Fri May 17 08:26:48 UTC 2013


#2934: xfrout session can be broken due to EAGAIN
-------------------------------------+-------------------------------------
            Reporter:  jinmei        |                        Owner:
                Type:  defect        |  jinmei
            Priority:  medium        |                       Status:
           Component:  xfrout        |  reviewing
            Keywords:                |                    Milestone:
           Sensitive:  0             |  Sprint-20130528
         Sub-Project:  DNS           |                   Resolution:
Estimated Difficulty:  2             |                 CVSS Scoring:
         Total Hours:  0             |              Defect Severity:  N/A
                                     |  Feature Depending on Ticket:
                                     |          Add Hours to Ticket:  0
                                     |                    Internal?:  0
-------------------------------------+-------------------------------------
Changes (by vorner):

 * owner:  vorner => jinmei


Comment:

 Hello

 The lettuce tests don't pass for me, for some kind of permission error:
 {{{
     Load 100 records for zone example.org to DB file data/xfrout.sqlite3
 # features/terrain/load    Load 100 records for zone example.org to DB
 file data/xfrout.sqlite3                        #
 features/terrain/loadzone.py:58
     Traceback (most recent call last):
       File "/home/vorner/.local/lib64/python2.7/site-
 packages/lettuce/core.py", line 117, in __call__
         ret = self.function(self.step, *args, **kw)
       File
 "/var/tmp/bind10/bind10-3/tests/lettuce/features/terrain/loadzone.py",
 line 86, in load_zone_rr_to_dbfile
         run_loadzone(zone, f.name, db_file)
       File
 "/var/tmp/bind10/bind10-3/tests/lettuce/features/terrain/loadzone.py",
 line 35, in run_loadzone
         subprocess.PIPE, subprocess.PIPE)
       File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__
         errread, errwrite)
       File "/usr/lib64/python2.7/subprocess.py", line 1308, in
 _execute_child
         raise child_exception
     OSError: [Errno 13] Permission denied
     Given I have bind10 running with configuration xfrout_master.conf
 # features/terrain/bind    Given I have bind10 running with configuration
 xfrout_master.conf                           #
 features/terrain/bind10_control.py:107
     And wait for bind10 stderr message BIND10_STARTED_CC
 # features/terrain/step    And wait for bind10 stderr message
 BIND10_STARTED_CC                                        #
 features/terrain/steps.py:34
     And wait for bind10 stderr message CMDCTL_STARTED
 # features/terrain/step    And wait for bind10 stderr message
 CMDCTL_STARTED                                           #
 features/terrain/steps.py:34
     And wait for bind10 stderr message AUTH_SERVER_STARTED
 # features/terrain/step    And wait for bind10 stderr message
 AUTH_SERVER_STARTED                                      #
 features/terrain/steps.py:34
     And wait for bind10 stderr message XFROUT_STARTED
 # features/terrain/step    And wait for bind10 stderr message
 XFROUT_STARTED                                           #
 features/terrain/steps.py:34
     And wait for bind10 stderr message ZONEMGR_STARTED
 # features/terrain/step    And wait for bind10 stderr message
 ZONEMGR_STARTED                                          #
 features/terrain/steps.py:34
     When I do a customized AXFR transfer of example.org
 # features/terrain/tran    When I do a customized AXFR transfer of
 example.org                                         #
 features/terrain/transfer.py:88
     Then transfer result should have 101 rrs
 # features/terrain/tran    Then transfer result should have 101 rrs
 # features/terrain/transfer.py:164

   Scenario: transfer a large zone
 # features/xfrout_bind10.feature:22
     Load 50000 records for zone example.org to DB file data/xfrout.sqlite3
 # features/terrain/load    Load 50000 records for zone example.org to DB
 file data/xfrout.sqlite3                      #
 features/terrain/loadzone.py:58
     Traceback (most recent call last):
       File "/home/vorner/.local/lib64/python2.7/site-
 packages/lettuce/core.py", line 117, in __call__
         ret = self.function(self.step, *args, **kw)
       File
 "/var/tmp/bind10/bind10-3/tests/lettuce/features/terrain/loadzone.py",
 line 86, in load_zone_rr_to_dbfile
         run_loadzone(zone, f.name, db_file)
       File
 "/var/tmp/bind10/bind10-3/tests/lettuce/features/terrain/loadzone.py",
 line 35, in run_loadzone
         subprocess.PIPE, subprocess.PIPE)
       File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__
         errread, errwrite)
       File "/usr/lib64/python2.7/subprocess.py", line 1308, in
 _execute_child
         raise child_exception
     OSError: [Errno 13] Permission denied
     Given I have bind10 running with configuration xfrout_master.conf
 }}}

 Also, the 5 seconds of timeout seems like a really long time to me. I
 guess some kind of wait is needed here, but single second would be more
 than enough to fill whatever buffers the OS has (or flush the whole zone
 into the buffers if they are large enough).
 {{{
 When I do a customized AXFR transfer of example.org from [::1]:47806 with
 pose of 5 seconds
 }}}

 Does anything still use the `database_file` option? Didn't we change the
 xfrin/out to use the client lists?
 {{{
     "Auth": {
         "database_file": "data/xfrout.sqlite3",
         "listen_on": [ {
             "address": "::1",
             "port": 47806
         } ]
     },
 }}}

 Then there are two things in comments.

 This should be „with“, not „without“:
 {{{#!python
 # examine how it's called, so we replace it without our mock.
 }}}

 I believe this is not a file, but socket. Files are always blocking, at
 least in linux (I don't know about other unices).
 {{{#!python
     """A helper function to change blocking mode of the given file.

     It sets the mode of blocking I/O for the file associated with filenum,
     according to parameter 'on': if it's True the file will be made
 blocking;
     otherwise it will be made non-blocking.

     filenum(int): file number (descriptor) of the file to update.
     on(bool): whether enable (True) or disable (False) blocking I/O.

     """
 }}}

-- 
Ticket URL: <http://bind10.isc.org/ticket/2934#comment:10>
BIND 10 Development <http://bind10.isc.org>
BIND 10 Development


More information about the bind10-tickets mailing list