Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Won't Fix
-
2.0.0
-
None
-
None
Description
While testing 2.0.0-RC4, I noticed some oddities when giving a valid JSON payload to a POST _changes request involving a filter: only one document seem to go through the filter (and may or may not match) then nothing more is sent.
In short, everything works if you send a request with "Content-Type: application/json", "Content-Length: 0", and an empty payload. However, this is not valid JSON, as explained in issue COUCH-2583 for another command.
As an example, I have a "test" database with a "d/f" filter which contains a function testing that doc.name is equal to "foo".
Here is a query with an invalid JSON payload:
% curl -H "Content-Type: application/json" --data "" -v "http://localhost:5984/test/_changes?filter=d/f&feed=continuous&heartbeat=30000" * Trying ::1... * Connected to localhost (::1) port 5984 (#0) > POST /test/_changes?filter=d/f&feed=continuous&heartbeat=30000 HTTP/1.1 > Host: localhost:5984 > User-Agent: curl/7.50.1 > Accept: */* > Content-Type: application/json > Content-Length: 0 > < HTTP/1.1 200 OK < Cache-Control: must-revalidate < Content-Type: application/json < Date: Tue, 06 Sep 2016 12:16:32 GMT < Server: CouchDB/1df597f (Erlang OTP/17) < Transfer-Encoding: chunked < X-Couch-Request-ID: 422e7cd090 < X-CouchDB-Body-Time: 0 < {"seq":"2-g1AAAAFReJzLYWBg4MhgTmHgzcvPy09JdcjLz8gvLskBCjMlMiTJ____PyuRAYeCJAUgmWSPX40DSE08SE0GcyJTLpDHbpSamGpsaIyuHpcJCSAT6vHakscCJBkagBRQ2XxC6hZA1O0npO4ARN19QuoeQNSB3JcFALv_a5o","id":"t1","changes":[{"rev":"2-0d4850a48036a083e9f18f94f6cb9abe"}]} {"seq":"4-g1AAAAGneJzLYWBg4MhgTmHgzcvPy09JdcjLz8gvLskBCjMlMiTJ____PyuDOZExFyjAnmKZlmhibIauGIf2JAUgmWQPNYEBbIJ5okGimbFhCgNnaV5KalpmXmoKLt0OIN3xUN1MYN1GqYmpxobGxNqfADKhHmRCIgMONXksQJKhAUgBlc0npG4BRN1-RIgkJqaYWSSnEukiiCkHIKbcJ2TbA4g6kOuzAM6WhBY","id":"t3","changes":[{"rev":"1-bc98e8ae0f9c89fbc8c237dfc9bfe478"}]} {"seq":"11-g1AAAAIbeJyV0UsOgjAQBuAKGnXhGfQIhZq2rOQmOqVtkGC7UNd6E72J3kRvguWRQExIYDOTTPp_k3RyhNAi9SVaGWusVLGxqT1fcjf2AIl1URRZ6sPk5AZzGWnYEvr_uCcuNq6KXSOgSmCAgZJAouXVSKWPRsm-dFym903aq9KhAkUCMnT_oRRujTCrBK1JBFgPFMzUVXR3zSGP9h8wJzTkbJTyrJVXqwBIyhM1SnnXyqdVSCICqvgo5VsrnbtgHLCEie5dsh9GyaSG","id":"9a1c0e93e4aa88c45c3e38031d5cc7f3","changes":[{"rev":"1-bc98e8ae0f9c89fbc8c237dfc9bfe478"}]} {"seq":"12-g1AAAAIbeJyV0UsOgjAQBuAKGnXhGfQIhZq2rOQmOqVtkGC7UNd6E72J3kRvguWRQExIYDNNJvN_TWZyhNAi9SVaGWusVLGxqT1fctf2AIl1URRZ6sPk5BpzGWnYEvo_3BMXG1fFrhFQJTDAQEkg0fJqpNJHo2RfOi7T-ybtVelQgSIBGfr_oRRujTCrBK1JBFgPFMzUVXR3j0Me7R4wJzTkbJTyrJVXqwBIyhM1SnnXyqfdCUlEQBUfpXxrpXMXjAOWMNG9S_YDRymkhw","id":"9a1c0e93e4aa88c45c3e38031d5e6c11","changes":[{"rev":"1-bc98e8ae0f9c89fbc8c237dfc9bfe478"}]} {"seq":"13-g1AAAAIbeJyV0UsOgjAQBuAKGnXhGfQILTWlrOQmOqVtkGC7UNd6E72J3kRvguWRQExIYDOTTPp_k3RyhNAi9SVaGWusVLGxqT1fcjf2AIl1URRZ6sPk5AZzGWnYUvb_uCcuNq6KXSOgSggBA6NEouXVSKWPRsm-dFym903aq9KBAkUJHbr_UAq3RphVgtY0AqwHCmbqKrq75pBH-w-YUxbwcJTyrJVXqwBIxhM1SnnXyqdU_EqhiSBM8VHKt1Y6d8GYhEkounfJfkeJpIg","id":"t2","changes":[{"rev":"1-bc98e8ae0f9c89fbc8c237dfc9bfe478"}]}
(everything has been returned, it works, but I had to send an invalid empty payload which is not valid JSON)
However, if I try to send "{}" which is a valid JSON payload:
% curl -H "Content-Type: application/json" --data "{}" -v "http://localhost:5984/test/_changes?filter=d/f&feed=continuous&heartbeat=30000" * Trying ::1... * Connected to localhost (::1) port 5984 (#0) > POST /test/_changes?filter=d/f&feed=continuous&heartbeat=30000 HTTP/1.1 > Host: localhost:5984 > User-Agent: curl/7.50.1 > Accept: */* > Content-Type: application/json > Content-Length: 2 > * upload completely sent off: 2 out of 2 bytes
Nothing at all is sent back.
This is a regression as this request works against CouchDB 1.x.