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

ASF subversion and git services commented on COUCHDB-2365:
----------------------------------------------------------

Commit f02a1013dc61f011ccb58f1fddb689a93795af98 in couchdb-couch's branch 
refs/heads/master from [~mikewallace]
[ https://git-wip-us.apache.org/repos/asf?p=couchdb-couch.git;h=f02a101 ]

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