Jason Gerlowski created SOLR-17677:
--------------------------------------

             Summary: {!join} in delete-by-query throws ClassCastException and 
closes IndexWriter
                 Key: SOLR-17677
                 URL: https://issues.apache.org/jira/browse/SOLR-17677
             Project: Solr
          Issue Type: Improvement
    Affects Versions: 9.8
            Reporter: Jason Gerlowski


Solr's JoinQuery implementation explicitly casts the provided "IndexSearcher" 
to a "SolrIndexSearcher".  In most contexts this assumption bears out, but not 
always.

One counter-example is Solr's "Delete By Query" codepath, which runs the 
deletion query using a "raw" Lucene IndexSearcher.  (Presumably this is because 
the new searcher has just been opened?).  Any DBQ containing a join query will 
throw a ClassCastException, which then bubbles up to the IndexWriter as a 
"tragic" Lucene exception, force-closing the IndexWriter and throwing the 
surrounding SolrCore in to a bad state:

{code}
2025-02-18 19:39:25.339 ERROR (qtp1426725223-177-localhost-73) [c:techproducts 
s:shard2 r:core_node3 x:techproducts_shard2_replica_n1 t:localhost-73] 
o.a.s.h.RequestHandlerBase Server exception => 
org.apache.solr.common.SolrException: this IndexWriter is closed
        at 
org.apache.solr.common.SolrException.wrapLuceneTragicExceptionIfNecessary(SolrException.java:218)
org.apache.solr.common.SolrException: this IndexWriter is closed
        at 
org.apache.solr.common.SolrException.wrapLuceneTragicExceptionIfNecessary(SolrException.java:218)
 ~[?:?]
        at 
org.apache.solr.handler.RequestHandlerBase.normalizeReceivedException(RequestHandlerBase.java:272)
 ~[?:?]
        at 
org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:238)
 ~[?:?]
        at org.apache.solr.core.SolrCore.execute(SolrCore.java:2880) ~[?:?]
        at 
org.apache.solr.servlet.HttpSolrCall.executeCoreRequest(HttpSolrCall.java:890) 
~[?:?]
        at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:576) 
~[?:?]
        at 
org.apache.solr.servlet.SolrDispatchFilter.dispatch(SolrDispatchFilter.java:241)
 ~[?:?]
        at 
org.apache.solr.servlet.SolrDispatchFilter.lambda$doFilterRetry$0(SolrDispatchFilter.java:198)
 ~[?:?]
        at 
org.apache.solr.servlet.ServletUtils.traceHttpRequestExecution2(ServletUtils.java:227)
 ~[?:?]
        at 
org.apache.solr.servlet.ServletUtils.rateLimitRequest(ServletUtils.java:197) 
~[?:?]
        at 
org.apache.solr.servlet.SolrDispatchFilter.doFilterRetry(SolrDispatchFilter.java:192)
 ~[?:?]
        at 
org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:181)
 ~[?:?]
        at javax.servlet.http.HttpFilter.doFilter(HttpFilter.java:97) 
~[jetty-servlet-api-4.0.6.jar:?]
        at 
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:210) 
~[jetty-servlet-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
 ~[jetty-servlet-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:527) 
~[jetty-servlet-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:131) 
~[jetty-server-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:598) 
~[jetty-security-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122) 
~[jetty-server-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:223)
 ~[jetty-server-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1580)
 ~[jetty-server-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221)
 ~[jetty-server-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1384)
 ~[jetty-server-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176)
 ~[jetty-server-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:484) 
~[jetty-servlet-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1553)
 ~[jetty-server-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174)
 ~[jetty-server-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1306)
 ~[jetty-server-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129) 
~[jetty-server-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:149)
 ~[jetty-server-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.server.handler.InetAccessHandler.handle(InetAccessHandler.java:228)
 ~[jetty-server-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:141)
 ~[jetty-server-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122) 
~[jetty-server-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:301)
 ~[jetty-rewrite-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122) 
~[jetty-server-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:822) 
~[jetty-server-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122) 
~[jetty-server-10.0.22.jar:10.0.22]
        at org.eclipse.jetty.server.Server.handle(Server.java:563) 
~[jetty-server-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.server.HttpChannel$RequestDispatchable.dispatch(HttpChannel.java:1598)
 ~[jetty-server-10.0.22.jar:10.0.22]
        at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:753) 
~[jetty-server-10.0.22.jar:10.0.22]
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:501) 
~[jetty-server-10.0.22.jar:10.0.22]
        at org.eclipse.jetty.server.HttpChannel.run(HttpChannel.java:461) 
~[jetty-server-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:421)
 ~[jetty-util-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:390)
 ~[jetty-util-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:277)
 ~[jetty-util-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.produce(AdaptiveExecutionStrategy.java:193)
 ~[jetty-util-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.http2.HTTP2Connection.produce(HTTP2Connection.java:208) 
~[http2-common-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.http2.HTTP2Connection.onFillable(HTTP2Connection.java:155) 
~[http2-common-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.http2.HTTP2Connection$FillableCallback.succeeded(HTTP2Connection.java:450)
 ~[http2-common-10.0.22.jar:10.0.22]
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100) 
~[jetty-io-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
 ~[jetty-io-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:421)
 ~[jetty-util-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:390)
 ~[jetty-util-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:277)
 ~[jetty-util-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:199)
 ~[jetty-util-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:411)
 ~[jetty-util-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969)
 ~[jetty-util-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194)
 ~[jetty-util-10.0.22.jar:10.0.22]
        at 
org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149)
 ~[jetty-util-10.0.22.jar:10.0.22]
        at java.base/java.lang.Thread.run(Thread.java:1583) [?:?]
Caused by: org.apache.lucene.store.AlreadyClosedException: this IndexWriter is 
closed
        at org.apache.lucene.index.IndexWriter.ensureOpen(IndexWriter.java:917) 
~[?:?]
        at org.apache.lucene.index.IndexWriter.ensureOpen(IndexWriter.java:930) 
~[?:?]
        at org.apache.lucene.index.IndexWriter.commit(IndexWriter.java:4095) 
~[?:?]
        at 
org.apache.solr.update.DirectUpdateHandler2.commit(DirectUpdateHandler2.java:762)
 ~[?:?]
        at 
org.apache.solr.update.processor.RunUpdateProcessorFactory$RunUpdateProcessor.processCommit(RunUpdateProcessorFactory.java:100)
 ~[?:?]
        at 
org.apache.solr.update.processor.UpdateRequestProcessor.processCommit(UpdateRequestProcessor.java:66)
 ~[?:?]
        at 
org.apache.solr.update.processor.UpdateRequestProcessor.processCommit(UpdateRequestProcessor.java:66)
 ~[?:?]
        at 
org.apache.solr.update.processor.DistributedUpdateProcessor.doLocalCommit(DistributedUpdateProcessor.java:1178)
 ~[?:?]
        at 
org.apache.solr.update.processor.DistributedZkUpdateProcessor.processCommit(DistributedZkUpdateProcessor.java:243)
 ~[?:?]
        at 
org.apache.solr.update.processor.LogUpdateProcessorFactory$LogUpdateProcessor.processCommit(LogUpdateProcessorFactory.java:173)
 ~[?:?]
        at 
org.apache.solr.update.processor.UpdateRequestProcessor.processCommit(UpdateRequestProcessor.java:66)
 ~[?:?]
        at 
org.apache.solr.handler.RequestHandlerUtils.handleCommit(RequestHandlerUtils.java:68)
 ~[?:?]
        at 
org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:91)
 ~[?:?]
        at 
org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:228)
 ~[?:?]
        ... 57 more
Caused by: java.lang.ClassCastException: class 
org.apache.lucene.search.IndexSearcher cannot be cast to class 
org.apache.solr.search.SolrIndexSearcher 
(org.apache.lucene.search.IndexSearcher and 
org.apache.solr.search.SolrIndexSearcher are in unnamed module of loader 
org.eclipse.jetty.webapp.WebAppClassLoader @5ab9b447)
        at org.apache.solr.search.JoinQuery.createWeight(JoinQuery.java:94) 
~[?:?]
        at 
org.apache.lucene.search.IndexSearcher.createWeight(IndexSearcher.java:899) 
~[?:?]
        at org.apache.lucene.search.BooleanWeight.<init>(BooleanWeight.java:61) 
~[?:?]
        at 
org.apache.lucene.search.BooleanQuery.createWeight(BooleanQuery.java:278) ~[?:?]
        at 
org.apache.solr.update.DeleteByQueryWrapper.createWeight(DeleteByQueryWrapper.java:72)
 ~[?:?]
        at 
org.apache.lucene.search.IndexSearcher.createWeight(IndexSearcher.java:899) 
~[?:?]
        at 
org.apache.lucene.index.FrozenBufferedUpdates.applyQueryDeletes(FrozenBufferedUpdates.java:393)
 ~[?:?]
        at 
org.apache.lucene.index.FrozenBufferedUpdates.apply(FrozenBufferedUpdates.java:171)
 ~[?:?]
        at 
org.apache.lucene.index.IndexWriter.forceApply(IndexWriter.java:6287) ~[?:?]
        at org.apache.lucene.index.IndexWriter.tryApply(IndexWriter.java:6187) 
~[?:?]
        at 
org.apache.lucene.index.IndexWriter.lambda$publishFrozenUpdates$12(IndexWriter.java:2818)
 ~[?:?]
        at 
org.apache.lucene.index.IndexWriter$EventQueue.processEventsInternal(IndexWriter.java:338)
 ~[?:?]
        at 
org.apache.lucene.index.IndexWriter$EventQueue.processEvents(IndexWriter.java:327)
 ~[?:?]
        at 
org.apache.lucene.index.IndexWriter.processEvents(IndexWriter.java:6030) ~[?:?]
        at org.apache.lucene.index.IndexWriter.getReader(IndexWriter.java:586) 
~[?:?]
        at 
org.apache.lucene.index.StandardDirectoryReader.doOpenFromWriter(StandardDirectoryReader.java:381)
 ~[?:?]
        at 
org.apache.lucene.index.StandardDirectoryReader.doOpenIfChanged(StandardDirectoryReader.java:366)
 ~[?:?]
        at 
org.apache.lucene.index.DirectoryReader.openIfChanged(DirectoryReader.java:246) 
~[?:?]
        at org.apache.solr.core.SolrCore.openNewSearcher(SolrCore.java:2318) 
~[?:?]
        at 
org.apache.solr.update.UpdateLog.openRealtimeSearcher(UpdateLog.java:898) ~[?:?]
        at org.apache.solr.update.UpdateLog.deleteByQuery(UpdateLog.java:876) 
~[?:?]
        at 
org.apache.solr.update.DirectUpdateHandler2.deleteByQuery(DirectUpdateHandler2.java:620)
 ~[?:?]
        at 
org.apache.solr.update.processor.RunUpdateProcessorFactory$RunUpdateProcessor.processDelete(RunUpdateProcessorFactory.java:86)
 ~[?:?]
        at 
org.apache.solr.update.processor.UpdateRequestProcessor.processDelete(UpdateRequestProcessor.java:58)
 ~[?:?]
        at 
org.apache.solr.update.processor.UpdateRequestProcessor.processDelete(UpdateRequestProcessor.java:58)
 ~[?:?]
        at 
org.apache.solr.update.processor.DistributedUpdateProcessor.doLocalDelete(DistributedUpdateProcessor.java:281)
 ~[?:?]
        at 
org.apache.solr.update.processor.DistributedUpdateProcessor.doLocalDeleteByQuery(DistributedUpdateProcessor.java:979)
 ~[?:?]
        at 
org.apache.solr.update.processor.DistributedUpdateProcessor.versionDeleteByQuery(DistributedUpdateProcessor.java:946)
 ~[?:?]
        at 
org.apache.solr.update.processor.DistributedUpdateProcessor.doDeleteByQuery(DistributedUpdateProcessor.java:907)
 ~[?:?]
        at 
org.apache.solr.update.processor.DistributedZkUpdateProcessor.doDeleteByQuery(DistributedZkUpdateProcessor.java:462)
 ~[?:?]
        at 
org.apache.solr.update.processor.DistributedUpdateProcessor.processDelete(DistributedUpdateProcessor.java:799)
 ~[?:?]
        at 
org.apache.solr.update.processor.DistributedZkUpdateProcessor.processDelete(DistributedZkUpdateProcessor.java:346)
 ~[?:?]
        at 
org.apache.solr.update.processor.LogUpdateProcessorFactory$LogUpdateProcessor.processDelete(LogUpdateProcessorFactory.java:134)
 ~[?:?]
        at 
org.apache.solr.update.processor.UpdateRequestProcessor.processDelete(UpdateRequestProcessor.java:58)
 ~[?:?]
        at 
org.apache.solr.handler.loader.JavabinLoader.delete(JavabinLoader.java:230) 
~[?:?]
        at 
org.apache.solr.handler.loader.JavabinLoader.parseAndLoadDocs(JavabinLoader.java:140)
 ~[?:?]
        at 
org.apache.solr.handler.loader.JavabinLoader.load(JavabinLoader.java:74) ~[?:?]
        at 
org.apache.solr.handler.UpdateRequestHandler$1.load(UpdateRequestHandler.java:102)
 ~[?:?]
        at 
org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:98)
 ~[?:?]
        at 
org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:228)
 ~[?:?]
        ... 57 more
{code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org
For additional commands, e-mail: issues-h...@solr.apache.org

Reply via email to