[MarkLogic Dev General] Locking documents

Michael Blakeley michael.blakeley at marklogic.com
Wed Nov 5 10:41:53 PST 2008


Steve,

If I understand your situation correctly, and if I understand chapter 3 
of the Developers Guide correctly, the transaction model should lock the 
documents for you, and you shouldn't need anything extra. You might want 
to review that chapter to see how the transaction model works 
(http://developer.marklogic.com/pubs/).

-- Mike

Steve wrote:
> I've got an XQuery module that has an if-then-else statement that
> inserts data into a document. The basic flow is:
> 
> let $testNode := doc($docName)/doc/keywords/keyword[@value eq $testKeyword]
>   return
>   (
>      if (fn:exists($testNode)) then
>      (
>         (: Update the document by replacing the $testNode :)
>      )
>     else
>     (
>        (: Update the document by inserting a new node :)
>      )
>   )
> 
> I'm invoking this module using the Java XCC API. The Java program that
> executes the request has multiple threads, all connecting as the same
> MarkLogic user. The problem is that if two threads hit the
> fn:exists(..) check at the same time then multiple nodes are inserted.
> Is there any way that I can stop this happening by acquiring a lock on
> the document before updating it? I've looked at the
> xdmp:local-acquire(..) function, but that locks the document to the
> current user, and as the threads are connecting as the same user, this
> won't help the situation.
> _______________________________________________
> General mailing list
> General at developer.marklogic.com
> http://xqzone.com/mailman/listinfo/general



More information about the General mailing list