[ https://issues.apache.org/jira/browse/LUCENE-9791?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17300410#comment-17300410 ]
ASF subversion and git services commented on LUCENE-9791: --------------------------------------------------------- Commit f171417e99548b9f5aa84605809ee58228e1e91a in lucene-solr's branch refs/heads/branch_8x from pawel-bugalski-dynatrace [ https://gitbox.apache.org/repos/asf?p=lucene-solr.git;h=f171417 ] LUCENE-9791 Allow calling BytesRefHash#find concurrently (#8) Removes `scratch1` field in `BytesRefHash` by accessing underlying bytes pool directly in `equals` method. As a result it is now possible to call `BytesRefHash#find` concurrently as long as there are no concurrent modifications to BytesRefHash instance and it is correctly published. This addresses the concurrency issue with Monitor (aka Luwak) since it is using `BytesRefHash#find` concurrently without additional synchronization. > Monitor (aka Luwak) has concurrency issues related to BytesRefHash#find > ----------------------------------------------------------------------- > > Key: LUCENE-9791 > URL: https://issues.apache.org/jira/browse/LUCENE-9791 > Project: Lucene - Core > Issue Type: Bug > Components: core/other > Affects Versions: main (9.0), 8.7, 8.8 > Reporter: Paweł Bugalski > Priority: Major > Attachments: LUCENE-9791.patch, LUCENE-97910-8.x-backport.patch, > LUCENE-9791_example.patch > > Time Spent: 4h 20m > Remaining Estimate: 0h > > _org.apache.lucene.monitor.Monitor_ can sometimes *NOT* match a document that > should be matched by one of registered queries if match operations are run > concurrently from multiple threads. > This is because sometimes in a concurrent environment > _TermFilteredPresearcher_ might not select a query that could later on match > one of documents being matched. > Internally _TermFilteredPresearcher_ is using a term acceptor: an instance of > _org.apache.lucene.monitor.QueryIndex.QueryTermFilter_. _QueryTermFilter_ is > correctly initialized under lock and its internal state (a map of > _org.apache.lucene.util.BytesRefHash_ instances) is correctly published. > Later one when those instances are used concurrently a problem with > _org.apache.lucene.util.BytesRefHash#find_ is triggered since it is not > thread safe. > _org.apache.lucene.util.BytesRefHash#find_ internally is using a private > _org.apache.lucene.util.BytesRefHash#equals_ method, which is using an > instance field _scratch1_ as a temporary buffer to compare its _ByteRef_ > parameter with contents of _ByteBlockPool_. This is not thread safe and can > cause incorrect answers as well as _ArrayOutOfBoundException_. > __ > -- 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