couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stéphane Alnet (JIRA) <j...@apache.org>
Subject [jira] [Created] (COUCHDB-1893) Allow replication filters to meaningfully apply to deleted documents
Date Mon, 23 Sep 2013 08:25:02 GMT
Stéphane Alnet created COUCHDB-1893:
---------------------------------------

             Summary: 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

Mime
View raw message