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)

Reply via email to