On 23 Jan 2011, at 16:03, Robert Newson wrote: > I can see utility in the original proposal, my only point is whether > it would still be utile if other mechanisms were introduced. You've > clarified that the two cases are distinct, so it seems reasonable to > me now. > > However, I'd hope we'd return the doc and not just the _rev. The only > thing returning the rev itself will do is encourage blind overwrites.
You are correct of course. In my attempt to clarify one issue, I confuddled another. Sorry :) Cheers Jan -- > > B. > > On Sun, Jan 23, 2011 at 2:58 PM, Jan Lehnardt <j...@apache.org> wrote: >> The confusion point here is that there are two different types of conflict. >> >> 1. _rev mismatch on regular write. — This is the quoted scenario. Returning >> the expected _rev with the error result allows to remove an extra GET >> request. The replicator never does this. >> >> 2. _rev mismatch on replication write (or a client with the all_or_nothing >> option). The response is always 201, even when a conflict is created, the >> caller isn't being notified (or maybe it is, but the replicator isn't using >> this). >> >> read-repair function assume that conflicts appear as in 2. Returning the >> expected _rev in a failed write only happens in 1. >> >> Cheers >> Jan >> -- >> >> >> >> On 23 Jan 2011, at 14:23, Robert Dionne wrote: >> >>> These are also interesting ideas, but I don't think they adequately satisfy >>> this particular write-heavy scenario. The client receiving the 409 has in >>> hand the doc they wished to write and may just to add a >>> field or update one. A general resolve_conflict function is a good idea for >>> certain collaborative environments but I don't think would handle this >>> specific case. >>> >>> Having the conflict causing update return the doc that caused it seems >>> really ideal. I'm still +1 on it >>> >>> >>> >>> >>> >>> >>> On Jan 23, 2011, at 7:51 AM, Robert Newson wrote: >>> >>>> Oooh, crosspost. >>>> >>>> Had a similar chat on IRC last night. >>>> >>>> I'm -0 on returning the doc during a 409 PUT just because I think >>>> there are other options that might be preferred. >>>> >>>> For example, allowing a read_repair function in ddocs, that would take >>>> all conflicting revisions as input and return the resolved document as >>>> output. Or allowing a resolve_conflict function that is called at the >>>> moment of conflict creation, allowing it to be downgraded to a >>>> non-conflicting update. >>>> >>>> With either, or both, of those mechanisms, the proposed one here is >>>> unnecessary. >>>> >>>> B. >>>> >>>> On Sun, Jan 23, 2011 at 12:04 PM, Robert Dionne >>>> <dio...@dionne-associates.com> wrote: >>>>> +1 >>>>> >>>>> this sounds like an excellent idea. >>>>> >>>>> >>>>> On Jan 23, 2011, at 12:21 AM, kowsik wrote: >>>>> >>>>>> I've been spending a fair bit of time on profiling the performance >>>>>> aspects of Couch. One common recurring theme is updating documents on >>>>>> a write-heavy site. This is currently what happens: >>>>>> >>>>>> PUT /db/doc_id >>>>>> <- 409 indicating conflict >>>>>> >>>>>> loop do >>>>>> GET /db/doc_id >>>>>> <- 200 >>>>>> >>>>>> PUT /db/doc_id >>>>>> <- 201 (successful and returns the new _rev) >>>>>> end until we get a 201 >>>>>> >>>>>> What would be beneficial is if I can request the "current" doc during >>>>>> PUT like so: >>>>>> >>>>>> PUT /db/doc_id?include_doc=true >>>>>> <- 409 conflict (but the 'doc' at the current _rev is returned) >>>>>> >>>>>> This would allow the caller to simply take the doc that was returned, >>>>>> update it and try PUT again (eliminate the extra GET). This is >>>>>> especially valuable when the app is on one geo and the db is in yet >>>>>> another (think couchone or cloudant). >>>>>> >>>>>> 2 cents, >>>>>> >>>>>> K. >>>>>> --- >>>>>> http://twitter.com/pcapr >>>>>> http://labs.mudynamics.com >>>>> >>>>> >>> >> >>