Uploaded image for project: 'CouchDB'
  1. CouchDB
  2. COUCHDB-3131

Valid JSON rejected in _changed query with filter

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Won't Fix
    • 2.0.0
    • None
    • HTTP Interface
    • 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.

      Attachments

        Activity

          People

            Unassigned Unassigned
            sam@rfc1149.net Samuel Tardieu
            Votes:
            1 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: