Using replicator means client has to implement replication protocol. I didn't want to do that, what I need is just a 'force write'. That I ended up implementing something similar to replication is because that's the only way to introduce conflicts in v2.0
I've ventured with other solutions: - include CouchDB in distributable (using rcouch) -> size too big - PouchDB -> mine is a non-browser app. -------------------------------------------- On Fri, 15/5/15, Dale Harvey <[email protected]> wrote: Subject: Re: How to 'force write' in v2.0 ? To: "Alexander Shorin" <[email protected]> Cc: [email protected] Date: Friday, 15 May, 2015, 17:05 Those steps look remarkably similiar to how the replicator works, wondering why you arent using that? [email protected] wrote: > Thanks for your suggestion, > > I'll just write my steps here to benefit other users that wants all_or_nothing in v2.0: > 1. For each docs: > - retrieve _revisions using GET /db/doc?rev=latest_rev&revs=true > - generate new revision ID (I use HMAC here), prepend it to _revisions.ids > - increase _revisions.start > 2. POST bulk_docs with new_edits:false > > It works, but feels very hackish as there are now n requests (one for each doc) to get > _revisions instead of only one all_or_nothing. > > I assume the difficulty of all_or_nothing in v2.0 comes multi-master and having > to rollback multiple docs on validation failure. > > So I suggest something simpler like: PUT /db/doc?rev=latest_rev&force=true > that always return success. Developers can then loop on each document to mimic > previous bulk_docs semantic. > Seems possible to me, but I don't understand CouchDB internals. > > Thanks for your help :) > > -------------------------------------------- > On Fri, 15/5/15, Alexander Shorin <[email protected]> wrote: > > Subject: Re: How to 'force write' in v2.0 ? > To: [email protected] > Cc: "[email protected]" <[email protected]> > Date: Friday, 15 May, 2015, 2:51 > > On Thu, May 14, 2015 at > 10:22 PM, Peter Norwich > <[email protected]> > wrote: > >>> So your case if about > just blindly push bulk docs from time to time and not care > about any conflicts they may produce? > > > > No. My case in > detail: > > - client modify doc during > offline > > - when online, client sync with > server (this used to be _bulk_docs all_or_nothing) > > write should always be > succesful, so that offline change won't be lost > > - server returns winning rev along with > all possible conflicts > > - client resolve > conflicts manually > > - client save the > latest _rev for next sync. > > > > tldr: write always success, read returns > all conflicts. > > See this proposal > written 3 years ago https://gist.github.com/rnewson/2387973 > > Point number 1 is exactly what I need. > > all_or_nothing couldn't be > implemented as we can promise no more > semantic that lies behind it. > > So what could you do: > - use _bulk_docs with new_edits: false > introducing conflicts. For the > new docs > required _rev replace with dummy uuid; > - > wait for merge or apply manually > https://github.com/apache/couchdb-chttpd/pull/33 > patch in order to > fetch all conflicts in > bulk (as you know all your docs ids); > - > proceed with your old logic as you have now all the revs and > all the > conflicts. > > Not sure if Point number 1 from referenced > approach will be in 2.0, > but so far it is > not. > > -- > ,,,^..^,,, > -- Sent Using Firefox OS
