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

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Won't Fix
    • Affects Version/s: None
    • Fix Version/s: 1.7.0
    • Component/s: HTTP Interface
    • Labels:
      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

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

              Dates

              • Created:
                Updated:
                Resolved: