Hi Jahmai,

Your solution seems like it might be the best for your needs, but I will
think about it further...

Peter

On 3/20/12 2:45 AM, Jahmai Lay wrote:
> Hi,
> 
> The purpose of this post is to declare a problem statement for us and
> how we solved it and to elicit feedback on our solution, as well as
> encourage this to be considered in any future versioning scheme that
> may be applied to the PubSub specification.
> 
> I'm an engineer co-founding a startup for mission critical realtime
> location systems using mobile devices like smart phones, and we have
> chosen XMPP as our realtime message bus.
> 
> The PubSub and Common Alerting Protocol XEP's fit our need for alert
> aggregation between individuals in distress and the caretakers of a
> given geographical area.
> 
> To set the scene; we have an "alerts" node where CAP alerts are
> published by someone in distress. These alerts are subsequently
> updated by caretakers in the field either with additional information
> or to transition the alert state (such as acknowledgement).
> These updates occur from occasionally connected mobile clients and we
> assume that these client connections are both fragile and expensive.
> 
> It is crucial for us that the collection of items held by a client for
> a node are synchronized with the server - that is, that each node
> observer will have precisely the same collection after receiving the
> same event sequence sent from the server.
> 
> This is challenging when we have nodes which have many publishers and
> sometimes items have many publishers.
> 
> With regards to possible race conditions in updating items between
> publishers, we are satisfied with "latest wins" logic and is not being
> considered in this discussion.
> 
> During development we have discovered cases where desynchronization
> of the collection of items stored at a node can occur in which the XMPP
> specifications do not appear to address.
> 
> For example;
> 
> C1: <iq id="id1" type="get" to="pubsub.criticalarc.com"
>         from="[email protected]/client1">
>       <pubsub xmlns="http://jabber.org/protocol/pubsub";>
>         <items node="my_node" />
>       </pubsub>
>     </iq>
> 
> C2: <iq id="id2" type="set" to="pubsub.criticalarc.com"
>         from="[email protected]/client2">
>       <pubsub xmlns="http://jabber.org/protocol/pubsub";>
>         <publish node="my_node">
>           <item id="item1" />
>         </publish>
>       </pubsub>
>     </iq>
> 
> S:  <iq id="id2" type="result" to="[email protected]/client2"
>         from="pubsub.criticalarc.com"> />
> 
> S:  <message id="id3" to="[email protected]/client1">
>       <pubsub xmlns="http://jabber.org/protocol/pubsub#event";>
>         <items node="my_node">
>           <item id="item1" />
>         </items>
>       </pubsub>
>      </message>
> 
> S:  <iq id="id1" type="result" to="[email protected]/client1"
>         from="pubsub.criticalarc.com">
>       <pubsub xmlns="http://jabber.org/protocol/pubsub";>
>         <items node="my_node">
>           <item id="item1" />
>         </items>
>       </pubsub>
>     </iq>
> 0123456789012345678901234567890123456789012345678901234567890123456789
> In this case it is not clear to client1 whether the latest version of
> item1 is in the event or the result.
> 
> This case is exacerbated when Result Set Management is used to receive
> multiple pages of items are interleaved with events updating or
> removing the same items.
> 
> I have read previous discussions regarding timestamping and versioning
> for pubsub.
> 
> We considered using timestamps, but dismissed them due to very real
> possibility that this sequence could actually occur within the same
> time unit, and that if a timestamp needs to be 'massaged' for ordered
> uniqueness, it's not the best choice.
> 
> We considered using opaque versioning ala Roster management, but this
> doesn't actually solve the above scenario because there is no natural
> ordering to opaque strings, so determining which version is the most
> recent is still a problem.
> 
> As such, we have currently solved the problem by using a natural
> ordering "ver" attribute on each item receives that the client can use
> to compare.
> 
> We have also added the ability to request historical events
> (also versioned) so that when a mobile client connects it can resume
> its event stream at minimal cost.
> We did this because there is more in an event stream than just item
> publications that we would like to know about.
> (I can expand on this at request).
> 
> Thoughts and criticisms welcome.
> 
> Regards,
> 
> Jahmai.
> 
> 

Reply via email to