Tim, it seems to me that you have two high-level options:

(a) identify and fix the root cause of the contention or deadlock, whichever it turns out to be, or...

(b) serialize the requests in order to keep the contention or deadlock from causing problems.

My own preference would be (a) - it's probably the harder problem, but I dislike leaving known serialization points in an architecture.

However, you seem to be leaning toward (b). If so, you could simply reduce the number of threads on the task server and/or the http server. If either or both servers can only run one thread, then it will be impossible for multiple requests to interfere with each other.

-- Mike

On 2010-04-27 21:21, Tim Meagher wrote:
Hi folks,



I have a fairly intensive operation that is processing datasets with anywhere 
between 1 and 2,000 records.  Each dataset is inserted into a directory URI 
that kicks off a pipeline that includes a number of steps.  One of those steps 
includes making a call to a MarkLogic HTTP server (which for now is served from 
the same server as the request).



The request server has 4 CPUs and therefore 4 taskserver threads.  As records 
get loaded, then requests get queued to the HTTP server, but at some point I 
think I'm running into a deadlock situation in which all 4 task server threads 
are waiting on a response form the HTTP server.  I cannot collocate the two 
datasets on the same database for a variety of reasons, so I must use the HTTP 
server.



I'm wondering if there is a way to specify the maximum number of threads to use 
in the pipeline to avoid starving the HTTP service from responding?  BTW, the 
HTTP service will be moving to a 2 CPU (hence 2 task server thread) box.



Thank you!



Tim Meagher




_______________________________________________
General mailing list
General@developer.marklogic.com
http://xqzone.com/mailman/listinfo/general

Reply via email to