On Thu, Jul 15, 2010 at 11:02 AM, Pablo Castro <[email protected]> wrote: > > From: [email protected] [mailto:[email protected]] On Behalf Of Jeremy Orlow > Sent: Thursday, July 15, 2010 2:04 AM > > On Thu, Jul 15, 2010 at 2:44 AM, Jonas Sicking <[email protected]> wrote: > On Wed, Jul 14, 2010 at 6:20 PM, Pablo Castro <[email protected]> > wrote: > >>> > If it's accurate, as a side note, for the async API it seems that this >>> > makes it more interesting to enforce callback order, so we can more >>> > easily explain what we mean by "before". >>> Indeed. >>> >>> What do you mean by enforce callback order? Are you saying that callbacks >>> should be done in the order the requests are made (rather than prioritizing >>> cursor callbacks)? (That's how I read it, but Jonas' "Indeed" makes me >>> suspect I missed something. :-) > > That's right. If changes are visible as they are made within a transaction, > then reordering the callbacks would have a visible effect. In particular if > we prioritize the cursor callbacks then you'll tend to see a callback for a > cursor move before you see a callback for say an add/modify, and it's not > clear at that point whether the add/modify happened already and is visible > (but the callback didn't land yet) or if the change hasn't happened yet. If > callbacks are in order, you see changes within your transaction strictly in > the order that each request is made, avoiding surprises in cursor callbacks.
Oh, I took what you said just as that we need to have a defined callback order. Not anything in particular what that definition should be. Regarding when a modification happens, I think the design should be that changes logically happen as soon as the 'success' call is fired. Any success calls after that will see the modified values. I still think given the quite substantial speedups gained from prioritizing cursor callbacks, that it's the right thing to do. It arguably also has some benefits from a practical point of view when it comes to the very topic we're discussing. If we prioritize cursor callbacks, that makes it much easier to iterate a set of entries and update them, without having to worry about those updates messing up your iterator. / Jonas
