Should we (in separate issues) remove other uses of
WeakIdentityHashMap?  Are there other caches that might be improved
with Guava?  For example, GenericDatumReader's RESOLVER_CACHE might
avoid ThreadLocal.

Doug

On Wed, Jan 13, 2016 at 10:18 AM, Ryan Blue (JIRA) <[email protected]> wrote:
>
>     [ 
> https://issues.apache.org/jira/browse/AVRO-1781?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15096719#comment-15096719
>  ]
>
> Ryan Blue commented on AVRO-1781:
> ---------------------------------
>
> Thanks, Tom! I've added the comment and committed this.
>
>> Schema.parse is not thread safe
>> -------------------------------
>>
>>                 Key: AVRO-1781
>>                 URL: https://issues.apache.org/jira/browse/AVRO-1781
>>             Project: Avro
>>          Issue Type: Bug
>>          Components: java
>>    Affects Versions: 1.8.0
>>            Reporter: Sean Busbey
>>            Priority: Blocker
>>             Fix For: 1.8.0
>>
>>         Attachments: AVRO-1781.1.patch, AVRO-1781.2.patch
>>
>>
>> Post AVRO-1497, Schema.parse calls {{LogicalTypes.fromSchemaIgnoreInvalid}} 
>> on any schema that is expressed as a JSON object (anything except bare 
>> primitives).
>> That static method relies on a static cache based on WeakIdentityHashMap 
>> (WIHM).
>> WIHM clearly states that it isn't threadsafe 
>> [ref|https://github.com/apache/avro/blob/branch-1.8/lang/java/avro/src/main/java/org/apache/avro/util/WeakIdentityHashMap.java#L42]
>> {code}
>>  *
>>  * Note that this implementation is not synchronized.
>>  * </b>
>>  */
>> public class WeakIdentityHashMap<K, V> implements Map<K, V> {
>> {code}
>> All of the Schema.Parser instances use that same static Schema.parse method.
>> The end result is that as-is it's only safe to have a single thread parsing 
>> schemas in a given JVM.
>
>
>
> --
> This message was sent by Atlassian JIRA
> (v6.3.4#6332)

Reply via email to