BIND 10 #1279: IXFR to AXFR fallback
BIND 10 Development
do-not-reply at isc.org
Wed Oct 19 13:35:35 UTC 2011
#1279: IXFR to AXFR fallback
-------------------------------------+-------------------------------------
Reporter: | Owner: UnAssigned
jinmei | Status: reviewing
Type: task | Milestone:
Priority: major | Sprint-20111025
Component: xfrin | Resolution:
Keywords: | Sensitive: 0
Defect Severity: N/A | Sub-Project: DNS
Feature Depending on Ticket: | Estimated Difficulty: 5
Add Hours to Ticket: 0 | Total Hours: 0
Internal?: 0 |
-------------------------------------+-------------------------------------
Changes (by vorner):
* owner: vorner => UnAssigned
* status: accepted => reviewing
Comment:
Hello
While I see the differences between the various ways to fallback, I
believe it's OK to implement just one.
I've chosen the one with creating a new connection immediately. I believe
we need a new connection, as some server might just close the connection
after answer for IXFR (I think BIND10 does that) and some servers might
get confused if they don't know the IXFR. And I don't see any reason to
wait and it would only complicate matters, as we would need to keep the
state somewhere.
But the change contains a controversial topic. I don't care how or why the
IXFR failed, if it failed, I just retry with AXFR. I do it for two reason.
One is simplicity ‒ there's no need to write bunch of tests and handle a
lot of different failure cases. Another one is, IXFR could fail in an
unpredictable way (I've seen a bug in a server yesterday that returned
SERVFAIL if it didn't have the differences stored). In many such cases,
the AXFR could help, so I think it's worth at last trying (because if the
AXFR fails as well, we wasted only few packets over one TCP connection).
As for the zone that is not known, I think it will fall back to AXFR after
trying to initialize the IXFR and failing even before sending anything
out. That isn't the most elegant way to do it, but I guess it's OK, as the
external functionality is the same, except for little logging.
Anyway, one unrelated note. The process_xfrin function should perform some
actions no matter if the transfer succeeds or fails (eg. decrementing the
number of active transfers, notifying zone manager, etc), but if there's
an unexpected exception, it does not. I think it should be put into some
try-finally block. Should it be done right now when the code is being
modified, or a new ticket created?
Thanks
--
Ticket URL: <http://bind10.isc.org/ticket/1279#comment:5>
BIND 10 Development <http://bind10.isc.org>
BIND 10 Development
More information about the bind10-tickets
mailing list