Mike Wallace created COUCHDB-2365:
-------------------------------------
Summary: 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
Reporter: Mike Wallace
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)