[ 
https://issues.apache.org/jira/browse/COUCHDB-1893?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13774383#comment-13774383
 ] 

Alexander Shorin commented on COUCHDB-1893:
-------------------------------------------

`old_doc` may not been exists after compaction, so you're returning to the 
source of issue.
Instead of this, have you thought about adding very trivial logic to your 
filter functions to accept or discard documents with `_deleted:true` if some 
special query argument or header exists?
                
> Allow replication filters to meaningfully apply to deleted documents
> --------------------------------------------------------------------
>
>                 Key: COUCHDB-1893
>                 URL: https://issues.apache.org/jira/browse/COUCHDB-1893
>             Project: CouchDB
>          Issue Type: Improvement
>          Components: JavaScript View Server
>            Reporter: Stéphane Alnet
>
> A document that is deleted using the DELETE command will be presented to a 
> replication filter as an empty record with only a `_deleted:true` field. A 
> replication filter can then only use the document ID to decide whether or not 
> to propagate the deletion; in most cases this is not sufficient, and one may 
> have to pass along deletion documents for IDs that would not have been 
> replicated by the filter.
> This might lead to document IDs being leaked to the target database, which 
> might be undesirable; more importantly if the goal of filtering was to build 
> a smaller subset of the source database (for example to replicate a very 
> large database to a device that has smaller storage space), those deletion 
> documents might overfill the database (they never get compacted).
> I had somewhat documented this issue on the Wiki 
> (http://wiki.apache.org/couchdb/Replication#Filtered_Replication) a while 
> back but never got to add it to JIRA.
> Dave Cottlehuber on the PouchDB list suggested to use PUT with a 
> `_deleted:true` field to work around the problem (the PUT body can then 
> contain data sufficient to enable the filter to work). However we're still 
> stuck in case DELETE was used instead.
> My suggestion is to expand the replication filter API to add an optional 
> third argument
>     filter(doc,req,old_doc)
> where old_doc if present references the version of the document that will get 
> deleted. It is then up to the filter to use the _deleted flag in `doc` and 
> the values in `old_doc`.
> (It might be useful/meaningful/easier to add old_doc in all cases; at this 
> point I'm only suggesting to add it in the case doc contains a _deleted 
> field.)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to