[MarkLogic Dev General] How to get time remaining on document locks
Danny Sokolsky
Danny.Sokolsky at marklogic.com
Thu Nov 18 19:37:20 PST 2010
The timestamp is in epoch time, so you just have to do a little epoch math to figure out how many seconds are left.
Here is an example that does that (thanks for the inspiration Mike).
xquery version "1.0-ml";
(:
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.xml, for example
by running the following:
xquery version "1.0-ml";
declare namespace DAV="DAV:";
xdmp:lock-acquire("/example.xml",
"exclusive",
"0",
<DAV:href>http://example.com/~user</DAV:href>,
xs:unsignedLong(120))
:)
let $lock := xdmp:document-locks("/example.xml")
let $lock-duration :=
$lock/lock:lock/lock:active-locks/lock:active-lock/
lock:timeout/fn:data(.)
let $current-epoch-time :=
fn:round(
( fn:current-dateTime() - xs:dateTime("1970-01-01T00:00:00-00:00") )
div xs:dayTimeDuration('PT1S') )
let $start-time :=
$lock/lock:lock/lock:active-locks/lock:active-lock/
lock:timestamp/fn:data(.)
let $end-time := $start-time + $lock-duration
let $seconds-left := $end-time - $current-epoch-time
return
($current-epoch-time, $start-time, $seconds-left)
=>
1290137798
1290137794
116
So when I ran this, there were about 116 seconds left on the lock.
Hope that helps.
-Danny
From: general-bounces at developer.marklogic.com [mailto:general-bounces at developer.marklogic.com] On Behalf Of semerau at hotmail.com
Sent: Thursday, November 18, 2010 3:30 PM
To: general at developer.marklogic.com
Subject: [MarkLogic Dev General] How to get time remaining on document locks
>From the documentation, xdmp:document-locks function returns data that looks like this:
xdmp:document-locks("example.xml")
=> <lock:lock>
<lock:active-locks>
<lock:active-lock>
<lock:lock-type>write</lock:lockt-ype>
<lock:lock-scope>exclusive</lock:lock-scope>
<lock:depth>infinity</lock:depth>
<lock:owner>
http://example.com/~user
</lock:owner>
<lock:timeout>5000</lock:timeout>
<lock:lock-token>
http://marklogic.com/xdmp/locks/e71d4fae
</lock:lock-token>
<lock:timestamp>5234768</lock:timestamp>
<sec:user-id>52378234768</sec:user-id>
</lock:active-lock>
</lock:active-locks>
</lock:lock>
What I want to figure out is how much time is left for the lock. I see the timeout duration, but I can't figure out how to use the timeout and the timestamp to give me a time of when the lock will actually expire. That timestamp doesn't look like a "time" stamp but rather a "query execution" stamp. Is there some function that I can pass the "timestamp" to an get the actual time that timestamp occurred?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://developer.marklogic.com/pipermail/general/attachments/20101118/1ec8bb67/attachment-0001.html
More information about the General
mailing list