couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Randall Leeds (Closed) (JIRA)" <>
Subject [jira] [Closed] (COUCHDB-336) Would like errors in map function to be reported to client
Date Thu, 19 Jan 2012 23:46:41 GMT


Randall Leeds closed COUCHDB-336.

    Resolution: Won't Fix

No update in well over a year. I looked into this in light of my recent attempts to clean
up JS error reporting. I think it's debatable whether or not this type of error should be
sent to the client at all.

It's not a matter of evalcx not reporting the error. The error is reported, it's just not
reported through to HTTP. Doing so would require a major change to the way errors behave in
the map/reduce indexer. Since re-requesting a view like this does not cause the error to be
logged in the couch.log if the index is already built, in order to really change this we would
have to cause the whole index to be invalid whenever any errors are throw while mapping any
documents. That seems to me like a nasty thing to do to people.
> Would like errors in map function to be reported to client
> ----------------------------------------------------------
>                 Key: COUCHDB-336
>                 URL:
>             Project: CouchDB
>          Issue Type: Wish
>         Environment: svn trunk 0.10.0a768591
>            Reporter: Brian Candler
>            Priority: Minor
> At the moment, if a runtime error occurs in a map function, the document is silently
excluded from the view and the client is none the wiser.
> $ curl -X PUT
> {"ok":true}
> $ curl -d '{"foo":"bar"}' -X PUT
> {"ok":true,"id":"doc1","rev":"1-3413565576"}
> $ curl -d '{"food":"bar"}' -X PUT
> {"ok":true,"id":"doc2","rev":"1-2088327893"}
> # Example 1: map function calls undefined function
> $ curl -d '{"map":"function(doc) { emitt(null,null); }"}' -H 'Content-Type: application/json'
> {"total_rows":0,"rows":[]}
> # Example 2: map function attempts to emit 'undefined'
> $ curl -d '{"map":"function(doc) { emit(doc._id,; }"}' -H 'Content-Type: application/json'
> {"total_rows":1,"offset":0,"rows":[
> {"id":"doc1","key":"doc1","value":"bar"}
> ]}
> Of course, errors are available in the server log:
> [Tue, 28 Apr 2009 08:40:39 GMT] [info] [<0.1276.0>] OS Process Log Message: function
raised exception (ReferenceError: emitt is not defined) with doc._id doc1
> [Tue, 28 Apr 2009 08:43:44 GMT] [info] [<0.1276.0>] OS Process Log Message: function
raised exception (Cannot encode 'undefined' value as JSON) with doc._id doc2
> But the client cannot see these, and worse, gets what appears to be a valid result set.
> I think there are two cases to consider.
> - in temporary views, it ought to be easy to do something: e.g. (1) return the full set
of failed docs with their errors, or (2) return a count of failed docs, or (3) just abort
on the first error
> - in permanent views, it might also be useful to return this information, but it could
be expensive to persist. Also, when you're querying for key X you might not want to see a
whole load of errors for unrelated docs. An error count might be OK though, similar to total_rows.
> The current behaviour may be useful, although I personally wouldn't want to rely on it,
especially as it generates errors in the log. That is, I would rather be forced to rewrite
example 2 as
>   function(doc) { if ( { emit(doc._id,; } }
> or
>   function(doc) { emit(doc._id, || null); }
> as appropriate.
> Workaround: users can manually wrap each of their map functions in a catcher which emits
a sentinel key/value pair containing the error. However they would still have to query the
key range which includes the error messages.

This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:!default.jspa
For more information on JIRA, see:


View raw message