couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF subversion and git services (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (COUCHDB-2365) Failing multipart requests leave dangling couch_stream processes
Date Wed, 29 Oct 2014 23:20:34 GMT

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

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

Commit f02a1013dc61f011ccb58f1fddb689a93795af98 in couchdb-couch's branch refs/heads/2365-fix-failed-multipart-process-leak
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)

Mime
View raw message