[infinispan-issues] [JBoss JIRA] (ISPN-1546) FineGrainedAtomicMap key and value iterators are not threadsafe

Sanne Grinovero (Issue Comment Edited) (JIRA) jira-events at lists.jboss.org
Fri Dec 9 10:00:41 EST 2011


    [ https://issues.jboss.org/browse/ISPN-1546?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12649592#comment-12649592 ] 

Sanne Grinovero edited comment on ISPN-1546 at 12/9/11 9:58 AM:
----------------------------------------------------------------

Had another idea:
rather than making a defensive copy of the array while owning a lock, and having to make this copy on each created iterator, we should make a copy on writes on the array and swap the reference safely with the previous instance when applying any change. I'm not looking at the code, so not sure if the safe reference swap means using a lock or just an AtomicReference, but this would avoid a copy and lock per read operation. WDYT?
                
      was (Author: sannegrinovero):
    Had another idea:
rather than making a defensive copy of the array while owning a lock, and having to make this copy on each created iterator, we should make a copy on writes on the array and swap the reference safely with the previous instance when applying any change. I'm not looking at the code, so not sure if the safe reference swap means using a lock or just an AtomicReference, but this would a copy and lock per read operation. WDYT?
                  
> FineGrainedAtomicMap key and value iterators are not threadsafe
> ---------------------------------------------------------------
>
>                 Key: ISPN-1546
>                 URL: https://issues.jboss.org/browse/ISPN-1546
>             Project: Infinispan
>          Issue Type: Bug
>          Components: Core API, Locking and Concurrency
>            Reporter: Sanne Grinovero
>            Assignee: Vladimir Blagojevic
>
> Invoking #keySet() or #values() might fail, even when using a transaction to isolate threads:
> {code}
> java.util.ConcurrentModificationException
> 	at org.infinispan.util.FastCopyHashMap$FasyCopyHashMapIterator.nextEntry(FastCopyHashMap.java:484)
> 	at org.infinispan.util.FastCopyHashMap$KeyIterator.next(FastCopyHashMap.java:560)
> 	at java.util.AbstractCollection.addAll(AbstractCollection.java:305)
> 	at org.infinispan.atomic.FineGrainedAtomicHashMapProxy.keySet(FineGrainedAtomicHashMapProxy.java:104)
> 	at org.hibernate.ogm.dialect.infinispan.InfinispanAssociationSnapshot.getRowKeys(InfinispanAssociationSnapshot.java:59)
> 	at org.hibernate.ogm.datastore.spi.Association.getKeys(Association.java:132)
> 	at org.hibernate.ogm.loader.OgmLoader.getResultSet(OgmLoader.java:420)
> 	at org.hibernate.ogm.loader.OgmLoader.doQuery(OgmLoader.java:248)
> 	at org.hibernate.ogm.loader.OgmLoader.doQueryAndInitializeNonLazyCollections(OgmLoader.java:215)
> 	at org.hibernate.ogm.loader.OgmLoader.loadCollection(OgmLoader.java:185)
> 	at org.hibernate.ogm.loader.OgmBasicCollectionLoader.initialize(OgmBasicCollectionLoader.java:42)
> 	at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:622)
> 	at org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:82)
> 	at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:1607)
> 	at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:379)
> 	at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:112)
> 	at org.hibernate.collection.internal.PersistentSet.iterator(PersistentSet.java:180)
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the infinispan-issues mailing list