[
https://issues.apache.org/jira/browse/JCR-1213?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12542427
]
Marcel Reutegger commented on JCR-1213:
---------------------------------------
> But it is not correct that (1) does not solve anything to the original
> problem: instead of the CombinedIndexReader
> which is recreated all the time, I pass in the MultiIndexReader whose
> instance is kept as long as no indexes change.
If we can make the MultiIndexReader instance more stable in terms of re-using
it as many times as possible this will of course help us and keep cache entries
valid. But since this only applies to cases where there are no changes to the
workspace, it seems to me that this will not buy use much, except for special
occasions where the workspace is not modified for some time.
> This is at least what I understand from the mechanism, but I am not as
> familiar as you are with it ofcourse, so I
> might be off.
your understanding is correct. I guess we just have a differing judgment about
when and how often the cost of building cache entries and maintaining them
should be spent.
> UUIDDocId cache does not work properly because of weakReferences in
> combination with new instance for combined indexreader
> ---------------------------------------------------------------------------------------------------------------------------
>
> Key: JCR-1213
> URL: https://issues.apache.org/jira/browse/JCR-1213
> Project: Jackrabbit
> Issue Type: Improvement
> Components: query
> Affects Versions: 1.3.3
> Reporter: Ard Schrijvers
> Fix For: 1.4
>
>
> Queries that use ChildAxisQuery or DescendantSelfAxisQuery make use of
> getParent() functions to know wether the parents are correct and if the
> result is allowed. The getParent() is called recursively for every hit, and
> can become very expensive. Hence, in DocId.UUIDDocId, the parents are cached.
> Currently, docId.UUIDDocId's are cached by having a WeakRefence to the
> CombinedIndexReader, but, this CombinedIndexReader is recreated all the time,
> implying that a gc() is allowed to remove the 'expensive' cache.
> A much better solution is to not have a weakReference to the
> CombinedIndexReader, but to a reference of each indexreader segment. This
> means, that in getParent(int n) in SearchIndex the return
> return id.getDocumentNumber(this) needs to be replaced by return
> id.getDocumentNumber(subReaders[i]); and something similar in
> CachingMultiReader.
> That is all. Obviously, when a node/property is added/removed/changed, some
> parts of the cached DocId.UUIDDocId will be invalid, but mainly small indexes
> are updated frequently, which obviously are less expensive to recompute.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.