BIND 10 #2738: Clarify high-level design of the CC protocol
BIND 10 Development
do-not-reply at isc.org
Tue Apr 2 21:52:45 UTC 2013
#2738: Clarify high-level design of the CC protocol
-------------------------------------+-------------------------------------
Reporter: vorner | Owner:
Type: task | jinmei
Priority: medium | Status:
Component: Inter-module | reviewing
communication | Milestone:
Keywords: | Sprint-20130402
Sensitive: 0 | Resolution:
Sub-Project: DNS | CVSS Scoring:
Estimated Difficulty: 5 | Defect Severity: N/A
Total Hours: 0 | Feature Depending on Ticket:
| Add Hours to Ticket: 0
| Internal?: 0
-------------------------------------+-------------------------------------
Comment (by jinmei):
- I think the high level design should use a higher level abstraction
of message "bus" (or "system" or whatever), and should be described
without the concept of msgq (which is just a specific implementation
of the bus).
- I'd like to clarify the response (answer) semantics for broadcasting
(i.e. "addressing by group"). If we expect it to work in some way,
we should describe how it should work in more detail. But, from
what I've read from this document, I guess an implicit assumption is
that we actually didn't expect it to work; if the sender needs a
response to the same single message from multiple recipients, it
should first get a list of individual recipients and send a direct
message to each of them. I'm okay with that model, but then I
suggest explicitly prohibiting (or at least discouraging, saying
"the behavior is undefined and you shouldn't do it) broadcasting
with expecting an answer(s).
- I also like to clarify that read/write should never "fail" (here,
getting no answer is not considered a failure) and, if that ever
happens the module should consider it fatal and terminate.
- I'd also like to clarify whether the sender needs to expect blocking
on write. As we discussed before, IMO we should ensure it's non
blocking at the lower level (and it seems to be not so difficult at
least for the C++ API).
- "Undeliverable notification": I guess we should revisit this concept
at a higher level, while I see it addresses some real issues due to
our current implementation details. First, it only matters when the
sender requests an answer. And, since an answer can be delayed due
to a reason at the recipient side, which the sender cannot control,
if the sender cannot do blocking wait for the answer it must wait
for it asynchronously anyway; in the case the sender can do blocking
wait, it might be a good optimization to tell the sender the failure
sooner, but it seems to be a implementation-specific bonus feature,
rather than a matter of higher level design. So my personal
suggestion is to remove it from this high level design (or if we
mention it, clarify it's an implementation level optimization and
modules that can't block should need asynchronous read anyway).
- I'm not sure about what this means:
{{{
* Client with given lname connected
}}}
lname is not known until the client is actually connected to the bus,
so I don't understand how to "give" the lame of the client for the
notification. Or, does this mean the event of "a client is connected
to the bus (or the "system")" (and the notification includes the lname
of the client)?
- Likewise, the usage of this is also a bit unclear:
{{{
* Client with given lname subscribed to given group
}}}
Does this mean the event of "a client subscribes to a given group"
(and the notification includes the lname of the client)?
- what specifically does "members" mean hear? list of subscriber
lnames of a given group? what's the "list of all connections"?
{{{
List of group members:
The MSGQ provides a command to list members of given group and list
of all connections.
}}}
"NOTE" of Event notifications: I simply couldn't understand these
three paragraphs very well (so it's even difficult to say specifically
what's the problem beyond "I didn't understand it"). Maybe the first
paragraph should be more detailed, clarifying what's state and race
mean, and maybe revising the examples with something better.
--
Ticket URL: <http://bind10.isc.org/ticket/2738#comment:7>
BIND 10 Development <http://bind10.isc.org>
BIND 10 Development
More information about the bind10-tickets
mailing list