Thomas Mueller created OAK-7256:
-----------------------------------
Summary: Query: option to wait for indexes to be updated
Key: OAK-7256
URL: https://issues.apache.org/jira/browse/OAK-7256
Project: Jackrabbit Oak
Issue Type: Improvement
Components: query
Reporter: Thomas Mueller
Fix For: 1.10
Sometimes (rarely, but still) queries should include the very latest changes,
even if the index is updated asynchronously. For example when running unit
test: data is added, and then a query is run to check if the data is there. The
problem with asynchronous indexes is, you don't know exactly how long you have
to wait. Often the index is updated quickly, and sometimes it takes a few
seconds.
What about extending the query syntax as follows:
Wait for all indexes (no matter which index is used for this query) - this
would be used rarely, just for testing:
{noformat}
/jcr:root/*
option(wait for all indexes timeout 60)
{noformat}
Wait for just those indexes (well, usually it's just one, but sometimes it's
multiple) that are needed for the given query. This query could also be used in
an application that strictly needs the very latest results, even for fulltext
queries. The "timeout" would mean "wait at most 10 seconds, and if not
up-to-date then throw an exeption", while "max 10" would mean "wait at most 10
seconds, but still run the query in any case".
{noformat}
/jcr:root/content//*[jcr:contains(., 'hello')]
option(wait for indexes max 10)
{noformat}
The query would wait, and once the indexes are up-to-date, return the requested
result.
So the syntax is (both SQL-2 and XPath):
{noformat}
<query> option(wait for [all] indexes
{ max | timeout } <numberOfSeconds>
[, <otherOptions> ] )
{noformat}
So other options can also be used (option traversal fail,...).
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)