Difference between revisions of "Job Module"
| Line 42: | Line 42: | ||
|- | |- | ||
| '''Summary''' | | '''Summary''' | ||
| − | |Returns information on all jobs that are currently queued | + | |Returns information on all jobs that are currently registered. The list includes scheduled, queued, running jobs, and finished jobs with a cached result. The returned elements have elements with the job id, the type (XQuery, a command, REST, RESTXQ) and the user who started flag. Depending on the type of the job, additional attributes will be added: |
| + | * If the result of a job will be cached, a <code>cache</code> attribute will be added. | ||
| + | * If the job will be repeated, a <code>start</code> attribute indicates the next start time. | ||
|- | |- | ||
| '''Examples''' | | '''Examples''' | ||
| Line 48: | Line 50: | ||
* <code>jobs:list-details()</code> returns information on the currently running job and possibly others: | * <code>jobs:list-details()</code> returns information on the currently running job and possibly others: | ||
<pre class="brush:xml"> | <pre class="brush:xml"> | ||
| − | <job id="job1" type="XQuery | + | <job id="job1" type="XQuery" state="running" user="admin" cached="false" duration="PT0.001S"> |
XQUERY jobs:list-details() | XQUERY jobs:list-details() | ||
</job> | </job> | ||
| Line 165: | Line 167: | ||
) | ) | ||
</pre> | </pre> | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
|} | |} | ||
Revision as of 14:17, 3 July 2016
This XQuery Module provides functions for organizing queued and running jobs (commands, queries, REST, RESTXQ and WebDAV requests).
Contents
Conventions
All functions in this module are assigned to the http://basex.org/modules/jobs namespace, which is statically bound to the jobs prefix. Errors will be bound to the same prefix.
Functions
jobs:current
| Signatures | jobs:current() as xs:string
|
| Summary | Returns the id of the current job. |
jobs:list
| Signatures | jobs:list() as xs:string*
|
| Summary | Returns the ids of all jobs that are currently queued or executed. |
| Examples |
|
jobs:list-details
| Signatures | jobs:list-details() as element(job)*jobs:list-details($id as xs:string) as element(job)*
|
| Summary | Returns information on all jobs that are currently registered. The list includes scheduled, queued, running jobs, and finished jobs with a cached result. The returned elements have elements with the job id, the type (XQuery, a command, REST, RESTXQ) and the user who started flag. Depending on the type of the job, additional attributes will be added:
|
| Examples |
<job id="job1" type="XQuery" state="running" user="admin" cached="false" duration="PT0.001S"> XQUERY jobs:list-details() </job> |
jobs:finished
| Signatures | jobs:finished($id as xs:string) as xs:boolean
|
| Summary | Indicates if the evaluation of a job with the specified $id has finished:
|
jobs:stop
| Signatures | jobs:stop($id as xs:string) as empty-sequence()
|
| Summary | Cancels the execution of a job with the specified $id, drops the cached result of a query, or cancels a scheduled job. Unknown ids are ignored. All jobs are gracefully stopped; it is up to the process to decide when it is safe to shut down.
|
Asynchronous Execution
Asynchronous query execution is recommendable if a client does not, or cannot, wait until a request is fully processed. This is e. g. the case with web browsers, which will usually cancel a request after a specific timeout. In such cases, you can use asynchronous execution to trigger another server-side process, which will start the time-consuming process, and fetch the result later on as soon as it is available.
jobs:schedule
| Signatures | jobs:schedule($query as xs:string) as xs:stringjobs:schedule($query as xs:string, $bindings as map(*)?) as xs:stringjobs:schedule($query as xs:string, $bindings as map(*)?, $options as map(xs:string, xs:string)) as xs:string |
| Summary | Schedules the execution of the supplied $query and returns a query id. The query will be queued, and the result will optionally be cached. Queries may be updating. Variables and context items can be declared via $bindings (see xquery:eval for more details). The $options parameter contains scheduling options:
|
| Errors | overflow: Query execution is rejected, because too many jobs are queued or being executed. CACHETIMEOUT can be decreased if the default setting is too restrictive.range: A specified time or duration is out of range.
|
| Examples |
jobs:schedule("1+3", (), map { 'cache': true() })
jobs:schedule("import module namespace mail='mail'; mail:send('Happy birthday!')",
(), map { 'start': '2018-09-01T06:00:00' })}}
declare %rest:POST("{$query}") %rest:path('/start-scheduling') function local:start($query) {
jobs:schedule($query, (), map { 'start': '02:00:00', 'interval': 'P1D' })
};
declare %rest:path('/stop-scheduling/{$id}') function local:stop($id) {
jobs:stop($id)
};
jobs:schedule("prof:sleep(1500)", (), map { 'interval': 'PT1S' })
|
jobs:result
| Signatures | jobs:result($id as xs:string) as item()*
|
| Summary | Returns the cached result of a query with the specified job $id:
|
| Errors | running: the job is still running.unknown: the supplied id is unknown: The id is unknown, or the result has already been retrieved. |
| Examples |
declare %rest:path('/result/{$id}') function local:result($id) {
jobs:result($id)
};
let $query := jobs:schedule('(1 to 10000000)[. = 1]', map{}, map{ 'cache': true() })
return (
hof:until(
function($f) { jobs:finished($query) },
function($f) { prof:sleep(10) },
()
),
jobs:result($query)
)
|
Errors
range| Code | Description |
|---|---|
unknown
|
The supplied query id is unknown or not available anymore. |
running
|
A query is still running. |
overflow
|
Too many queries or query results are queued. |
| A specified time or duration is out of range. |
Changelog
The module was introduced with Version 8.5.