[SAGA-RG] SAGA Message API Extension
Andre Merzky
andre at merzky.net
Thu Jan 18 03:23:26 CST 2007
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.
--
"So much time, so little to do..." -- Garfield
-------------- next part --------------
A non-text attachment was scrubbed...
Name: saga_messages.pdf
Type: application/pdf
Size: 150322 bytes
Desc: not available
Url : http://www.ogf.org/pipermail/saga-rg/attachments/20070118/04b3b82c/attachment-0003.pdf
More information about the saga-rg
mailing list