Alexander Shorin created COUCHDB-2333:
-----------------------------------------
Summary: Should return error instead of closing connection on
invalid subquery for multirange view request
Key: COUCHDB-2333
URL: https://issues.apache.org/jira/browse/COUCHDB-2333
Project: CouchDB
Issue Type: Bug
Security Level: public (Regular issues)
Components: View Server Support
Reporter: Alexander Shorin
The case: we have a view that produces the following output
{code}
{
"offset": 0,
"rows": [
{
"id": "d57078236372da6b4c782bded8000a4b",
"key": 1,
"value": null
},
{
"id": "d57078236372da6b4c782bded8000a4b",
"key": 2,
"value": null
},
{
"id": "d57078236372da6b4c782bded8000a4b",
"key": 3,
"value": null
},
{
"id": "d57078236372da6b4c782bded8000a4b",
"key": 4,
"value": null
},
{
"id": "d57078236372da6b4c782bded8000a4b",
"key": 5,
"value": null
}
],
"total_rows": 5
}
{code}
When the first subquery in multirange view request contains an error CouchDB
reports about it and doesn't process other ranges:
{code}curl -v -XPOST http://localhost:15984/test/_design/test/_view/passed -d
'{"queries":[{"startkey": 1, "endkey": null}, {"startkey":4,"endkey":4}]}'{code}
{code}
< HTTP/1.1 400 Bad Request
< X-CouchDB-Body-Time: 0
< X-Couch-Request-ID: f8ae85d8
* Server CouchDB/a7dc712 (Erlang OTP/17) is not blacklisted
< Server: CouchDB/a7dc712 (Erlang OTP/17)
< Date: Fri, 19 Sep 2014 19:50:28 GMT
< Content-Type: text/plain; charset=utf-8
< Content-Length: 133
< Cache-Control: must-revalidate
<
{"error":"query_parse_error","reason":"No rows can match your key range,
reverse your start_key and end_key or set descending=true"}
{code}
While it was able to process the second subquery, well, it's ok reporting about
an error. However, it doesn't makes clear which subquery is wrong.
If the second subquery is invalid things starts going wrong:
{code}curl -v --raw -XPOST
http://localhost:15984/test/_design/test/_view/passed -d
'{"queries":[{"startkey": 1, "endkey": 2}, {"startkey":4,"endkey":null}]}'{code}
{code}
< HTTP/1.1 200 OK
< X-CouchDB-Body-Time: 0
< X-Couch-Request-ID: cf5fc515
< Transfer-Encoding: chunked
* Server CouchDB/a7dc712 (Erlang OTP/17) is not blacklisted
< Server: CouchDB/a7dc712 (Erlang OTP/17)
< ETag: d57078236372da6b4c782bded800544c
< Date: Fri, 19 Sep 2014 19:53:45 GMT
< Content-Type: text/plain; charset=utf-8
< Cache-Control: must-revalidate
<
c
{"results":[
27
{"total_rows":5,"offset":0,"rows":[
3e
{"id":"d57078236372da6b4c782bded8000a4b","key":1,"value":null}
41
,
{"id":"d57078236372da6b4c782bded8000a4b","key":2,"value":null}
4
]}
{code}
CouchDB terminates chunked transfer non graceful (notice --raw flag for curl
call) and doesn't reports about any errors.
It would be awesome to see something like instead:
{code}
{"results":[
{"total_rows":5,"offset":0,"rows":[
{"id":"d57078236372da6b4c782bded8000a4b","key":1,"value":null},
{"id":"d57078236372da6b4c782bded8000a4b","key":2,"value":null}
]},
{"error":"query_parse_error","reason":"No rows can match your key range,
reverse your start_key and end_key or set descending=true"}
]}
{code}
So client will be able to figure by itself which subquery was wrong to pop the
error on top.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)