[ 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)