couch_query_servers pool deadlock when running "os_process_limit" indexers
--------------------------------------------------------------------------

                 Key: COUCHDB-1375
                 URL: https://issues.apache.org/jira/browse/COUCHDB-1375
             Project: CouchDB
          Issue Type: Bug
          Components: View Server Support
    Affects Versions: 1.1
            Reporter: Filipe Manana


When using external view servers, such as couchjs for example, if we trigger 
"os_process_limit" (or more) index updates simultaneously, we can reach a 
deadlock case.

The issue is that each index updater will acquire a couchjs (os_proc record) 
process from couch_query_servers to apply the map function against each 
document. After the indexer finishes, it will release (return to 
couch_query_servers) the couchjs process used for the maps.

However, while the indexer is writing to the btrees, if the reduce function is 
a JavaScript function (or any other language other than Erlang or a builtin 
reduce function), the function is called often to reduce key-values - this 
results in the view updater process to ask couch_query_servers for a another 
couchjs process (this is done on every reduce function call) - however 
"os_process_limit" couchjs processes are already allocated to 
"os_process_limit" indexers for the mapping.

The solution here would be to have the index updater to preallocate a couchjs 
process for the reduces and release it when it finishes (like it's done for the 
maps).

This only happens if the number of changes to index is greater than 500 (the 
work queue sizes).

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to