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

Connection hangs on document update for multipart/related and transfer encoding chunked request

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Won't Fix
    • None
    • 1.7.0
    • HTTP Interface
    • None

    Description

      Script to reproduce:

      import pprint
      import requests
      
      body = [
          b'--996713c691ec4fd5b717ef2740893b78\r\n',
          b'Content-Type: application/json\r\n',
          b'\r\n',
          b'{"_id": "test","_attachments": {"foo": {"follows": true, "content_type": "text/plain", "length": 12}}}\r\n',
          b'--996713c691ec4fd5b717ef2740893b78\r\n',
          b'Content-Type: text/plain\r\n'
          b'Content-Disposition: attachment;filename="foo"\r\n'
          b'Content-Length: 12\r\n'
          b'\r\n',
          b'Time to Relax!',
          b'--996713c691ec4fd5b717ef2740893b78--\r\n'
      ]
      
      
      url = 'http://localhost:5984/db/test'
      headers = {
          'Content-Type': 'multipart/related; boundary="996713c691ec4fd5b717ef2740893b78"'
      }
      resp = requests.put(url, headers=headers, data=iter(body))
      pprint.pprint(resp.json())
      
      

      This runs a request:

      PUT /db/test HTTP/1.1
      Host: localhost:5984
      Accept-Encoding: gzip, deflate
      Transfer-Encoding: chunked
      User-Agent: python-requests/2.3.0 CPython/3.4.1 Linux/3.15.5-gentoo
      Accept: */*
      Content-Type: multipart/related; boundary="996713c691ec4fd5b717ef2740893b78"
      
      24
      --996713c691ec4fd5b717ef2740893b78
      
      20
      Content-Type: application/json
      
      2
      
      
      68
      {"_id": "test","_attachments": {"foo": {"follows": true, "content_type": "text/plain", "length": 14}}}
      
      24
      --996713c691ec4fd5b717ef2740893b78
      
      60
      Content-Type: text/plain
      Content-Disposition: attachment;filename="foo"
      Content-Length: 12
      
      
      e
      Time to Relax!
      26
      --996713c691ec4fd5b717ef2740893b78--
      
      0
      
      
      

      But connection hangs: CouchDB thinks that there have to more data while zero length chunk had been send and doesn't reply with anything back to client which had finished the request and awaits for the response.

      The problem could be "fixed" by specifying full Content-Length of multipart body in request, which kills all the idea of chunked transfer.

      Attachments

        Activity

          People

            Unassigned Unassigned
            kxepal Alexander Shorin
            Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: