[ 
https://issues.apache.org/jira/browse/OAK-1987?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Chetan Mehrotra updated OAK-1987:
---------------------------------

    Summary: LuceneIndex should access Lucene Directory if query involves 
FullTextSearch for cost calculation  (was: Exception in QueryIndex cost 
calculation breaks QueryEngine execution)

> LuceneIndex should access Lucene Directory if query involves FullTextSearch 
> for cost calculation
> ------------------------------------------------------------------------------------------------
>
>                 Key: OAK-1987
>                 URL: https://issues.apache.org/jira/browse/OAK-1987
>             Project: Jackrabbit Oak
>          Issue Type: Bug
>          Components: query
>            Reporter: Chetan Mehrotra
>             Fix For: 1.1, 1.0.4
>
>         Attachments: OAK-1987.patch
>
>
> Currently QueryEngine fetches cost for a query from each of the restered 
> QueryIndexs. In some cases it might happen that QueryIndex is not working 
> properly and that would prevent QueryEngine from executing the query even if 
> that QueryEngine is not going to handle that query. This is being seen in 
> particular with Lucene as when Lucene index gets corrupted it throws 
> exception like below.
> Such an exception would at time render complete system unusable as any query 
> execution on critical execution path would lead to failure of the whole call. 
> Fix - QueryEngine should catch any such exception and continue with obtaining 
> cost from other QueryIndexes
> {noformat}
> 23.07.2014 15:24:47.608 *ERROR* [qtp1341296555-176] 
> org.apache.jackrabbit.oak.plugins.index.lucene.IndexTracker Could not access 
> the Lucene index at /
> java.io.FileNotFoundException: segments_ci0
>         at 
> org.apache.jackrabbit.oak.plugins.index.lucene.OakDirectory.openInput(OakDirectory.java:102)
>         at org.apache.lucene.index.SegmentInfos.read(SegmentInfos.java:324)
>         at 
> org.apache.lucene.index.StandardDirectoryReader$1.doBody(StandardDirectoryReader.java:56)
>         at 
> org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:843)
>         at 
> org.apache.lucene.index.StandardDirectoryReader.open(StandardDirectoryReader.java:52)
>         at 
> org.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:66)
>         at 
> org.apache.jackrabbit.oak.plugins.index.lucene.IndexNode.<init>(IndexNode.java:88)
>         at 
> org.apache.jackrabbit.oak.plugins.index.lucene.IndexNode.open(IndexNode.java:56)
>         at 
> org.apache.jackrabbit.oak.plugins.index.lucene.IndexTracker.findIndexNode(IndexTracker.java:151)
>         at 
> org.apache.jackrabbit.oak.plugins.index.lucene.IndexTracker.acquireIndexNode(IndexTracker.java:127)
>         at 
> org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndex.getCost(LuceneIndex.java:180)
>         at 
> org.apache.jackrabbit.oak.plugins.index.aggregate.AggregateIndex.getCost(AggregateIndex.java:69)
>         at 
> org.apache.jackrabbit.oak.query.QueryImpl.getBestSelectorExecutionPlan(QueryImpl.java:817)
>         at 
> org.apache.jackrabbit.oak.query.QueryImpl.getBestSelectorExecutionPlan(QueryImpl.java:751)
>         at 
> org.apache.jackrabbit.oak.query.ast.SelectorImpl.prepare(SelectorImpl.java:278)
>         at 
> org.apache.jackrabbit.oak.query.QueryImpl.prepare(QueryImpl.java:531)
>         at 
> org.apache.jackrabbit.oak.query.QueryEngineImpl.executeQuery(QueryEngineImpl.java:167)
>         at 
> org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager.getReferences(IdentifierManager.java:221)
>         at 
> org.apache.jackrabbit.oak.security.user.MembershipProvider.getMembership(MembershipProvider.java:157)
>         at 
> org.apache.jackrabbit.oak.security.user.MembershipProvider.access$000(MembershipProvider.java:103)
>         at 
> org.apache.jackrabbit.oak.security.user.MembershipProvider$1.getNext(MembershipProvider.java:197)
>         at 
> org.apache.jackrabbit.oak.security.user.MembershipProvider$1.getNext(MembershipProvider.java:161)
>         at 
> org.apache.jackrabbit.commons.iterator.AbstractLazyIterator.hasNext(AbstractLazyIterator.java:39)
>         at com.google.common.collect.Iterators$5.hasNext(Iterators.java:542)
>         at 
> com.google.common.collect.TransformedIterator.hasNext(TransformedIterator.java:43)
>         at 
> com.google.common.collect.Iterators$7.computeNext(Iterators.java:645)
>         at 
> com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
>         at 
> com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
>         at 
> org.apache.jackrabbit.oak.security.user.AuthorizableIterator.hasNext(AuthorizableIterator.java:58)
>         at 
> org.apache.jackrabbit.commons.iterator.RangeIteratorAdapter.hasNext(RangeIteratorAdapter.java:132)
>         at 
> org.apache.jackrabbit.oak.security.principal.PrincipalProviderImpl.getGroupMembership(PrincipalProviderImpl.java:151)
>         at 
> org.apache.jackrabbit.oak.security.principal.PrincipalProviderImpl.getPrincipals(PrincipalProviderImpl.java:102)
>         at 
> org.apache.jackrabbit.oak.spi.security.principal.CompositePrincipalProvider.getPrincipals(CompositePrincipalProvider.java:66)
>         at 
> org.apache.jackrabbit.oak.spi.security.authentication.AbstractLoginModule.getPrincipals(AbstractLoginModule.java:493)
>         at 
> org.apache.jackrabbit.oak.security.authentication.token.TokenLoginModule.login(TokenLoginModule.java:141)
>         at 
> org.apache.felix.jaas.boot.ProxyLoginModule.login(ProxyLoginModule.java:52)
>         at sun.reflect.GeneratedMethodAccessor70.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:606)
>         at 
> javax.security.auth.login.LoginContext.invoke(LoginContext.java:762)
>         at 
> javax.security.auth.login.LoginContext.access$000(LoginContext.java:203)
>         at javax.security.auth.login.LoginContext$4.run(LoginContext.java:690)
>         at javax.security.auth.login.LoginContext$4.run(LoginContext.java:688)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at 
> javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:687)
>         at javax.security.auth.login.LoginContext.login(LoginContext.java:595)
>         at 
> org.apache.jackrabbit.oak.core.ContentRepositoryImpl.login(ContentRepositoryImpl.java:161)
>         at 
> org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl.login(RepositoryImpl.java:253)
>         at 
> com.adobe.granite.repository.impl.CRX3RepositoryImpl.login(CRX3RepositoryImpl.java:92)
>         at 
> org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl.login(RepositoryImpl.java:194)
>         at 
> org.apache.sling.jcr.base.AbstractSlingRepository2.login(AbstractSlingRepository2.java:297)
>         at 
> org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProviderFactory.getResourceProviderInternal(JcrResourceProviderFactory.java:289)
>         at 
> org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProviderFactory.getResourceProvider(JcrResourceProviderFactory.java:201)
>         at 
> org.apache.sling.resourceresolver.impl.tree.ResourceProviderFactoryHandler.login(ResourceProviderFactoryHandler.java:164)
>         at 
> org.apache.sling.resourceresolver.impl.tree.RootResourceProviderEntry.loginToRequiredFactories(RootResourceProviderEntry.java:95)
>         at 
> org.apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl.getResourceResolverInternal(CommonResourceResolverFactoryImpl.java:109)
>         at 
> org.apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl.getResourceResolver(CommonResourceResolverFactoryImpl.java:90)
>         at 
> org.apache.sling.resourceresolver.impl.ResourceResolverFactoryImpl.getResourceResolver(ResourceResolverFactoryImpl.java:93)
>         at 
> org.apache.sling.auth.core.impl.SlingAuthenticator.getResolver(SlingAuthenticator.java:760)
>         at 
> org.apache.sling.auth.core.impl.SlingAuthenticator.doHandleSecurity(SlingAuthenticator.java:483)
>         at 
> org.apache.sling.auth.core.impl.SlingAuthenticator.handleSecurity(SlingAuthenticator.java:438)
>         at 
> org.apache.sling.engine.impl.SlingHttpContext.handleSecurity(SlingHttpContext.java:121)
>         at 
> org.apache.felix.http.base.internal.context.ServletContextImpl.handleSecurity(ServletContextImpl.java:335)
>         at 
> org.apache.felix.http.base.internal.handler.ServletHandler.doHandle(ServletHandler.java:337)
>         at 
> org.apache.felix.http.base.internal.handler.ServletHandler.handle(ServletHandler.java:300)
>         at 
> org.apache.felix.http.base.internal.dispatch.ServletPipeline.handle(ServletPipeline.java:93)
>         at 
> org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:50)
>         at 
> org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:31)
>         at org.apache.sling.i18n.impl.I18NFilter.doFilter(I18NFilter.java:128)
>         at 
> org.apache.felix.http.base.internal.handler.FilterHandler.doHandle(FilterHandler.java:108)
>         at 
> org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:80)
>         at 
> org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:46)
>         at 
> org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:31)
>         at 
> org.apache.sling.security.impl.ReferrerFilter.doFilter(ReferrerFilter.java:290)
>         at 
> org.apache.felix.http.base.internal.handler.FilterHandler.doHandle(FilterHandler.java:108)
>         at 
> org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:80)
>         at 
> org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:46)
>         at 
> org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:31)
>         at 
> com.adobe.granite.license.impl.LicenseCheckFilter.doFilter(LicenseCheckFilter.java:298)
>         at 
> org.apache.felix.http.base.internal.handler.FilterHandler.doHandle(FilterHandler.java:108)
>         at 
> org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:80)
>         at 
> org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:46)
>         at 
> org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:31)
>         at 
> org.apache.felix.http.sslfilter.internal.SslFilter.doFilter(SslFilter.java:55)
>         at 
> org.apache.felix.http.base.internal.handler.FilterHandler.doHandle(FilterHandler.java:108)
>         at 
> org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:80)
>         at 
> org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:46)
>         at 
> org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:31)
>         at 
> org.apache.sling.featureflags.impl.FeatureManager.doFilter(FeatureManager.java:115)
>         at 
> org.apache.felix.http.base.internal.handler.FilterHandler.doHandle(FilterHandler.java:108)
>         at 
> org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:80)
>         at 
> org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:46)
>         at 
> org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:31)
>         at 
> org.apache.sling.engine.impl.log.RequestLoggerFilter.doFilter(RequestLoggerFilter.java:75)
>         at 
> org.apache.felix.http.base.internal.handler.FilterHandler.doHandle(FilterHandler.java:108)
>         at 
> org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:80)
>         at 
> org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:46)
>         at 
> org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:31)
>         at 
> org.apache.felix.http.base.internal.dispatch.FilterPipeline.dispatch(FilterPipeline.java:76)
>         at 
> org.apache.felix.http.base.internal.dispatch.Dispatcher.dispatch(Dispatcher.java:49)
>         at 
> org.apache.felix.http.base.internal.DispatcherServlet.service(DispatcherServlet.java:67)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
>         at 
> org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)
>         at 
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:501)
>         at 
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:229)
>         at 
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
>         at 
> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
>         at 
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
>         at 
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
>         at 
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
>         at 
> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
>         at 
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
>         at org.eclipse.jetty.server.Server.handle(Server.java:370)
>         at 
> org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494)
>         at 
> org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:971)
>         at 
> org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1033)
>         at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644)
>         at 
> org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
>         at 
> org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
>         at 
> org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:667)
>         at 
> org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
>         at 
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
>         at 
> org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
>         at java.lang.Thread.run(Thread.java:745)
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to