[Council] VOTE: JEP-0079 (Advanced Message Processing)
Matthew A. Miller
linuxwolf at outer-planes.net
Tue May 11 08:50:05 CDT 2004
Here are my responses to the wiki. I'll get the wiki updated with these
as time permits, and work with the JEP editor to make the appropriate
updates to JEP-0079.
Regarding Detail 1 ("Some error reporting text and examples should be
added..."): I'll add some examples to each condition and action. As
for processing, my initial thought was (as described in section 2.2:
"Server Processing") the server would validate all of the rules it was
given before trying to process them. If this seems too expensive, then
we can see what would work better, although I think fully validating
before processing would be more reliable.
Regarding Detail 2 ("If the <message/> is dispatched to another
server..."): The intent is that servers MUST NOT forward AMP-ed
messages to another server unless the recipient at understands AMP.
Requiring (not simply allowing) disco lookups every time is
unrealistic. However, I believe it is also unrealistic for an
AMP-supporting server to make assumptions that are too broad. Would it
be more acceptable to say something like the following?
Before forwarding a <message/> with AMP semantics to another server,
it MUST be aware of the receiving server's support for this
This very well could mean that a server will need to perform a disco
request before it can forward the first AMP-ed <message/> to a
particular server it has no prior knowledge of.
[Somewhat OT: Maybe we need some form of "expiry flags" for disco info
and items? Better than assuming any cached disco info is valid
Regarding Detail 4 ("The expire-at condition will have a strange
interaction with..."): Yes, implementations are expected to garbage
collect expired messages, unless you have better ideas. If it doesn't,
then how can the system be reliable?
The expense of this depends on your implementation. One possible
implementation is to have a database of exiprable messages, which should
be significantly smaller than the entire message store. This task would
scan this database periodically (but frequently), and perform the
necessary actions for those messages that have expired, and flag it as
discardible. Then the next time an attempt would be made to deliver the
message (e.g. the user is now available), a scan of that same database
could be made, and it would actually be removed then.
Regarding Detail 5 ("6.3.2 Seems to imply no offline storage..."): The
intent is definitely not to prevent offline storage. That will be
clarified (any suggestions?).
Regarding Detail 6 ("6.3.3 is impossible over multiple hops."): The
point of expire-in is a TTL. Maybe the term used should have been
"live-for" or some such. Other TTL implementations I have seen did not
require synchronized clocks, provided the clocks ran at the same rate
(which I think is safe to assume here). It can be safely assumed (and
should be explicitly stated) the "base timestamp" for a particular hop
is the moment the message is received. Since the value MUST be adjusted
(decremented by the processing time), the "base timestamp" is adjusted
for each hop.
Using expire-at for something that is meant to track a short duration of
time seems even more problematic, it would definitely require clock
synchronization along the entire path.
If the resolution is unreasonable, then we can reduce that from
milliseconds to seconds. And as with "expire-at", such messages should
also be garbage collected.
Regarding Detail 7 ("Seems like it would be useful to have a partial
match..."): This had been discussed, and it was decided then that
either 1) it would enforce an "undocumented" interpretation of JID
resources that is not universally desirable, and/or 2) would introduce a
number of matching rules that may be too complex to handle in a timely
However, I am more than happy to have some form of partial matching
Regarding Detail 8 ("In 6.3.4, if the value is 'other',..."): This is
correct. I had some (possibly irrational) problem having a condition
with only one option to it. Maybe "other" should just go away...
Regarding Detail 9 ("Possibly re-word this security consideration..."):
This will be updated.
More information about the Council