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

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

[~dsmiley] I started to investigate on this issue, i introduce an AtomicBoolean 
in the RTG, set by the DistributedUpdateProcessor instead of calling 
ulog.openRealtimeSearcher()

and evaluated in public static SolrInputDocument getInputDocument(...) only 
(line 633).

This method is defined static and provides the used SolrCore as parameter, so i 
cannot use a static member in the RTG because the flag must be set by core and 
evaluated by core otherwise it does not fit together.

The current solutions is tracked by the UpdateLog which is instantiated by each 
Updatehandler by each SolrCore, so it fits together.

So the point is, where should i put this AtomicBoolean (it must be context 
specific)?

An alternative solution would be a static Map with a key which separates the 
context, but i these seems to be ugly.

Any suggestions

> Indexing performance is unacceptable when child documents are involved
> ----------------------------------------------------------------------
>
>                 Key: SOLR-14923
>                 URL: https://issues.apache.org/jira/browse/SOLR-14923
>             Project: Solr
>          Issue Type: Bug
>      Security Level: Public(Default Security Level. Issues are Public) 
>          Components: update, UpdateRequestProcessors
>    Affects Versions: 8.3, 8.4, 8.5, 8.6, master (9.0)
>            Reporter: Thomas Wöckinger
>            Priority: Critical
>              Labels: performance
>
> Parallel indexing does not make sense at moment when child documents are used.
> The org.apache.solr.update.processor.DistributedUpdateProcessor checks at the 
> end of the method doVersionAdd if Ulog caches should be refreshed.
> This check will return true if any child document is included in the 
> AddUpdateCommand.
> If so ulog.openRealtimeSearcher(); is called, this call is very expensive, 
> and executed in a synchronized block of the UpdateLog instance, therefore all 
> other operations on the UpdateLog are blocked too.
> Because every important UpdateLog method (add, delete, ...) is done using a 
> synchronized block almost each operation is blocked.
> This reduces multi threaded index update to a single thread behavior.
> The described behavior is not depending on any option of the UpdateRequest, 
> so it does not make any difference if 'waitFlush', 'waitSearcher' or 
> 'softCommit'  is true or false.
> The described behavior makes the usage of ChildDocuments useless, because the 
> performance is unacceptable.
>  
>  



--
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