[
https://issues.apache.org/jira/browse/COUCHDB-682?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Filipe Manana updated COUCHDB-682:
----------------------------------
Affects Version/s: 0.10
0.10.2
0.11.1
0.11.2
1.0
1.0.1
Fix Version/s: 1.1
> Transfer-Encoding: chunked causes improper keepalive behaviour
> --------------------------------------------------------------
>
> Key: COUCHDB-682
> URL: https://issues.apache.org/jira/browse/COUCHDB-682
> Project: CouchDB
> Issue Type: Bug
> Components: HTTP Interface
> Affects Versions: 0.10, 0.10.1, 0.10.2, 0.11, 0.11.1, 0.11.2, 1.0, 1.0.1
> Environment: couchdbx 0.10.0 on OS X 10.5.x, and svn rev 919046
> (current HEAD of 0.11.x branch) under ubuntu 9.x
> Reporter: Chas Emerick
> Assignee: Filipe Manana
> Fix For: 1.1
>
> Attachments: couchdbdump.libpcap, put_reuse_tcp_connection.escript
>
>
> When using chunked transfer encoding with clutch (a clojure couchdb client
> lib and view server), I've found that read timeouts on PUTs are highly
> reliable on the second consecutive request to a couch instance.
> I dug around, and discovered (after sniffing the traffic) that what was
> manifesting as a read timeout from the JDK's http client was actually the
> connection being closed by couch, instead of being kept alive. The java http
> client is likely attempting to read from a dead connection, but it's not
> quite smart enough to realize it. Note that this *only* happens when chunked
> transfer encoding is enabled.
> A simple test with curl appears to reinforce my hypothesis (transcript at the
> bottom of this msg): notice the "Connection #0 seems to be dead" messages --
> looks like curl is a lot more graceful about re-establishing the lost
> connection than the JDK's http client is.
> ** Note that this requires two files to be uploaded at from /tmp/foo1 and
> /tmp/foo2
> [catapult:~] chas% curl -X DELETE http://localhost:5984/chunkedtest ; curl -X
> PUT http://localhost:5984/chunkedtest ; curl -v -T "/tmp/foo[1-2]" -H
> "Transfer-Encoding: chunked" http://localhost:5984/chunkedtest/
> {"error":"not_found","reason":"missing"}
> {"ok":true}
> * About to connect() to localhost port 5984 (#0)
> * Trying ::1... Connection refused
> * Trying fe80::1... Connection refused
> * Trying 127.0.0.1... connected
> * Connected to localhost (127.0.0.1) port 5984 (#0)
> > PUT /chunkedtest/foo1 HTTP/1.1
> > User-Agent: curl/7.16.3 (powerpc-apple-darwin9.0) libcurl/7.16.3
> > OpenSSL/0.9.7l zlib/1.2.3
> > Host: localhost:5984
> > Accept: */*
> > Transfer-Encoding: chunked
> > Expect: 100-continue
> >
> < HTTP/1.1 100 Continue
> < HTTP/1.1 201 Created
> < Server: CouchDB/0.10.0 (Erlang OTP/R13B)
> < Location: http://localhost:5984/chunkedtest/foo1
> < Etag: "1-5b9bf8556d9846a224332d3f7435fd89"
> < Date: Thu, 04 Mar 2010 22:01:40 GMT
> < Content-Type: text/plain;charset=utf-8
> < Content-Length: 67
> < Cache-Control: must-revalidate
> <
> {"ok":true,"id":"foo1","rev":"1-5b9bf8556d9846a224332d3f7435fd89"}
> * Connection #0 to host localhost left intact
> * Connection #0 seems to be dead!
> * Closing connection #0
> * About to connect() to localhost port 5984 (#0)
> * Trying ::1... Connection refused
> * Trying fe80::1... Connection refused
> * Trying 127.0.0.1... connected
> * Connected to localhost (127.0.0.1) port 5984 (#0)
> > PUT /chunkedtest/foo2 HTTP/1.1
> > User-Agent: curl/7.16.3 (powerpc-apple-darwin9.0) libcurl/7.16.3
> > OpenSSL/0.9.7l zlib/1.2.3
> > Host: localhost:5984
> > Accept: */*
> > Transfer-Encoding: chunked
> > Expect: 100-continue
> >
> < HTTP/1.1 100 Continue
> < HTTP/1.1 201 Created
> < Server: CouchDB/0.10.0 (Erlang OTP/R13B)
> < Location: http://localhost:5984/chunkedtest/foo2
> < Etag: "1-5b9bf8556d9846a224332d3f7435fd89"
> < Date: Thu, 04 Mar 2010 22:01:40 GMT
> < Content-Type: text/plain;charset=utf-8
> < Content-Length: 67
> < Cache-Control: must-revalidate
> <
> {"ok":true,"id":"foo2","rev":"1-5b9bf8556d9846a224332d3f7435fd89"}
> * Connection #0 to host localhost left intact
> * Closing connection #0
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.