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

Thomas Wöckinger commented on SOLR-15192:
-----------------------------------------

[~dsmiley] Finally found the reason, really hard to debug because RTG is not 
always used.

1.) DistributedUpdateProcessor at line 688  reads: oldRootDocWithChildren = 
RealTimeGetComponent.getInputDocument

This document can contain LazyField instances.

2.) At line 710 AtomicUpdateDocumentMerger is used to merge the incoming 
document with the oldRootDocWithChildren

3.) In AtomicUpdateDocumentMerger.mergeDocHavingSameId the incoming fields are 
getting merged.

If the oldRootDocWithChildren has fields which are not part of the incoming 
document, they will be left untouched, which leads to the exception in case of 
an LazyField.

>From my point of view there are two possible solutions:

a.) restore the all (not merged) lazy fields from the target document

b.) remove the all (not merged) lazy fields from the target document

I tend to b.) because i think it is not even correct to use the value during 
atomic update, maybe it is even better to remove all LazyField instances before 
using the AtomicUpdateDocumentMerger

 

> Atomic update error when RTG component is involved
> --------------------------------------------------
>
>                 Key: SOLR-15192
>                 URL: https://issues.apache.org/jira/browse/SOLR-15192
>             Project: Solr
>          Issue Type: Bug
>      Security Level: Public(Default Security Level. Issues are Public) 
>          Components: update, UpdateRequestProcessors
>    Affects Versions: 8.8, 8.8.1
>            Reporter: Thomas Wöckinger
>            Priority: Critical
>
> Following exception is thrown when using atomic updates:
>  
> solr_1 | 2021-02-24 08:33:04.655 ERROR (qtp776484396-117) [ 
> x:CollectionUnderTest34259b20-425b-4cdd-853e-eb173a6611f2] 
> o.a.s.h.RequestHandlerBase org.apache.solr.common.SolrException: 
> TransactionLog doesn't know how to serialize class 
> org.apache.lucene.document.LazyDocument$LazyField; try implementing 
> ObjectResolver?
> solr_1 | at 
> org.apache.solr.update.TransactionLog$1.resolve(TransactionLog.java:100)
> solr_1 | at 
> org.apache.solr.common.util.JavaBinCodec.writeVal(JavaBinCodec.java:266)
> solr_1 | at 
> org.apache.solr.common.util.JavaBinCodec$BinEntryWriter.put(JavaBinCodec.java:441)
> solr_1 | at 
> org.apache.solr.common.ConditionalKeyMapWriter$EntryWriterWrapper.put(ConditionalKeyMapWriter.java:44)
> solr_1 | at 
> org.apache.solr.common.MapWriter$EntryWriter.putNoEx(MapWriter.java:101)
> solr_1 | at 
> org.apache.solr.common.MapWriter$EntryWriter.lambda$getBiConsumer$0(MapWriter.java:161)
> solr_1 | at 
> org.apache.solr.common.SolrInputDocument.lambda$writeMap$0(SolrInputDocument.java:59)
> solr_1 | at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:684)
> solr_1 | at 
> org.apache.solr.common.SolrInputDocument.writeMap(SolrInputDocument.java:61)
> solr_1 | at 
> org.apache.solr.common.util.JavaBinCodec.writeSolrInputDocument(JavaBinCodec.java:667)
> solr_1 | at 
> org.apache.solr.update.TransactionLog.write(TransactionLog.java:397)
> solr_1 | at org.apache.solr.update.UpdateLog.add(UpdateLog.java:585)
> solr_1 | at org.apache.solr.update.UpdateLog.add(UpdateLog.java:557)
> solr_1 | at 
> org.apache.solr.update.DirectUpdateHandler2.doNormalUpdate(DirectUpdateHandler2.java:351)
> solr_1 | at 
> org.apache.solr.update.DirectUpdateHandler2.addDoc0(DirectUpdateHandler2.java:294)
> solr_1 | at 
> org.apache.solr.update.DirectUpdateHandler2.addDoc(DirectUpdateHandler2.java:241)
> solr_1 | at 
> org.apache.solr.update.processor.RunUpdateProcessorFactory$RunUpdateProcessor.processAdd(RunUpdateProcessorFactory.java:73)
> solr_1 | at 
> org.apache.solr.update.processor.UpdateRequestProcessor.processAdd(UpdateRequestProcessor.java:55)
> solr_1 | at 
> org.apache.solr.update.processor.NestedUpdateProcessorFactory$NestedUpdateProcessor.processAdd(NestedUpdateProcessorFactory.java:79)
> solr_1 | at 
> org.apache.solr.update.processor.UpdateRequestProcessor.processAdd(UpdateRequestProcessor.java:55)
> solr_1 | at 
> org.apache.solr.update.processor.DistributedUpdateProcessor.doLocalAdd(DistributedUpdateProcessor.java:256)
> solr_1 | at 
> org.apache.solr.update.processor.DistributedUpdateProcessor.doVersionAdd(DistributedUpdateProcessor.java:495)
> solr_1 | at 
> org.apache.solr.update.processor.DistributedUpdateProcessor.lambda$versionAdd$0(DistributedUpdateProcessor.java:336)
> solr_1 | at 
> org.apache.solr.update.VersionBucket.runWithLock(VersionBucket.java:50)
> solr_1 | at 
> org.apache.solr.update.processor.DistributedUpdateProcessor.versionAdd(DistributedUpdateProcessor.java:336)
> solr_1 | at 
> org.apache.solr.update.processor.DistributedUpdateProcessor.processAdd(DistributedUpdateProcessor.java:222)
> solr_1 | at 
> org.apache.solr.update.processor.LogUpdateProcessorFactory$LogUpdateProcessor.processAdd(LogUpdateProcessorFactory.java:106)
> solr_1 | at 
> org.apache.solr.handler.loader.JavabinLoader$1.update(JavabinLoader.java:110)
> solr_1 | at 
> org.apache.solr.client.solrj.request.JavaBinUpdateRequestCodec$StreamingCodec.readOuterMostDocIterator(JavaBinUpdateRequestCodec.java:343)
> solr_1 | at 
> org.apache.solr.client.solrj.request.JavaBinUpdateRequestCodec$StreamingCodec.readIterator(JavaBinUpdateRequestCodec.java:291)
> solr_1 | at 
> org.apache.solr.common.util.JavaBinCodec.readObject(JavaBinCodec.java:338)
> solr_1 | at 
> org.apache.solr.common.util.JavaBinCodec.readVal(JavaBinCodec.java:283)
> solr_1 | at 
> org.apache.solr.client.solrj.request.JavaBinUpdateRequestCodec$StreamingCodec.readNamedList(JavaBinUpdateRequestCodec.java:244)
> solr_1 | at 
> org.apache.solr.common.util.JavaBinCodec.readObject(JavaBinCodec.java:303)
> solr_1 | at 
> org.apache.solr.common.util.JavaBinCodec.readVal(JavaBinCodec.java:283)
> solr_1 | at 
> org.apache.solr.common.util.JavaBinCodec.unmarshal(JavaBinCodec.java:196)
> solr_1 | at 
> org.apache.solr.client.solrj.request.JavaBinUpdateRequestCodec.unmarshal(JavaBinUpdateRequestCodec.java:131)
> solr_1 | at 
> org.apache.solr.handler.loader.JavabinLoader.parseAndLoadDocs(JavabinLoader.java:122)
> solr_1 | at 
> org.apache.solr.handler.loader.JavabinLoader.load(JavabinLoader.java:70)
> solr_1 | at 
> org.apache.solr.handler.UpdateRequestHandler$1.load(UpdateRequestHandler.java:97)
> solr_1 | at 
> org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:82)
> solr_1 | at 
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:216)
> solr_1 | at org.apache.solr.core.SolrCore.execute(SolrCore.java:2646)
> solr_1 | at 
> org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:794)
> solr_1 | at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:567)
> solr_1 | at 
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:427)
> solr_1 | at 
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:357)
> solr_1 | at 
> org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201)
> solr_1 | at 
> org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
> solr_1 | at 
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548)
> solr_1 | at 
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
> solr_1 | at 
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:602)
> solr_1 | at 
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> solr_1 | at 
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
> solr_1 | at 
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1612)
> solr_1 | at 
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
> solr_1 | at 
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1434)
> solr_1 | at 
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
> solr_1 | at 
> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501)
> solr_1 | at 
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1582)
> solr_1 | at 
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
> solr_1 | at 
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1349)
> solr_1 | at 
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
> solr_1 | at 
> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:191)
> solr_1 | at 
> org.eclipse.jetty.server.handler.InetAccessHandler.handle(InetAccessHandler.java:177)
> solr_1 | at 
> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
> solr_1 | at 
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> solr_1 | at 
> org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322)
> solr_1 | at 
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> solr_1 | at org.eclipse.jetty.server.Server.handle(Server.java:516)
> solr_1 | at 
> org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)
> solr_1 | at 
> org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:556)
> solr_1 | at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)
> solr_1 | at 
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:273)
> solr_1 | at 
> org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
> solr_1 | at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
> solr_1 | at 
> org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:540)
> solr_1 | at 
> org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:395)
> solr_1 | at 
> org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:161)
> solr_1 | at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
> solr_1 | at 
> org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
> solr_1 | at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
> solr_1 | at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
> solr_1 | at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
> solr_1 | at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
> solr_1 | at 
> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:375)
> solr_1 | at 
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:773)
> solr_1 | at 
> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:905)
> solr_1 | at java.base/java.lang.Thread.run(Thread.java:834)



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

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

Reply via email to