You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "Andrew Hankinson (JIRA)" <ji...@apache.org> on 2017/11/22 22:17:01 UTC

[jira] [Commented] (SOLR-6357) Using query time Join in deleteByQuery throws ClassCastException

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

Andrew Hankinson commented on SOLR-6357:
----------------------------------------

I'm still seeing a problem related to this in Solr 7.0.1 (OSX) and 7.1.0 (RHEL7).

*Sample data:*

collections_sm is a dynamic multivalued string field. All others are string fields.

{code:json}
{
"id":"1234",
"object_id":"1234",
"type":"object"
"collections_sm":["printed books"]
}

{
"id":"4567",
"object_id":"1234",
"type":"surface"
}

{
"id":"7890",
"object_id":"1234",
"type":"image"
}
{code}

*Query:*

{code}
<delete><query>{!join from=id to=object_id}collections_sm:('printed books')</query></delete>
{code}

{code}
2017-11-22 22:00:20.802 INFO  (qtp466002798-19) [   x:mycore] o.a.s.u.p.LogUpdateProcessorFactory [mycore]  webapp=/solr path=/update params={commit=true}{deleteByQuery={!join from=id to=object_id}collections_sm:('printed books') (-1584805205294186496)} 0 5
2017-11-22 22:00:20.802 ERROR (qtp466002798-19) [   x:mycore] o.a.s.h.RequestHandlerBase org.apache.lucene.store.AlreadyClosedException: this IndexWriter is closed
{code}

What's more, is that this seems to put the index in a corrupt state -- it will not accept any more write or modification operations to the core until the data directory is deleted. Any attempts to make changes to the core will result in an error:


{code}
Caused by: java.lang.ClassCastException: org.apache.lucene.search.IndexSearcher cannot be cast to org.apache.solr.search.SolrIndexSearcher
	at org.apache.solr.search.JoinQuery.createWeight(JoinQParserPlugin.java:169)
	at org.apache.lucene.search.IndexSearcher.createWeight(IndexSearcher.java:734)
	at org.apache.lucene.search.BooleanWeight.<init>(BooleanWeight.java:54)
	at org.apache.lucene.search.BooleanQuery.createWeight(BooleanQuery.java:204)
	at org.apache.solr.update.DeleteByQueryWrapper.createWeight(DeleteByQueryWrapper.java:72)
	at org.apache.lucene.search.IndexSearcher.createWeight(IndexSearcher.java:734)
	at org.apache.lucene.search.IndexSearcher.createNormalizedWeight(IndexSearcher.java:724)
	at org.apache.lucene.index.FrozenBufferedUpdates.applyQueryDeletes(FrozenBufferedUpdates.java:687)
	at org.apache.lucene.index.FrozenBufferedUpdates.apply(FrozenBufferedUpdates.java:443)
	at org.apache.lucene.index.FrozenBufferedUpdates.apply(FrozenBufferedUpdates.java:324)
	at org.apache.lucene.index.DocumentsWriter$ResolveUpdatesEvent.process(DocumentsWriter.java:723)
	at org.apache.lucene.index.IndexWriter.processEvents(IndexWriter.java:5057)
	at org.apache.lucene.index.IndexWriter.processEvents(IndexWriter.java:5045)
	at org.apache.lucene.index.IndexWriter.getReader(IndexWriter.java:466)
	at org.apache.lucene.index.StandardDirectoryReader.doOpenFromWriter(StandardDirectoryReader.java:293)
	at org.apache.lucene.index.StandardDirectoryReader.doOpenIfChanged(StandardDirectoryReader.java:278)
	at org.apache.lucene.index.DirectoryReader.openIfChanged(DirectoryReader.java:235)
	at org.apache.solr.core.SolrCore.openNewSearcher(SolrCore.java:1987)
	at org.apache.solr.update.UpdateLog.openRealtimeSearcher(UpdateLog.java:648)
	at org.apache.solr.update.UpdateLog.deleteByQuery(UpdateLog.java:629)
	at org.apache.solr.update.DirectUpdateHandler2.deleteByQuery(DirectUpdateHandler2.java:534)
	at org.apache.solr.update.processor.RunUpdateProcessor.processDelete(RunUpdateProcessorFactory.java:78)
	at org.apache.solr.update.processor.UpdateRequestProcessor.processDelete(UpdateRequestProcessor.java:59)
	at org.apache.solr.update.processor.DistributedUpdateProcessor.doLocalDelete(DistributedUpdateProcessor.java:996)
	at org.apache.solr.update.processor.DistributedUpdateProcessor.versionDeleteByQuery(DistributedUpdateProcessor.java:1691)
	at org.apache.solr.update.processor.DistributedUpdateProcessor.doDeleteByQuery(DistributedUpdateProcessor.java:1595)
	at org.apache.solr.update.processor.DistributedUpdateProcessor.processDelete(DistributedUpdateProcessor.java:1404)
	at org.apache.solr.update.processor.LogUpdateProcessorFactory$LogUpdateProcessor.processDelete(LogUpdateProcessorFactory.java:124)
	at org.apache.solr.update.processor.UpdateRequestProcessor.processDelete(UpdateRequestProcessor.java:59)
	at org.apache.solr.update.processor.UpdateRequestProcessor.processDelete(UpdateRequestProcessor.java:59)
	at org.apache.solr.handler.loader.XMLLoader.processDelete(XMLLoader.java:366)
	at org.apache.solr.handler.loader.XMLLoader.processUpdate(XMLLoader.java:292)
	at org.apache.solr.handler.loader.XMLLoader.load(XMLLoader.java:188)
	at org.apache.solr.handler.UpdateRequestHandler$1.load(UpdateRequestHandler.java:97)
	at org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:68)
	... 33 more

2017-11-22 22:00:20.803 ERROR (qtp466002798-19) [   x:digital_bodleian_production] o.a.s.s.HttpSolrCall null:org.apache.lucene.store.AlreadyClosedException: this IndexWriter is closed
	at org.apache.lucene.index.IndexWriter.ensureOpen(IndexWriter.java:896)
	at org.apache.lucene.index.IndexWriter.ensureOpen(IndexWriter.java:910)
	at org.apache.lucene.index.IndexWriter.commit(IndexWriter.java:3377)
	at org.apache.solr.update.DirectUpdateHandler2.commit(DirectUpdateHandler2.java:679)
	at org.apache.solr.update.processor.RunUpdateProcessor.processCommit(RunUpdateProcessorFactory.java:93)
	at org.apache.solr.update.processor.UpdateRequestProcessor.processCommit(UpdateRequestProcessor.java:68)
	at org.apache.solr.update.processor.DistributedUpdateProcessor.doLocalCommit(DistributedUpdateProcessor.java:1950)
	at org.apache.solr.update.processor.DistributedUpdateProcessor.processCommit(DistributedUpdateProcessor.java:1926)
	at org.apache.solr.update.processor.LogUpdateProcessorFactory$LogUpdateProcessor.processCommit(LogUpdateProcessorFactory.java:160)
	at org.apache.solr.update.processor.UpdateRequestProcessor.processCommit(UpdateRequestProcessor.java:68)
	at org.apache.solr.update.processor.UpdateRequestProcessor.processCommit(UpdateRequestProcessor.java:68)
	at org.apache.solr.handler.RequestHandlerUtils.handleCommit(RequestHandlerUtils.java:69)
	at org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:72)
	at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:177)
	at org.apache.solr.core.SolrCore.execute(SolrCore.java:2484)
	at org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:720)
	at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:526)
	at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:382)
	at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:326)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1751)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:582)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
	at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:213)
	at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:119)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
	at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:335)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
	at org.eclipse.jetty.server.Server.handle(Server.java:534)
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:320)
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251)
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:283)
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:108)
	at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93)
	at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303)
	at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148)
	at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassCastException: org.apache.lucene.search.IndexSearcher cannot be cast to org.apache.solr.search.SolrIndexSearcher
	at org.apache.solr.search.JoinQuery.createWeight(JoinQParserPlugin.java:169)
	at org.apache.lucene.search.IndexSearcher.createWeight(IndexSearcher.java:734)
	at org.apache.lucene.search.BooleanWeight.<init>(BooleanWeight.java:54)
	at org.apache.lucene.search.BooleanQuery.createWeight(BooleanQuery.java:204)
	at org.apache.solr.update.DeleteByQueryWrapper.createWeight(DeleteByQueryWrapper.java:72)
	at org.apache.lucene.search.IndexSearcher.createWeight(IndexSearcher.java:734)
	at org.apache.lucene.search.IndexSearcher.createNormalizedWeight(IndexSearcher.java:724)
	at org.apache.lucene.index.FrozenBufferedUpdates.applyQueryDeletes(FrozenBufferedUpdates.java:687)
	at org.apache.lucene.index.FrozenBufferedUpdates.apply(FrozenBufferedUpdates.java:443)
	at org.apache.lucene.index.FrozenBufferedUpdates.apply(FrozenBufferedUpdates.java:324)
	at org.apache.lucene.index.DocumentsWriter$ResolveUpdatesEvent.process(DocumentsWriter.java:723)
	at org.apache.lucene.index.IndexWriter.processEvents(IndexWriter.java:5057)
	at org.apache.lucene.index.IndexWriter.processEvents(IndexWriter.java:5045)
	at org.apache.lucene.index.IndexWriter.getReader(IndexWriter.java:466)
	at org.apache.lucene.index.StandardDirectoryReader.doOpenFromWriter(StandardDirectoryReader.java:293)
	at org.apache.lucene.index.StandardDirectoryReader.doOpenIfChanged(StandardDirectoryReader.java:278)
	at org.apache.lucene.index.DirectoryReader.openIfChanged(DirectoryReader.java:235)
	at org.apache.solr.core.SolrCore.openNewSearcher(SolrCore.java:1987)
	at org.apache.solr.update.UpdateLog.openRealtimeSearcher(UpdateLog.java:648)
	at org.apache.solr.update.UpdateLog.deleteByQuery(UpdateLog.java:629)
	at org.apache.solr.update.DirectUpdateHandler2.deleteByQuery(DirectUpdateHandler2.java:534)
	at org.apache.solr.update.processor.RunUpdateProcessor.processDelete(RunUpdateProcessorFactory.java:78)
	at org.apache.solr.update.processor.UpdateRequestProcessor.processDelete(UpdateRequestProcessor.java:59)
	at org.apache.solr.update.processor.DistributedUpdateProcessor.doLocalDelete(DistributedUpdateProcessor.java:996)
	at org.apache.solr.update.processor.DistributedUpdateProcessor.versionDeleteByQuery(DistributedUpdateProcessor.java:1691)
	at org.apache.solr.update.processor.DistributedUpdateProcessor.doDeleteByQuery(DistributedUpdateProcessor.java:1595)
	at org.apache.solr.update.processor.DistributedUpdateProcessor.processDelete(DistributedUpdateProcessor.java:1404)
	at org.apache.solr.update.processor.LogUpdateProcessorFactory$LogUpdateProcessor.processDelete(LogUpdateProcessorFactory.java:124)
	at org.apache.solr.update.processor.UpdateRequestProcessor.processDelete(UpdateRequestProcessor.java:59)
	at org.apache.solr.update.processor.UpdateRequestProcessor.processDelete(UpdateRequestProcessor.java:59)
	at org.apache.solr.handler.loader.XMLLoader.processDelete(XMLLoader.java:366)
	at org.apache.solr.handler.loader.XMLLoader.processUpdate(XMLLoader.java:292)
	at org.apache.solr.handler.loader.XMLLoader.load(XMLLoader.java:188)
	at org.apache.solr.handler.UpdateRequestHandler$1.load(UpdateRequestHandler.java:97)
	at org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:68)
	... 33 more
{code}


> Using query time Join in deleteByQuery throws ClassCastException
> ----------------------------------------------------------------
>
>                 Key: SOLR-6357
>                 URL: https://issues.apache.org/jira/browse/SOLR-6357
>             Project: Solr
>          Issue Type: Bug
>          Components: query parsers
>    Affects Versions: 4.9
>            Reporter: Arcadius Ahouansou
>            Assignee: Mikhail Khludnev
>             Fix For: 7.0
>
>         Attachments: SOLR-6357.patch
>
>
> Consider the following input document where we have:
> - 1 Samsung mobile phone and
> - 2 manufactures: Apple and Samsung.
> {code}
> [
>    {
>       "id":"galaxy note ii",
>       "cat":"product",
>       "manu_s":"samsung"
>    },
>    {
>       "id":"samsung",
>       "cat":"manufacturer",
>       "name":"Samsung Electronics"
>    },
>    {
>       "id":"apple",
>       "cat":"manufacturer",
>       "name":"Apple Inc"
>    }
> ]
> {code}
> My objective is to delete from the default index all manufacturers not having any product in the index.
> After indexing (  curl 'http://localhost:8983/solr/update?commit=true' -H "Content-Type: text/json" --data-binary @delete-by-join-query.json )
> I went to
> {code}http://localhost:8983/solr/select?q=cat:manufacturer -{!join from=manu_s to=id}cat:product
> {code}
> and I could see only Apple, the only manufacturer not having any product in the index.
> However, when I use that same query for deletion: 
> {code}
> http://localhost:8983/solr/update?commit=true&stream.body=<delete><query>cat:manufacturer -{!join from=manu_s to=id}cat:product</query></delete>
> {code}
> I get
> {code}
> java.lang.ClassCastException: org.apache.lucene.search.IndexSearcher cannot be cast to org.apache.solr.search.SolrIndexSearcher
> 	at org.apache.solr.search.JoinQuery.createWeight(JoinQParserPlugin.java:143)
> 	at org.apache.lucene.search.BooleanQuery$BooleanWeight.<init>(BooleanQuery.java:185)
> 	at org.apache.lucene.search.BooleanQuery.createWeight(BooleanQuery.java:526)
> 	at org.apache.lucene.search.BooleanQuery$BooleanWeight.<init>(BooleanQuery.java:185)
> 	at org.apache.lucene.search.BooleanQuery.createWeight(BooleanQuery.java:526)
> 	at org.apache.lucene.search.IndexSearcher.createNormalizedWeight(IndexSearcher.java:684)
> 	at org.apache.lucene.search.QueryWrapperFilter.getDocIdSet(QueryWrapperFilter.java:55)
> 	at org.apache.lucene.index.BufferedUpdatesStream.applyQueryDeletes(BufferedUpdatesStream.java:552)
> 	at org.apache.lucene.index.BufferedUpdatesStream.applyDeletesAndUpdates(BufferedUpdatesStream.java:287)
> 	at 
> {code}
> This seems to be a bug.
> Looking at the source code, the exception is happening in {code}
>  @Override
>   public Weight createWeight(IndexSearcher searcher) throws IOException {
>     return new JoinQueryWeight((SolrIndexSearcher)searcher);
>   }
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org