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

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

GitHub user mikewallace1979 opened a pull request:

    https://github.com/apache/couchdb-couch/pull/11

    2365 fix failed multipart process leak

    Test is added in a separate commit to make verifying the fix easier - the 
two commits will be squashed together before merge.
    
    COUCHDB-2365

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/apache/couchdb-couch 
2365-fix-failed-multipart-process-leak

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/couchdb-couch/pull/11.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #11
    
----
commit 8f9bd3e6c762b58a2d7d3bdc06131a606d904783
Author: Mike Wallace <mikewall...@apache.org>
Date:   2014-10-07T22:45:11Z

    [squash] Add a test for COUCHDB-2365

commit fd7f88895240b6fb5f8672ab48d8d18655803ee9
Author: Mike Wallace <mikewall...@apache.org>
Date:   2014-10-07T16:09:34Z

    Make couch_stream monitor the stream opener
    
    This commit fixes a process leak which would happen when a process
    opened a couch_stream and exited with reason normal before closing
    the stream.
    
    This patch makes the couch_stream gen_server monitor the process
    which opens the stream. When that monitor sends an exit signal
    the couch_stream gen_server is stopped and the process dies.
    
    Closes COUCHDB-2365

----


> Failing multipart requests leave dangling couch_stream processes
> ----------------------------------------------------------------
>
>                 Key: COUCHDB-2365
>                 URL: https://issues.apache.org/jira/browse/COUCHDB-2365
>             Project: CouchDB
>          Issue Type: Bug
>      Security Level: public(Regular issues) 
>          Components: Database Core
>    Affects Versions: 1.5.1, 1.6.0
>            Reporter: Mike Wallace
>            Priority: Minor
>             Fix For: 2.0.0
>
>
> Multipart requests spawn a couch_stream gen_server when couch_stream:open/2 
> is called in couch_db:with_stream/3 [1]. Currently this gen_server will only 
> be stopped when couch_db:with_stream/3 calls couch_stream:close/1 which 
> happens after the callback Fun is executed [2]. If anything goes wrong before 
> closing the stream then the couch_stream gen_server will exit as long as the 
> process that opened the stream exits with a reason other than normal (since 
> the processes are linked). However, if the process which opened the stream 
> exits with reason normal before closing the stream then the process will live 
> indefinitely.
> Ordinarily this is not particularly bothersome however if the volume of 
> failing multipart requests is high the resources consumed by these dangling 
> processes can be significant (consuming all available memory in the worst 
> case).
> This can be reproduced by making failing multipart requests and observing the 
> number of processes with initial call couch_stream:init/1 e.g.: 
> https://gist.github.com/mikewallace1979/baad43ecfc01506ba8c5
> [1] 
> https://github.com/apache/couchdb-couch/blob/master/src/couch_db.erl#L1108-L1121
> [2] 
> https://github.com/apache/couchdb-couch/blob/master/src/couch_db.erl#L1123-L1133



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to