openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Stefan Wokusch (JIRA)" <j...@apache.org>
Subject [jira] Commented: (OPENJPA-1716) Deadlock with openjpa.Multithreaded=true
Date Tue, 13 Jul 2010 16:06:49 GMT

    [ https://issues.apache.org/jira/browse/OPENJPA-1716?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12887817#action_12887817
] 

Stefan Wokusch commented on OPENJPA-1716:
-----------------------------------------

Ok, here are two Threads locking each other ::

Thread [main] (Suspended)	
	Unsafe.park(boolean, long) line: not available [native method]	
	LockSupport.park(Object) line: 158	
	ReentrantLock$NonfairSync(AbstractQueuedSynchronizer).parkAndCheckInterrupt() line: 747	
	ReentrantLock$NonfairSync(AbstractQueuedSynchronizer).acquireQueued(AbstractQueuedSynchronizer$Node,
int) line: 778	
	ReentrantLock$NonfairSync(AbstractQueuedSynchronizer).acquire(int) line: 1114	
	ReentrantLock$NonfairSync.lock() line: 186	
	ReentrantLock.lock() line: 262 [local variables unavailable]	
	StateManagerImpl.lock() line: 3305	
	StateManagerImpl.fetchObjectField(int) line: 2364	
	StateManagerImpl.fetchObject(int) line: 2357	
	RelationCollectionTableFieldStrategy(RelationToManyTableFieldStrategy).update(OpenJPAStateManager,
JDBCStore, RowManager) line: 194	
	RelationCollectionTableFieldStrategy.update(OpenJPAStateManager, JDBCStore, RowManager) line:
107	
	FieldMapping.update(OpenJPAStateManager, JDBCStore, RowManager) line: 699	
	BatchingConstraintUpdateManager(AbstractUpdateManager).update(OpenJPAStateManager, BitSet,
ClassMapping, RowManager, JDBCStore, Collection, boolean) line: 334	
	BatchingConstraintUpdateManager(AbstractUpdateManager).populateRowManager(OpenJPAStateManager,
RowManager, JDBCStore, Collection, Collection) line: 169	
	BatchingConstraintUpdateManager(AbstractUpdateManager).flush(Collection, JDBCStore, PreparedStatementManager)
line: 95	
	BatchingConstraintUpdateManager(AbstractUpdateManager).flush(Collection, JDBCStore) line:
76	
	JDBCStoreManager.flush(Collection) line: 751	
	ROPStoreManager(DelegatingStoreManager).flush(Collection<OpenJPAStateManager>) line:
131	
	FinalizingBrokerImpl(BrokerImpl).flush(int) line: 2139	
	FinalizingBrokerImpl(BrokerImpl).flushSafe(int) line: 2037	
	FinalizingBrokerImpl(BrokerImpl).beforeCompletion() line: 1955	
	LocalManagedRuntime.commit() line: 81	
	FinalizingBrokerImpl(BrokerImpl).commit() line: 1479	
	DelegatingBroker.commit() line: 925	
	EntityManagerImpl.commit() line: 559	
	....


Thread [pool-2-thread-1] (Suspended)	
	Unsafe.park(boolean, long) line: not available [native method]	
	LockSupport.park(Object) line: 158	
	ReentrantLock$NonfairSync(AbstractQueuedSynchronizer).parkAndCheckInterrupt() line: 747	
	ReentrantLock$NonfairSync(AbstractQueuedSynchronizer).acquireQueued(AbstractQueuedSynchronizer$Node,
int) line: 778	
	ReentrantLock$NonfairSync(AbstractQueuedSynchronizer).acquire(int) line: 1114	
	ReentrantLock$NonfairSync.lock() line: 186	
	ReentrantLock.lock() line: 262	
	FinalizingBrokerImpl(BrokerImpl).lock() line: 4366	
	FinalizingBrokerImpl(BrokerImpl).beginOperation(boolean) line: 1893	
	FinalizingBrokerImpl(BrokerImpl).isActive() line: 1865	
	StateManagerImpl.beforeAccessField(int) line: 1603	
	StateManagerImpl.accessingField(int) line: 1591	
	ObjektEntity.pcGetid(ObjektEntity) line: not available	
	TestEntity(ObjektEntity).getId() line: 91
	 .....

> Deadlock with openjpa.Multithreaded=true
> ----------------------------------------
>
>                 Key: OPENJPA-1716
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1716
>             Project: OpenJPA
>          Issue Type: Bug
>    Affects Versions: 2.0.0-M1, 2.0.0-M2, 2.0.0-M3, 2.0.0-beta, 2.0.0-beta2, 2.0.0-beta3,
2.0.0
>            Reporter: Stefan Wokusch
>
> There is a Deadlock by using Multithreaded=true and work with some Threads on the same
Entitymanager.
> After many hours of debugging, i found a solution for that Deadlock: The Problem could
be solved by adding another lock into the lock Method of the StateManagerImpl:
> StateManagerImpl ~line3308
>     /**
>      * Lock the state manager if the multithreaded option is set.
>      */
>     protected void lock() {
>         if (_instanceLock != null){
>         	_broker.lock();//<- This is the new Part to fix the Deadlock
>         	_instanceLock.lock();
>         }
>     }
> Worked for me without Problems for a long time.
> Some other Configurations:
> <persistence xmlns="http://java.sun.com/xml/ns/persistence"
> 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">
> 	<persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
> 		<mapping-file>orm.xml</mapping-file>
> 		
> 		<class>...</class>
> 		<class>...</class>
> 		
> 		<properties>
> 			<property name="openjpa.OrphanedKeyAction" value="log(Channel=Orphans, Level=TRACE)"
/>
> 			<property name="openjpa.ConnectionFactoryProperties" value="PrettyPrint=true, PrettyPrintLineLength=80"
/>
> 			<property name="openjpa.Multithreaded" value="true" />
> 			<property name="openjpa.InverseManager" value="true" />
> 			<property name="openjpa.LockManager" value="none" />
> 			<property name="openjpa.WriteLockLevel" value="none" />
> 			<property name="openjpa.Compatibility" value="
> 					QuotedNumbersInQueries=true, 
> 					CopyOnDetach=true,
> 					cascadeWithDetach=true,
> 					superclassDiscriminatorStrategyByDefault=false
> 			" />
> 			<property name="openjpa.DetachState" value="fetch-groups" />
> 			<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
> 			<!-- Default DataSource -->
> 			<property name="openjpa.ConnectionURL" value="jdbc:h2:db/test" />
> 			<property name="openjpa.ConnectionDriverName" value="org.h2.Driver" />
> 		</properties>
> 	</persistence-unit>
> </persistence>

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message