BIND 10 #1261: IXFR-in protocol handling
BIND 10 Development
do-not-reply at isc.org
Wed Oct 5 18:01:12 UTC 2011
#1261: IXFR-in protocol handling
-------------------------------------+-------------------------------------
Reporter: | Owner: jinmei
jinmei | Status: reviewing
Type: task | Milestone:
Priority: | Sprint-20111011
blocker | Resolution:
Component: xfrin | Sensitive: 0
Keywords: | Sub-Project: DNS
Defect Severity: N/A | Estimated Difficulty: 0
Feature Depending on Ticket: | Total Hours: 0
Add Hours to Ticket: 0 |
Internal?: 0 |
-------------------------------------+-------------------------------------
Comment (by jinmei):
Replying to [comment:5 vorner]:
> I'm not going to review it, but I'm reading the code to know how to
integrate #1262. Is it OK to commit the diff after each sequence?
Shouldn't the whole transfer be atomic?
We (briefly) discussed this in the parent ticket (#1212) and we were
not sure about that.
http://bind10.isc.org/ticket/1212#comment:7
If I understand it correctly, this is what BIND 9 does, too. I posted
an email to bind-users asking for a clarification, but I've not got
any response:
https://lists.isc.org/pipermail/bind-users/2011-October/085161.html
As mentioned in that email message, this may not necessarily break
what RFC1995 says, depending on the interpretation of "all the
differences" and "older/newer version".
For now, I suggest keeping the current code and adding the following
note to the XfrinState class documentation:
{{{
Note that changes are committed for every "difference sequence"
(i.e. changes for one SOA update). This means when an IXFR response
contains multiple difference sequences and something goes wrong
after several commits, these changes have been published and visible
to clients even if the IXFR session is subsequently aborted.
It is not clear if this is valid in terms of the protocol
specification.
Section 4 of RFC 1995 states:
An IXFR client, should only replace an older version with a newer
version after all the differences have been successfully processed.
If this "replacement" is for the changes of one difference sequence
and "all the differences" mean the changes for that sequence, this
implementation strictly follows what RFC states. If this is for
the entire IXFR response (that may contain multiple sequences),
we should implement it with one big transaction and one final commit
at the very end.
For now, we implement it with multiple smaller commits for two
reasons. First, this is what BIND 9 does, and we generally port
the implementation logic here. BIND 9 has been supporting IXFR
for many years, so the fact that it still behaves this way
probably means it at least doesn't cause a severe operational
problem in practice. Second, especially because BIND 10 would
often use a database backend, a larger transaction could cause an
undesirable effects, e.g. suspending normal lookups for a longer
period depending on the characteristics of the database. Even if
we find something wrong in a later sequeunce and abort the
session, we can start another incremental update from what has
been validated, or we can switch to AXFR to replace the zone
completely.
}}}
--
Ticket URL: <http://bind10.isc.org/ticket/1261#comment:7>
BIND 10 Development <http://bind10.isc.org>
BIND 10 Development
More information about the bind10-tickets
mailing list