2009/4/17 Leonid Evdokimov <[email protected]>: > Dave Cridland wrote: >>> No, that's quite valid restriction. Client MAY cache some roster pushes >>> to resume operation from the middle of "transaction" in case of broken >>> connection, but it MUST NOT bump it's internal roster version until it >>> gets the full "transaction" of pushes. >> >> We decided that each roster push was in and of itself atomic, so the >> "transaction" you're referring to doesn't exist - each roster push can >> be effectively treated as an atomic commit point in and of itself. > > I still think it exists, let me explain my point of view more precisely. > > Here is set of versions: > > <query xmlns='jabber:iq:roster' ver='305'> > <item jid='[email protected]' subscription='none'/> > </query> > > <query xmlns='jabber:iq:roster' ver='306'> > <item jid='[email protected]' subscription='to'/> > </query> > > <query xmlns='jabber:iq:roster' ver='307'> > <item jid='[email protected]' subscription='remove'/> > </query> > > <query xmlns='jabber:iq:roster' ver='308'> > <item jid='[email protected]' subscription='both'/> > </query> > > Client knowns 305, current version is 308. The server will send 307, 308 > and the notification that the latest version is 308. > > Let's assume that connection was broken and client got 307 but not 308, > client does not know version 307 at the moment, as it *does* *not* know > that bill@ has subscription="to". That's why I name the set of stanzas a > "transaction" and that's why I'm against of processing interim roster > pushes until client has received all pushes. >
That's what I was talking about earlier, isn't it? > > XEP-0237 does not state that server should send "final state of all > touched roster items", it should send "the final result of all changes > applied" and the result may be understood as the difference. > > Am I mistaken somewhere? > No, that's also the reason for the ultra-rare corner case I posted earlier. Changing the definition to "final state of all touched roster items" as you suggest will solve every possible problem and allow us to treat interim pushes as normal ones.
