[ 
https://issues.apache.org/jira/browse/OAK-8343?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16850604#comment-16850604
 ] 

Thomas Mueller commented on OAK-8343:
-------------------------------------

What might work is: even if indexing isn't done indexing yet, allow it to be 
used (if configured to do so). If it is in fact used, it should return an empty 
result. So the query will work, just the result is empty. (That would resolve 
the above problem, but can have unwanted side effects as the result is empty. 
Also, need to ensure cost isn't very low, in order to ensure the index isn't 
used for the wrong queries.)

> Allow queries to be delayed until an index is available
> -------------------------------------------------------
>
>                 Key: OAK-8343
>                 URL: https://issues.apache.org/jira/browse/OAK-8343
>             Project: Jackrabbit Oak
>          Issue Type: Improvement
>          Components: lucene, query
>            Reporter: Thomas Mueller
>            Assignee: Thomas Mueller
>            Priority: Major
>             Fix For: 1.14.0
>
>         Attachments: OAK-8343-b.patch, OAK-8343.patch
>
>
> Currently, indexes are built asynchronously. That is, if an index definition 
> is added, the index is eventually built, but it's quite hard to say when it 
> is ready for queries. This can be specially a problem right after the initial 
> repository initialization, or after an upgrade.
> In theory, system startup could be delayed until all indexes are ready (e.g. 
> set the "reindex" flag for important indexes, and at startup, wait until the 
> "reindex" flag is set to "false"). However, doing that would block threads 
> that _don't_ need an index. It would be better to only block threads that 
> actually do run queries. That would make startup deterministic, without 
> delaying other threads unnecessarily.
> To solve the problem, we can add a property "waitForIndex" in the index 
> definition (just Lucene indexes is fine for now, as those are the important 
> asynchronous ones). If set, then queries that potentially use those indexes 
> are delayed, until the indexes are ready for sure. Reindex would need to 
> remove that property (the same as it removes e.g. refresh or sets reindex to 
> false). For added security, queries are only blocked as long as "reindex" is 
> also set to true (this ensures that waitForIndex is removed eventually), and 
> waiting should time out after 2 minutes, to ensure the feature doesn't block 
> startup forever if indexing fails for some reason.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to