
xdmp.documentLocks( [uri as String[]] ) as Sequence
Returns the locks for one or more documents or directories. Returns the locks for all documents and directories in the database if no parameter is given.
| Parameters | |
|---|---|
| uri | A document URI. |
Note that the locks described here are relatively heavy persistent document locks for file system emulation through WebDAV, not relatively light transaction locks for database consistency.
xdmp.documentLocks("example.xml");
=>
<?xml version="1.0" encoding="ASCII"?>
<lock:lock xmlns:lock="http://marklogic.com/xdmp/lock">
<lock:lock-type>write</lock:lock-type>
<lock:lock-scope>exclusive</lock:lock-scope>
<lock:active-locks>
<lock:active-lock>
<lock:depth>0</lock:depth>
<lock:owner>
<DAV:href xmlns:DAV="DAV:">http://example.com/~user</DAV:href>
</lock:owner>
<lock:timeout>120</lock:timeout>
<lock:lock-token>http://marklogic.com/xdmp/locks/1c267a036b8480c3
</lock:lock-token>
<lock:timestamp>1290136652</lock:timestamp>
<sec:user-id xmlns:sec="http://marklogic.com/xdmp/security">
893641342095093063</sec:user-id>
</lock:active-lock>
</lock:active-locks>
</lock:lock>
// The time is in epoch time, which is seconds from the start
// of 1970, so this code does a little math on the values in
// the lock document to figure out how many seconds are left
// for the lock. Assumes a lock on /example.json, for example
// by running the following:
//
// declareUpdate();
// xdmp.lockAcquire("/example.json", "exclusive", "0", [], 120);
var lock = fn.head(xdmp.documentLocks("/example.json")).root;
var lockDuration = new Number;
lockDuration = fn.head(lock.xpath(
"/lock:lock/lock:active-locks/lock:active-lock/lock:timeout/fn:data(.)",
{"lock": "http://marklogic.com/xdmp/lock"}));
var currentEpochTime =
fn.round(fn.currentDateTime().toObject().getTime() / 1000) ;
// divide by 1000 to convert miliseconds to seconds
var startTime = new Number;
startTime = fn.head(lock.xpath(
"/lock:lock/lock:active-locks/lock:active-lock/lock:timestamp/fn:data(.)",
{"lock": "http://marklogic.com/xdmp/lock"}));
var endTime = new Number;
endTime = startTime + lockDuration;
var secondsLeft = endTime - currentEpochTime;
var res = [currentEpochTime, endTime, secondsLeft];
res;
=>
1290136837
1290136832
115
Stack Overflow: Get the most useful answers to questions from the MarkLogic community, or ask your own question.