[SAGA-RG] SAGA Message API Extension
Andrei Hutanu
ahutanu at cct.lsu.edu
Thu Jan 18 12:36:55 CST 2007
Hi Andre,
Thanks for writing this up. I think it looks very good but I
still have just a few quick comments to the latest version..
1) Motivation - can make a bit stronger perhaps :
a)to break out of the stream semantics (byte-oriented, strict ordering
and reliability)
and b)to remove the burden from the application programmer of dealing
with arbitrary-sized entities such as Ethernet packet size.
2) I see ordering is enforced, could that be an option?
3) community : it would be nice if some of the active transport protocol
developers would
give their input. I would think the UDT team : Robert Grossman and
Yunhong Gu and the EVL team :
Venkatram Vishwanath should take a look at this. Perhaps the XIO team as
well.
They may all be already involved but just in case.
Andrei
Andre Merzky wrote:
>Quoting [John Shalf] (Jan 17 2007):
>
>
>>I agree. I think the reliability semantics should be a property of
>>the channel (and hence underlying protocol) and not something to
>>switch at runtime. However, I think the clients that use the
>>connection should be able to query what the channel properties are
>>(or define the minimum requirements and throw an exception if they
>>cannot be met). This is just a little introspection (not really a
>>deep or fancy coding underneath).
>>
>>
>
>I agree - that can safely be done with a read-only
>attribute.
>
>
>
>
>>>I wanted to avoid a 'reliability' attribute on the endpoint,
>>>as I don't see a reasonable easy way to switch reliability
>>>in mid stream. It is most likely that changes in
>>>reliability policy would require different protocols (only
>>>few protocols will be able to serve both ends), and would
>>>hence need a new connection setup anyway. Not sure if that
>>>is reasonable though.
>>>
>>>Anyway, that would leave us with specification of
>>>reliability on connection setup (i.e. endpoint construction)
>>>- right now that is done via the scheme part of the URL.
>>>Would a flag be more appropriate/explicit? Probably...
>>>
>>>
>>>
>>>
>>>> b) what about if the message arrives more than once? (eg.
>>>> redundant copies of messages can occur in practice for a
>>>> number of
>>>>unreliable or semi-reliable messaging protocols).
>>>>
>>>>
>>>Good point. IMHO we should specify that messages arrive 'AT
>>>MOST ONCE' (unreliable) or EXACTLY ONCE (reliable). I don't
>>>think that we need to support additional modes, nor the
>>>complete spectrum of (un/)reliable transmission modes. Or?
>>>
>>>
>>I cannot remember the document, but there was a spec for defining
>>reliability of another kind of messaging bus. It had
>> unreliable: message may or may not arrive (typical UDP).
>> semi-reliable: message must arrive (will be retransmitted if not
>>acked). Source keeps resending until it sees the ack. It is
>>possible that the ack is lost, in which case, the message may arrive
>>at the client twice (so this is a Message will arrive at least once,
>>and possibly more than once.) This protocol is useful since the
>>message destination does not need to maintain complex message
>>state... it just acks messages that arrive (very simple).
>> reliable: the message must arrive and it will only arrive once.
>>
>>
>
>I added to the spec:
>
> The available realiability levels are:
>
> \up
> \begin{tabbing}
> XXXXXXXXXX \= \kill
> |Unreliable|: \> messages MAY (or may not) reach the
> remote clients.\\[0.3em]
>
> |Atomic|: \> |Unreliable|, but a message received
> by one client is\\
> \> guaranteed to (MUST) arrive
> at all clients.\\[0.3em]
>
> |SemiReliable|: \> messages are guaranteed to (MUST)
> arrive at all\\
> \> clients, but may arrive more than once.\\[0.3em]
>
> |Reliable|: \> all messages are guaranteed to (MUST)
> arrive at\\
> \> all clients.\\[0.3em]
> \end{tabbing}
>
>That is similar to your list, but adds the 'atomic' one.
>Not sure if that is useful (sounds like) or easily
>implementable (??), but I found it in a list of relibility
>modes for message transmissions which looked sensible, and
>seems to be close to what you propose.
>
>[ about point-to-point ]
>
>
>
>>That does address one of the cases (not exactly the one I was
>>thinking of).
>>Also should allow -1 to specify *any-number-of-clients* at the
>>underlying protocol's discretion.
>>
>>
>
>Yes, definitely, thats in the spec already.
>
>
>
>
>>But now for a semantic thicket....
>>
>>Case 1: I connect to a named destination and I am joined together
>>with everyone else who has connected to that port. In this case, any
>>message I send will be broadcast to everyone else and vice verse
>>(message bus). This is the equivalent of a publish-subscribe service.
>>Case 2: I connect to a port and I own the service. This appears to
>>be the case you are setting up above as it only allows one client to
>>join the service.
>>Case 3: I connect to the port and for a sub-process that does not
>>share the messages with the other clients that have connected to that
>>port (like an HTTP server). I don't quite see how that kind of point-
>>to-point message service is supported.
>>
>>I think we need an attribute for the message port that says whether
>>it is a bus or a point-to-point. In addition, I like the idea of
>>setting the message queue length (as you have above). I was not
>>thinking of that, but I can see the value of creating a first-come-
>>first-serve message port as well. (if that is not too complicated).
>>
>>
>
>Got you (I think) :-) Yes, that makes sense. I added a
>'topology' enum and attribute, which is handled similarly to
>the 'reliability' property (static over connection/endpoint
>lifetime, inspection via ReadOnly attribute).
>
>
>New draft is attached, with new sections marked. It would
>be great if you could review the paragraphs about connection
>topology.
>
>Thanks!
>
> Andre.
>
>
>
More information about the saga-rg
mailing list