couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "J. Lee Coltrane (Commented) (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (COUCHDB-1310) '/_restart' closes request socket before sending a response
Date Tue, 18 Oct 2011 01:10:10 GMT

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

J. Lee Coltrane commented on COUCHDB-1310:
------------------------------------------

I agree: If '/_restart' were to become a truly "useful" part of the api, it would need to
do a graceful shutdown.  This might be a useful feature to add, but it's certainly not provided
by the attached patch.

However, as it stands today, the tests *do* depend on the '/_restart' interface, and the issue
reported here appears to be the cause of a lot of the flakey test-suite behavior that I (and
others) have observed in 1.1.0.  This is especially true when accessing couchdb through a
proxy, as the proxy's handling of the dropped connection varies depending on the proxy implementation.
 Unfortunately, this is also one of the cases where the test suite would be most useful --
verifying the correctness of a custom reverse-proxy implementation for use in-front-of couchdb.

There are various notes in the dev-list archives about the tests hanging (and other flakey
behavior).
With this patch in place, I'm no longer seeing tests hang like that.  (I'm still seeing some
scattered issues from the test suite -- but no hanging)

                
> '/_restart' closes request socket before sending a response
> -----------------------------------------------------------
>
>                 Key: COUCHDB-1310
>                 URL: https://issues.apache.org/jira/browse/COUCHDB-1310
>             Project: CouchDB
>          Issue Type: Bug
>          Components: HTTP Interface
>    Affects Versions: 1.1
>         Environment: All platforms.  Tested on Ubuntu 10.10.
>            Reporter: J. Lee Coltrane
>            Priority: Minor
>             Fix For: 1.1
>
>         Attachments: 0001-fixed-_restart-closes-socket-before-sending-request.patch
>
>   Original Estimate: 0h
>  Remaining Estimate: 0h
>
> In 'couchdb_misc_handlers.erl', `handle_restart_req(...)` calls `couch_server_sup:restart_core_server()`
before sending the HTTP response.  This causes the current request's socket to be closed without
sending any response back to the client.  From the perspective of the HTTP client, the connection
is simply dropped - no response is ever received.  
> In addition to the obvious aesthetic problems here, the HTTP1.1 spec suggests a specific
(and non-desirable) client-side behavior for connections that drop like this. From RFC-2616
Section-8.2.4: "...if the client sees the connection close before receiving any status from
the server, the client SHOULD retry the request..." (http://tools.ietf.org/html/rfc2616#section-8.2.4).
 Any HTTP client that actually obeys this direction, would end up restarting the server multiple
times.
> I have a patch that fixes this issue. I will attach it to this report.
> This issue may be related to COUCHDB-946 (https://issues.apache.org/jira/browse/COUCHDB-946).

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message