[ 
https://issues.apache.org/jira/browse/LUCENE-5532?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Robert Muir updated LUCENE-5532:
--------------------------------

    Attachment: LUCENE-5532.patch

Here's a test for the thread safety bug, fails like this:
{noformat}
Caused by: java.lang.NullPointerException
        at 
org.apache.lucene.util.automaton.Automaton.getNumberOfTransitions(Automaton.java:543)
        at 
org.apache.lucene.search.AutomatonQuery.hashCode(AutomatonQuery.java:84)
        at 
org.apache.lucene.search.TestAutomatonQuery$1.run(TestAutomatonQuery.java:228)
{noformat}

this patch takes a different approach: it doesnt assert "same language" at all, 
thats expensive and I don't think its nearly as important as things like being 
thread-safe, hashcode being consistent with equals, etc.

So we just impl hashcode/equals with the compiled form. If the automata have 
the same structure (e.g. same regex or wildcard), it will return true. The 
previous stuff was overkill anyway, because  e.g. foo* would not equate to 
foo** since the "term" is different!

I also made getNumberedStates a little less trappy, even though its no longer 
used here by this stuff.

> AutomatonQuery.hashCode is not thread safe
> ------------------------------------------
>
>                 Key: LUCENE-5532
>                 URL: https://issues.apache.org/jira/browse/LUCENE-5532
>             Project: Lucene - Core
>          Issue Type: Bug
>            Reporter: Robert Muir
>         Attachments: LUCENE-5532.patch
>
>
> This hashCode is implemented based on  #states and #transitions.
> These methods use getNumberedStates() though, which may oversize itself 
> during construction and then "size down" when its done. But numberedStates is 
> prematurely set (before its "ready"), which can cause a hashCode call from 
> another thread to see a corrupt state... causing things like NPEs from null 
> states and other strangeness. I don't think we should set this variable until 
> its "finished".



--
This message was sent by Atlassian JIRA
(v6.2#6252)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to