[ 
https://issues.apache.org/jira/browse/COUCHDB-2295?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15888685#comment-15888685
 ] 

ASF GitHub Bot commented on COUCHDB-2295:
-----------------------------------------

Github user tonysun83 commented on the issue:

    https://github.com/apache/couchdb-chttpd/pull/156
  
    @davisp: You're right, I was confusing the streaming of requests with 
header Transfer-Encoding: chunked. Just because multipart requests are streamed 
doesn't mean that it used Transfer-Encoding:chunked.  It can use 
Transfer-Encoding:chunked, and that is where it's a little more complex. 
Interestingly, the special situation where we do both multipart + chunked is 
still broken?
    https://issues.apache.org/jira/browse/COUCHDB-2295
    
    We also have to figure out what happens when we upgrade a cluster and the 
document size is set to something small and now all of a sudden certain 
documents can't be updated because they exceed the limit.
    



> Connection hangs on document update for multipart/related and transfer 
> encoding chunked request
> -----------------------------------------------------------------------------------------------
>
>                 Key: COUCHDB-2295
>                 URL: https://issues.apache.org/jira/browse/COUCHDB-2295
>             Project: CouchDB
>          Issue Type: Bug
>          Components: HTTP Interface
>            Reporter: Alexander Shorin
>             Fix For: 1.7.0
>
>
> Script to reproduce:
> {code}
> 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())
> {code}
> This runs a request:
> {code}
> 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
> {code}
> 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.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to