30 Apr 2012 08:26
[jira] [Created] (SOLR-3424) PhoneticFilterFactory threadsafety bug
David Smiley (JIRA <jira <at> apache.org>
2012-04-30 06:26:49 GMT
2012-04-30 06:26:49 GMT
David Smiley created SOLR-3424:
----------------------------------
Summary: PhoneticFilterFactory threadsafety bug
Key: SOLR-3424
URL: https://issues.apache.org/jira/browse/SOLR-3424
Project: Solr
Issue Type: Bug
Components: Schema and Analysis
Affects Versions: 3.6, 4.0
Reporter: David Smiley
Assignee: David Smiley
Priority: Minor
Fix For: 4.0
PhoneticFilterFactory has a static HashMap registry mapping an encoder name to an implementation. There
is a ReentrantLock used when the map is modified (when the encoder config specifies a class name).
However, this map, which can be accessed by multiple indexing threads, isn't guarded on any of the reads,
which isn't just the common path but also the error messages which dump the registry into the error message.
I realize the likelihood of a problem is extremely slim, but a bug's a bug.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
Uwe: Thanks very much for your comments. I wasn't sure what the lifecycle of this class was or if/how it is
shared; I looked at the javadocs of TokenFilterFactory just now and I think its clearer. Given that the
Factory's init() method is not going to be called frequently, it seems to me that the class name based
lookups need not cache at all. And I also like your suggestion of improving the fallback lookup by looking
for a '.'. BTW I considered wrapping with unmodifiableMap but didn't bother because it's not exposed
outside of this class, which is fairly small too, but I will since it seems to be a big deal to you (three
exclamation points). I'll propose another patch later
~ David
> PhoneticFilterFactory threadsafety bug
> --------------------------------------
>
> Key: SOLR-3424
> URL:
It's not so important, if it's private to the class! I just don't want public code to expose Collections
not intended to be modified in a modifiable way, so i am fine with or without unmodifiable. There are also
places in Lucene violating this (or use public arrays, which cannot be protected - like CompositeReader.getSequentialSubReaders()).
> PhoneticFilterFactory threadsafety bug
> --------------------------------------
>
> Key: SOLR-3424
> URL:
RSS Feed