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

Reply via email to